44 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
55 */
66
7+ #include <string.h>
8+ #include <stdio.h>
79#include <zephyr/kernel.h>
810#include <zephyr/device.h>
911#include <zephyr/devicetree.h>
@@ -15,21 +17,46 @@ LOG_MODULE_REGISTER(app);
1517#define BUF_SIZE 64
1618static K_MEM_SLAB_DEFINE (uart_slab , BUF_SIZE , 3 , 4 ) ;
1719
18- static void uart_irq_handler (const struct device * dev , void * context )
20+ #define TX_DATA_SIZE 5
21+ static const uint8_t tx_buf [TX_DATA_SIZE ] = {1 , 2 , 3 , 4 , 5 };
22+ static uint8_t buffer_print [TX_DATA_SIZE * 5 + 1 ];
23+
24+ static void to_display_format (const uint8_t * src , size_t size , char * dst )
25+ {
26+ size_t i ;
27+
28+ for (i = 0 ; i < size ; i ++ ) {
29+ sprintf (dst + 5 * i , "0x%02x," , src [i ]);
30+ }
31+ }
32+
33+ static void verify_buffers (const uint8_t * tx_data , char * rx_data , size_t size )
1934{
20- uint8_t buf [] = {1 , 2 , 3 , 4 , 5 };
35+ if (memcmp (tx_data , rx_data , size )) {
36+ to_display_format (tx_data , size , buffer_print );
37+ LOG_ERR ("Buffer contents are different: %s" , buffer_print );
38+ to_display_format (rx_data , size , buffer_print );
39+ LOG_ERR (" vs: %s" , buffer_print );
40+ __ASSERT (false, "Buffer contents are different" );
41+ }
42+ }
2143
44+ static void uart_irq_handler (const struct device * dev , void * context )
45+ {
2246 if (uart_irq_tx_ready (dev )) {
23- (void )uart_fifo_fill (dev , buf , sizeof ( buf ) );
47+ (void )uart_fifo_fill (dev , tx_buf , TX_DATA_SIZE );
2448 uart_irq_tx_disable (dev );
49+ LOG_INF ("IRQ Tx sent %d bytes" , TX_DATA_SIZE );
2550 }
2651
2752 if (uart_irq_rx_ready (dev )) {
28- uint8_t buf [10 ];
53+ uint8_t buf [TX_DATA_SIZE + 1 ];
2954 int len = uart_fifo_read (dev , buf , sizeof (buf ));
3055
31- if (len ) {
32- printk ("read %d bytes\n" , len );
56+ LOG_INF ("IRQ Received data %d bytes" , len );
57+ __ASSERT (len == 1 || len == TX_DATA_SIZE , "Received unexpected data" );
58+ if (len == TX_DATA_SIZE ) {
59+ verify_buffers (tx_buf , buf , TX_DATA_SIZE );
3360 }
3461 }
3562}
@@ -49,28 +76,31 @@ static void interrupt_driven(const struct device *dev)
4976 }
5077}
5178
52- static void uart_callback (const struct device * dev ,
53- struct uart_event * evt ,
54- void * user_data )
79+ static void uart_callback (const struct device * dev , struct uart_event * evt , void * user_data )
5580{
5681 struct device * uart = user_data ;
5782 int err ;
5883
5984 switch (evt -> type ) {
6085 case UART_TX_DONE :
61- LOG_INF ("Tx sent %d bytes" , evt -> data .tx .len );
86+ LOG_INF ("ASYNC Tx sent %d bytes" , evt -> data .tx .len );
6287 break ;
6388
6489 case UART_TX_ABORTED :
65- LOG_ERR ("Tx aborted" );
90+ LOG_ERR ("ASYNC Tx aborted" );
6691 break ;
6792
6893 case UART_RX_RDY :
69- LOG_INF ("Received data %d bytes" , evt -> data .rx .len );
94+ LOG_INF ("ASYNC Received data %d bytes" , evt -> data .rx .len );
95+ __ASSERT (evt -> data .rx .len == 1 || evt -> data .rx .len == TX_DATA_SIZE ,
96+ "Received unexpected data" );
97+ if (evt -> data .rx .len == TX_DATA_SIZE ) {
98+ verify_buffers (tx_buf , evt -> data .rx .buf + evt -> data .rx .offset ,
99+ TX_DATA_SIZE );
100+ }
70101 break ;
71102
72- case UART_RX_BUF_REQUEST :
73- {
103+ case UART_RX_BUF_REQUEST : {
74104 uint8_t * buf ;
75105
76106 err = k_mem_slab_alloc (& uart_slab , (void * * )& buf , K_NO_WAIT );
@@ -95,7 +125,6 @@ static void uart_callback(const struct device *dev,
95125
96126static void async (const struct device * lpuart )
97127{
98- uint8_t txbuf [5 ] = {1 , 2 , 3 , 4 , 5 };
99128 int err ;
100129 uint8_t * buf ;
101130
@@ -109,12 +138,12 @@ static void async(const struct device *lpuart)
109138 __ASSERT (err == 0 , "Failed to enable RX" );
110139
111140 while (1 ) {
112- err = uart_tx (lpuart , txbuf , sizeof (txbuf ), 10000 );
141+ err = uart_tx (lpuart , tx_buf , sizeof (tx_buf ), 10000 );
113142 __ASSERT (err == 0 , "Failed to initiate transmission" );
114143
115144 k_sleep (K_MSEC (500 ));
116145
117- uart_poll_out (lpuart , txbuf [0 ]);
146+ uart_poll_out (lpuart , tx_buf [0 ]);
118147 k_sleep (K_MSEC (100 ));
119148 }
120149}
0 commit comments