Hi
nRF52833, SDK16
When using a UARTE interrupt I get a fault which I cannot locate, I have the following code:
static nrfx_uarte_t SER_UART = NRFX_UARTE_INSTANCE(1); static uint8_t SER_rx_buffer[12]; void SER_UART_Interrupt(nrfx_uarte_event_t const * p_event, void * p_context) { if (p_event->type == NRFX_UARTE_EVT_RX_DONE) { //Do something with the data } //APP_ERROR_CHECK(nrfx_uarte_rx(&SER_UART, SER_rx_buffer, 1)); } void SER_Init(void) { nrfx_uarte_config_t config = NRFX_UARTE_DEFAULT_CONFIG; config.baudrate = NRF_UARTE_BAUDRATE_1200; config.hwfc = NRF_UARTE_HWFC_DISABLED; config.interrupt_priority = APP_IRQ_PRIORITY_HIGH; config.parity = NRF_UARTE_PARITY_EXCLUDED; config.pselrxd = IO_UART_RX; config.pseltxd = IO_UART_TX; APP_ERROR_CHECK(nrfx_uarte_init(&SER_UART, &config, SER_UART_Interrupt)); APP_ERROR_CHECK(nrfx_uarte_rx(&SER_UART, SER_rx_buffer, 4)); }
When my 4 bytes are recieved, i get a fault and the debugger stops on this line: (no hardfault routine to start but does end up in a hardfault position)
No other information or reason is given to me,
If i remove the interrupt and run the rx in blocking mode, i recieve my data just fine:
void SER_Init(void) { nrfx_uarte_config_t config = NRFX_UARTE_DEFAULT_CONFIG; config.baudrate = NRF_UARTE_BAUDRATE_1200; config.hwfc = NRF_UARTE_HWFC_DISABLED; config.interrupt_priority = APP_IRQ_PRIORITY_HIGH; config.parity = NRF_UARTE_PARITY_EXCLUDED; config.pselrxd = IO_UART_RX; config.pseltxd = IO_UART_TX; APP_ERROR_CHECK(nrfx_uarte_init(&SER_UART, &config, NULL)); APP_ERROR_CHECK(nrfx_uarte_rx(&SER_UART, SER_rx_buffer, 4)); //this works in clocking mode, and i now have my data in SER_rx_buffer }
I have tried different interrupt priorities but none seem to make a difference
Can anyone suggest why my interrupt is not correct and the debugger is stopping?
Many thanks