Skip to content

Commit 7b9721d

Browse files
Merge pull request #290 from MikroElektronika/patch/uart-interrupt-seleciton
UART & logger set to have interrupt approach by default
2 parents 40cfbfe + d330f55 commit 7b9721d

File tree

10 files changed

+64
-14
lines changed

10 files changed

+64
-14
lines changed

api/log/lib/include/uart/log.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ typedef struct
9797
hal_pin_name_t rx_pin;
9898
hal_pin_name_t tx_pin;
9999
uint32_t baud;
100+
bool is_interrupt;
100101
log_level_t level;
101102
} log_cfg_t;
102103

@@ -124,6 +125,7 @@ typedef struct
124125
cfg.rx_pin = MIKROBUS(mikrobus, MIKROBUS_RX); \
125126
cfg.tx_pin = MIKROBUS(mikrobus, MIKROBUS_TX); \
126127
cfg.baud = 115200; \
128+
cfg.is_interrupt = true; \
127129
cfg.level = LOG_LEVEL_DEBUG;
128130

129131
/*!

api/log/lib/src/uart/log.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ log_err_t log_init ( log_t *log, log_cfg_t *cfg )
6767
// UART module config
6868
uart_cfg.rx_pin = cfg->rx_pin; // UART RX pin.
6969
uart_cfg.tx_pin = cfg->tx_pin; // UART TX pin.
70+
uart_cfg.is_interrupt = cfg->is_interrupt;
7071
uart_cfg.tx_ring_size = sizeof( uart_tx_buf );
7172
uart_cfg.rx_ring_size = sizeof( uart_rx_buf );
7273

changelog/v2.14.2/changelog.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<p align="center">
2+
<img src="http://www.mikroe.com/img/designs/beta/logo_small.png?raw=true" alt="MikroElektronika"/>
3+
</p>
4+
5+
---
6+
7+
**[BACK TO MAIN FILE](../../changelog.md)**
8+
9+
---
10+
11+
# `v2.14.2`
12+
13+
+ released: 2025-03-12
14+
15+
## Changes
16+
17+
+ [`v2.14.2`](#v2142)
18+
+ [Changes](#changes)
19+
+ [Fixes](#fixes)
20+
+ [mikroSDK](#mikrosdk)
21+
+ [NEW HARDWARE](#new-hardware)
22+
23+
### Fixes
24+
25+
#### mikroSDK
26+
27+
+ Set UART configuration to use interrupt-based approach by default
28+
+ Applied to both UART and logger for consistency across all projects
29+
30+
### NEW HARDWARE
31+
32+
> NOTE:
33+
>> If any new hardware was added to current version, it will be listed here.
34+
35+
Support added for following hardware:
36+
37+
---
38+
39+
**[BACK TO MAIN FILE](../../changelog.md)**
40+
41+
---

drv/lib/include/drv_uart.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ typedef struct
149149

150150
size_t tx_ring_size; /*!< Tx ring size. */
151151
size_t rx_ring_size; /*!< Rx ring size. */
152+
153+
bool is_interrupt; /*!< Choose between interrupt and polling. */
152154
} uart_config_t;
153155

154156
/**
@@ -174,7 +176,6 @@ typedef struct
174176
bool is_rx_irq_enabled; /*!< Rx interrupt enabled. */
175177

176178
bool is_blocking; /*!< Is blocking. */
177-
bool is_interrupt; /*!< Choose between interrupt and polling. */
178179
} uart_t;
179180

180181
/*!

drv/lib/src/lib_drv_uart/drv_uart.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ void uart_configure_default( uart_config_t *config )
115115

116116
config->tx_ring_size = 0;
117117
config->rx_ring_size = 0;
118+
119+
config->is_interrupt = true;
118120
}
119121
}
120122

@@ -313,7 +315,7 @@ err_t uart_write( uart_t *obj, uint8_t *buffer, size_t size )
313315
if ( hal_handle->init_state == false )
314316
hal_ll_module_configure_uart( (handle_t *)&hal_handle );
315317

316-
if ( obj->is_interrupt ) {
318+
if ( obj->config.is_interrupt ) {
317319
while ( data_written < size )
318320
{
319321
if ( ring_buf8_is_full( ring ) )
@@ -446,7 +448,7 @@ err_t uart_read( uart_t *obj, uint8_t *buffer, size_t size )
446448
if ( hal_handle->init_state == false )
447449
hal_ll_module_configure_uart( (handle_t *)&hal_handle );
448450

449-
if ( obj->is_interrupt ) {
451+
if ( obj->config.is_interrupt ) {
450452
// Enable module interrupt, if it's disabled
451453
if ( !hal_obj->is_rx_irq_enabled )
452454
{

hal/lib/include/hal_uart.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,8 @@ typedef struct
176176

177177
size_t tx_ring_size; /*!< Tx ring size. */
178178
size_t rx_ring_size; /*!< Rx ring size. */
179+
180+
bool is_interrupt; /*!< Choose between interrupt and polling. */
179181
} hal_uart_config_t;
180182

