int GPPI_GPIOTE_INIT(void)
{
// MCU :
NRF_TIMER00->PUBLISH_COMPARE[0] = (0 << TIMER_PUBLISH_COMPARE_CHIDX_Pos) | TIMER_PUBLISH_COMPARE_EN_Msk;
NRF_PPIB01->SUBSCRIBE_SEND[0] = (0 << PPIB_SUBSCRIBE_SEND_CHIDX_Pos) | PPIB_SUBSCRIBE_SEND_EN_Msk;
NRF_DPPIC00->CHENSET = DPPIC_CHENSET_CH0_Msk;
// PERI :
NRF_PPIB20->PUBLISH_RECEIVE[0] = (5 << PPIB_PUBLISH_RECEIVE_CHIDX_Pos) | PPIB_PUBLISH_RECEIVE_EN_Msk;
NRF_PPIB22->SUBSCRIBE_SEND[0] = (5 << PPIB_SUBSCRIBE_SEND_CHIDX_Pos) | PPIB_SUBSCRIBE_SEND_EN_Msk;
NRF_TIMER20->SUBSCRIBE_START = (5 << TIMER_SUBSCRIBE_START_CHIDX_Pos) | TIMER_SUBSCRIBE_START_EN_Msk;
NRF_DPPIC20->CHENSET = DPPIC_CHENSET_CH5_Msk;
// LP
NRF_GPIOTE30->CONFIG[0] =
(GPIOTE_CONFIG_MODE_Task << GPIOTE_CONFIG_MODE_Pos) |
(2 << GPIOTE_CONFIG_PSEL_Pos) |
(0 << GPIOTE_CONFIG_PORT_Pos) |
(GPIOTE_CONFIG_POLARITY_Toggle << GPIOTE_CONFIG_POLARITY_Pos);
// LP
NRF_GPIOTE30->SUBSCRIBE_OUT[0] = (0 << GPIOTE_SUBSCRIBE_OUT_CHIDX_Pos) | GPIOTE_SUBSCRIBE_OUT_EN_Msk;
NRF_PPIB30->PUBLISH_RECEIVE[0] = (0 << PPIB_PUBLISH_RECEIVE_CHIDX_Pos) | PPIB_PUBLISH_RECEIVE_EN_Msk;
NRF_DPPIC30->CHENSET = DPPIC_CHENSET_CH0_Msk;
return 0;
}
static void timer20_handler(nrf_timer_event_t event_type, void * p_context)
{
if(event_type == NRF_TIMER_EVENT_COMPARE0)
{
LED_B_toggle;
}
}
int8_t Timer20_init(void)
{
IRQ_CONNECT(NRFX_IRQ_NUMBER_GET(NRF_TIMER_INST_GET(TIMER20_IDX)),
1,
nrfx_timer_irq_handler,
&timer20_inst,
0);
uint32_t base_frequency = NRF_TIMER_BASE_FREQUENCY_GET(timer20_inst.p_reg);
nrfx_timer_config_t config = NRFX_TIMER_DEFAULT_CONFIG(base_frequency);
config.bit_width = NRF_TIMER_BIT_WIDTH_32;
config.p_context = "";
nrfx_timer_init(&timer20_inst, &config, timer20_handler);
nrfx_timer_clear(&timer20_inst);
uint32_t desired_ticks = nrfx_timer_us_to_ticks(&timer20_inst, Time_1us);
nrfx_timer_extended_compare(&timer20_inst, NRF_TIMER_CC_CHANNEL0, desired_ticks,
NRF_TIMER_SHORT_COMPARE0_STOP_MASK, true);
nrfx_timer_enable(&timer20_inst);
return 0;
}
Please check the code, the p0.2 is working, but Timer20 cannot start.