I have this main code:
#include <zephyr/kernel.h> #include <zephyr/device.h> #include <zephyr/drivers/uart.h> #include <string.h> #define MSG_SIZE 32 K_MSGQ_DEFINE(uart_msgq, MSG_SIZE, 10, 4); static char rx_buf[MSG_SIZE]; static int rx_buf_pos; #define UART_DEVICE_NODE DT_NODELABEL(uart1) static const struct device *const uart_dev = DEVICE_DT_GET(UART_DEVICE_NODE); void serial_cb(const struct device *dev, void *user_data) { uint8_t c; if (!uart_irq_update(uart_dev) || !uart_irq_rx_ready(uart_dev)) { printk("UART IRQ not ready\r\n"); return; } printk("reading datar\r\n"); while (uart_fifo_read(uart_dev, &c, 1) == 1) { printk("RX: %c\n", c); if ((c == '\n' || c == '\r') && rx_buf_pos > 0) { rx_buf[rx_buf_pos] = '\0'; k_msgq_put(&uart_msgq, &rx_buf, K_NO_WAIT); rx_buf_pos = 0; } else if (rx_buf_pos < (sizeof(rx_buf) - 1)) { rx_buf[rx_buf_pos++] = c; } } } void print_uart(char *buf) { for (int i = 0; buf[i] != '\0'; i++) { uart_poll_out(uart_dev, buf[i]); k_busy_wait(100); } } int main(void) { printk("UART Echo Started\n"); if (!device_is_ready(uart_dev)) { printk("UART device not ready\n"); return 0; } uart_irq_callback_user_data_set(uart_dev, serial_cb, NULL); uart_irq_rx_enable(uart_dev); print_uart("Hello from echo bot\r\n"); printk("Hello sent\r\n"); while(true) { print_uart("Echo: "); print_uart(" is one wild"); print_uart("\r\n"); //Sleep for a second k_sleep(K_SECONDS(1)); printk("Sending data to TX\r\n"); } return 0; }
With this overlay:
&uart1 { status = "okay"; current-speed = <115200>; pinctrl-0 = <&uart1_default>; pinctrl-1 = <&uart1_sleep>; pinctrl-names = "default", "sleep"; }; &pinctrl { uart1_default: uart1_default { group1 { psels = <NRF_PSEL(UART_TX, 0, 9)>, <NRF_PSEL(UART_RX, 0, 10)>; }; }; uart1_sleep: uart1_sleep { group1 { psels = <NRF_PSEL(UART_TX, 0, 9)>, <NRF_PSEL(UART_RX, 0, 10)>; low-power-enable; }; }; };
and this configuration:
CONFIG_SERIAL=y CONFIG_UART_INTERRUPT_DRIVEN=y CONFIG_UART_CONSOLE=n CONFIG_USE_SEGGER_RTT=y CONFIG_RTT_CONSOLE=y CONFIG_LOG=y CONFIG_LOG_BACKEND_RTT=y CONFIG_PRINTK=y
I am using a nrf52840 dev board and have connected P0.06 and P0.08.
Why does it not trigger TX and write to JRTTLinkEXE the data sent in the main loop?