Hello!
I'm trying to handle an interrupt using a timer.
Is it okay to write something like the following?
/** * @brief Handler for timer events. */ void timer_twi_event_handler(nrf_timer_event_t event_type, void* p_context) { switch (event_type) { case NRF_TIMER_EVENT_COMPARE1: flags = true; time++; //data_handler(); break; default: //Do nothing. break; } } //timer init nrf_drv_timer_config_t timer_cfg = NRF_DRV_TIMER_DEFAULT_CONFIG; err_code = nrf_drv_timer_init(&TIMER, &timer_cfg, timer_twi_event_handler); APP_ERROR_CHECK(err_code); time_ticks = nrf_drv_timer_us_to_ticks(&TIMER, time_us); nrf_drv_timer_extended_compare( &TIMER, NRF_TIMER_CC_CHANNEL1, time_ticks, NRF_TIMER_SHORT_COMPARE1_CLEAR_MASK, true); nrf_drv_timer_enable(&TIMER);
Also, if this is called every 1ms as interrupt processing, will it be interrupt processing if you call the function you want to execute in "timer_twi_event_handler"?
void receive_data(){//receive mpu9250 20byte data -> mpu_buf[] ret_code_t ret = nrf_drv_spi_xfer(&spi,&xfer_spi,flags);//Function for starting the SPI data transfer with additional option flags if(ret == NRF_SUCCESS) { uint32_t start_tsk_addr = nrf_drv_spi_start_task_get(&spi); } } int j = 0; uint8_t buf[10000] = {0}; uint8_t buf2[10000] = {0}; void put_in_array(uint8_t array[10000]){ for(int a = 0; a <20;a++) { array[j*21+a] = mpu_buf[a]; } array[j*21+20] = time; } /*void data_handler() { receive_data(); put_in_array(buf); }*/ bool flag_buf = true; bool flag_buf2= false; /** * @brief Handler for timer events. */ void timer_twi_event_handler(nrf_timer_event_t event_type, void* p_context) { switch (event_type) { case NRF_TIMER_EVENT_COMPARE1: flags = true; time++; receive_data(); if(flag_buf == true){ put_in_array(buf); }else if(flag_buf2 == true){ put_in_array(buf2); } j++; //data_handler(); break; default: //Do nothing. break; } }
Thank you!