I am using nrf_drv_uart library.
UART communication is set in non-blocing mode, and transfer od data is relised with nrf_drv_uart_rx and nrf_drv_uart_tx functions.
I am using: uint8_t[100] rx_buffer = {0}; for data reception. But, problem is that nrf_drv_uart_rx function returns error: NRF_ERROR_NO_MEM even if rx_buffer is mostly free.
I thouth that i dont need to think of peripheral UART buffer (hardware UART buffer of 6 bytes) when using UART driver library.
And i can not find any documentation how and way to handle this error event, can anyone confirm this and perhaps gives some advice.
Thanks in advance.
//Handler
void uart_co2_bsl_handler(nrf_drv_uart_event_t * p_event, void * p_context)
{
switch(p_event->type)
{
case NRF_DRV_UART_EVT_TX_DONE:
flag_co2_tx_done = 1;
break;
case NRF_DRV_UART_EVT_RX_DONE:
flag_co2_rx_done = 1;
break;
case NRF_DRV_UART_EVT_ERROR:
if(p_event->data.error.error_mask == NRF_ERROR_DATA_SIZE)
{
NRF_UART0->ERRORSRC = CLEAR_REGISTAR;
}
else if(p_event->data.error.error_mask == NRF_ERROR_INVALID_DATA)
{
NRF_UART0->ERRORSRC = CLEAR_REGISTAR;
}
else if(p_event->data.error.error_mask == NRF_ERROR_TIMEOUT)
{
nrf_uart_event_clear(NRF_UART0, NRF_UART_EVENT_RXTO);
}
else if(p_event->data.error.error_mask == NRF_ERROR_SVC_HANDLER_MISSING)
{
nrf_uart_event_clear(NRF_UART0, NRF_UART_EVENT_ERROR);
}
else if(p_event->data.error.error_mask == NRF_ERROR_NO_MEM)
{
nrf_uart_event_clear(NRF_UART0, NRF_UART_EVENT_ERROR);
}
else
{
APP_ERROR_HANDLER(p_event->data.error.error_mask);
}
break;
default:
break;
}
}
//Init.
void uart_co2_bsl_config(void)
{
nrf_drv_uart_config_t config;
config.pselrxd = UART_RX;
config.pseltxd = UART_TX;
config.pselrts = RTS_PIN_NUMBER;
config.pselcts = CTS_PIN_NUMBER;
config.baudrate = NRF_UART_BAUDRATE_115200
config.hwfc = NRF_UART_HWFC_DISABLED;
config.parity = NRF_UART_PARITY_EXCLUDED;
config.interrupt_priority = APP_IRQ_PRIORITY_LOWEST;
config.p_context = NULL;
APP_ERROR_CHECK(nrf_drv_uart_init(&config, uart_handler));
}