Dear all,
My chip is nrf52832, and sdk version is SDK12.1.0_0d232a. And tried to use ble service and spi master function.
I create a timer to send spi command every 4 ms.
void spi_master_init(void) {
nrf_drv_spi_config_t spi_config = NRF_DRV_SPI_DEFAULT_CONFIG;
spi_config.ss_pin = SPI_SS_PIN;
spi_config.miso_pin = SPI_MISO_PIN;
spi_config.mosi_pin = SPI_MOSI_PIN;
spi_config.sck_pin = SPI_SCK_PIN;
spi_config.frequency = NRF_DRV_SPI_FREQ_8M;
spi_config.irq_priority = 6;
APP_ERROR_CHECK(nrf_drv_spi_init(&spi, &spi_config, spi_event_handler));
}
static void spi_send_handler(void * p_context) {
if(spi_xfer_done) {
memset(spi_rx_buf, 0, spi_length);
nrf_drv_spi_transfer(&spi, data_tmp, spi_length, spi_rx_buf, spi_length);
spi_xfer_done = false;
}
}
void spi_event_handler(nrf_drv_spi_evt_t const * p_event) {
if (spi_rx_buf[0] != 0)
{
/*
command and request data
*/
}
spi_xfer_done = true;
}
int main(void) { bool erase_bonds;
APP_ERROR_CHECK( NRF_LOG_INIT(NULL));
timers_init();
nrf_delay_ms(3000);
buttons_leds_init(&erase_bonds);
if (erase_bonds)
{
NRF_LOG_INFO("Bonds erased!\r\n");
}
ble_stack_init();
peer_manager_init(erase_bonds);
db_discovery_init();
spi_master_init();
hrs_c_init();
application_timers_start();
gap_params_init();
conn_params_init();
services_init();
advertising_init();
adv_scan_start();
for (;;)
{
if (NRF_LOG_PROCESS() == false)
{
// Wait for BLE events.
power_manage();
}
}
}
After some times, the system will crash.
If I request long data or send command faster. The number of occurrences will increased. It look like the spi handler was Interrupted by softdevice.
And I try to use high priority or low frequence, it still not use.
It will stopped at hardfault.
Any suggestions or pointers are very much appreciated.
Thanks!!!!