181183
/**
@@ -201,7 +203,6 @@ typedef struct
201203
bool is_rx_irq_enabled; /*!< Rx interrupt enabled. */
202204

203205
bool is_blocking; /*!< Is blocking. */
204-
bool is_interrupt; /*!< Choose between interrupt and polling. */
205206
} hal_uart_t;
206207

207208
/*!

hal/lib/src/lib_hal_uart/hal_uart.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ void hal_uart_configure_default( hal_uart_config_t *config )
123123

124124
config->tx_ring_size = 0;
125125
config->rx_ring_size = 0;
126+
127+
config->is_interrupt = true;
126128
}
127129
}
128130

@@ -159,15 +161,15 @@ err_t hal_uart_open( handle_t *handle, bool hal_obj_open_state )
159161
return ACQUIRE_FAIL;
160162
}
161163

162-
if ( hal_obj->is_interrupt )
164+
if ( hal_obj->config.is_interrupt )
163165
if ( !hal_ll_core_implemented() )
164166
return ACQUIRE_FAIL;
165167

166168
if ( hal_owner != handle )
167169
{
168170
while ( hal_module_state_count-- ) {
169171
if ( DRV_TO_HAL_PREFIXED(uart, hal_module_state)[ hal_module_state_count ].drv_uart_handle == handle ) {
170-
if ( hal_obj->is_interrupt ) {
172+
if ( hal_obj->config.is_interrupt ) {
171173
hal_obj->is_tx_irq_enabled = false;
172174
hal_obj->is_rx_irq_enabled = false;
173175
}
@@ -209,7 +211,7 @@ err_t hal_uart_open( handle_t *handle, bool hal_obj_open_state )
209211
ring_buf8_init( &hal_obj->config.tx_buf, hal_obj->tx_ring_buffer,
210212
hal_obj->config.tx_ring_size );
211213

212-
if ( hal_obj->is_interrupt ) {
214+
if ( hal_obj->config.is_interrupt ) {
213215
hal_ll_uart_register_irq_handler( &handle_ll, hal_uart_irq_handler, ( handle_t )hal_obj );
214216
hal_ll_core_enable_interrupts();
215217
}
@@ -361,7 +363,7 @@ size_t hal_uart_write( handle_t *handle, uint8_t *buffer, size_t size )
361363
#endif
362364

363365
while ( data_written < size ) {
364-
if ( hal_obj->is_interrupt ) {
366+
if ( hal_obj->config.is_interrupt ) {
365367
if ( ring_buf8_is_full( ring ) )
366368
{
367369
if ( !hal_obj->is_blocking )
@@ -425,7 +427,7 @@ size_t hal_uart_read( handle_t *handle, uint8_t *buffer, size_t size )
425427
if ( hal_handle->init_state == false )
426428
hal_ll_module_configure_uart( &hal_handle );
427429

428-
if ( hal_obj->is_interrupt ) {
430+
if ( hal_obj->config.is_interrupt ) {
429431
// Enable module interrupt, if it's disabled
430432
if ( !hal_obj->is_rx_irq_enabled )
431433
{
@@ -472,8 +474,8 @@ size_t hal_uart_read( handle_t *handle, uint8_t *buffer, size_t size )
472474
}
473475
} else {
474476
uint8_t volatile rd_data;
475-
476-
rd_data = hal_ll_uart_read_polling( &hal_obj->handle );
477+
478+
rd_data = hal_ll_uart_read_polling( &hal_obj->handle );
477479
ring_buf8_push( &hal_obj->config.rx_buf, rd_data );
478480
while ( ( size > 0 ) && !ring_buf8_is_empty( ring ) )
479481
{

manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
"display-name": "mikroSDK",
44
"description": "MikroSDK 2.0 is an embedded software development framework designed to simplify and accelerate application development on Mikroe hardware platform, specifically for Click Boards and other extension board drivers, on a broad range of microcontroller vendors and architectures. It includes peripheral libraries and drivers, middleware, board support, and application layer libraries among others.",
55
"icon": "images/icon-mikroSDK.png",
6-
"manifest-version": "1.0.23"
6+
"manifest-version": "1.0.24"
77
}

platform/mikrosdk_version/include/mikrosdk_version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ extern "C"{
6767
* @note changes in patch version indicate smaller updates,
6868
* bug fixes and improvements
6969
*/
70-
#define mikroSDK_PATCH_VERSION 1
70+
#define mikroSDK_PATCH_VERSION 2
7171

7272
/**
7373
* @brief mikroSDK_GET_VERSION

tests/uart/test_example/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ int main( void ) {
8888

8989
// Choose UART mode: Set to `true` for
9090
// interrupt-driven UART, `false` for polling mode.
91-
uart.is_interrupt = false;
91+
uart_cfg.is_interrupt = false;
9292

9393
// TODO Test different set of pins.
9494
// Make sure to test higher nibble pins, ie. pins

0 commit comments

Comments
 (0)