I have a serial port set upp with the serial port library like this:
#define UART_PIN_DISCONNECTED 0xFFFFFFFF /**< Value indicating that no pin is connected to this UART register. */
#define RX_PIN_NUMBER 7
#define TX_PIN_NUMBER 8
#define CTS_PIN_NUMBER UART_PIN_DISCONNECTED
#define RTS_PIN_NUMBER UART_PIN_DISCONNECTED
NRF_SERIAL_DRV_UART_CONFIG_DEF(m_uart0_drv_config,
RX_PIN_NUMBER, TX_PIN_NUMBER,
RTS_PIN_NUMBER, CTS_PIN_NUMBER,
NRF_UART_HWFC_DISABLED, NRF_UART_PARITY_EXCLUDED,
NRF_UART_BAUDRATE_9600,
UART_DEFAULT_CONFIG_IRQ_PRIORITY);
#define SERIAL_FIFO_TX_SIZE 32
#define SERIAL_FIFO_RX_SIZE 32
NRF_SERIAL_QUEUES_DEF(serial_queues, SERIAL_FIFO_TX_SIZE, SERIAL_FIFO_RX_SIZE);
#define SERIAL_BUFF_TX_SIZE 1
#define SERIAL_BUFF_RX_SIZE 1
NRF_SERIAL_BUFFERS_DEF(serial_buffs, SERIAL_BUFF_TX_SIZE, SERIAL_BUFF_RX_SIZE);
NRF_SERIAL_UART_DEF(serial_uart, 0);
NRF_SERIAL_CONFIG_DEF(serial_config, NRF_SERIAL_MODE_IRQ,
&serial_queues, &serial_buffs, on_serial_evt, sleep_handler);
and in main:
ret = nrf_serial_init(&serial_uart, &m_uart0_drv_config, &serial_config);
In on_serial_evt
i have the following code:
case NRF_SERIAL_EVENT_RX_DATA:
err_code = app_sched_event_put(NULL, NULL, on_serial_evt_handler);
APP_ERROR_CHECK(err_code);
NRF_LOG_INFO("NRF_SERIAL_EVENT_RX_DATA\r\n");
And finally in on_serial_evt_handler
:
static void on_serial_evt_handler()
{
NRF_LOG_INFO("handler\r\n")
ret_code_t err_code;
uint8_t c[26];
memset(c, 0, sizeof(c));
size_t p_read;
err_code = nrf_serial_read(&serial_uart, c, sizeof(c), &p_read, 3000);
NRF_LOG_INFO("p_read:%d\r\n", p_read);
NRF_LOG_INFO("c[0]:%c\r\n", c[0]);
NRF_LOG_INFO("error%d\r\n", err_code);
When I start the app everything works as expected with nothing happening. Then I send 1 byte of data to the mcu and the NRF_SERIAL_EVENT_RX_DATA
event gets triggered. I can then read the data as expected. Now the problem is that the nrf_serial_read
seems to trigger another NRF_SERIAL_EVENT_RX_DATA
event. This results in a infinite loop of 0's recieved and the . No matter if i set the timeout of nrf_serial_read
to 0 it still always returns NRF_ERROR_TIMEOUT
.
I understand the need for triggering NRF_SERIAL_EVENT_RX_DATA
if i use none blocking mode but then how can i tell the difference between "new data in buffer" and "data fetched by nrf_serial_read ready"?
I use a nRF52832_xxaa with sdk 13 and S132 4.0.2.
Thankful for any pointers!