这是LED口配置函数:
void gpiote_init(void) //io输出
{
// Connect GPIO input buffers and configure PWM_OUTPUT_PIN_NUMBER as an output.
nrf_gpio_cfg_output(19);
// Configure GPIOTE channel 0 to toggle the PWM pin state
// @NOTE Only one GPIOTE task can be connected to an output pin.
nrf_gpiote_task_config(0, 19,NRF_GPIOTE_POLARITY_TOGGLE, NRF_GPIOTE_INITIAL_VALUE_LOW);
}
使用了GPIOTE模块
这是定时器中断函数:
void TIMER2_IRQHandler(void) //timer2中断函数
{
static bool cc0_turn = false; /**< Keeps track of which CC register to be used. */
uint32_t next_sample = next_sample_get();
if ((NRF_TIMER2->EVENTS_COMPARE[1] != 0) &&
((NRF_TIMER2->INTENSET & TIMER_INTENSET_COMPARE1_Msk) != 0))
{
// Sets the next CC1 value
NRF_TIMER2->EVENTS_COMPARE[1] = 0;
NRF_TIMER2->CC[1] = (NRF_TIMER2->CC[1] + MAX_SAMPLE_LEVELS);
// Every other interrupt CC0 and CC2 will be set to their next values.
if (cc0_turn)
{
NRF_TIMER2->CC[0] = NRF_TIMER2->CC[1] + next_sample;
}
else
{
NRF_TIMER2->CC[2] = NRF_TIMER2->CC[1] + next_sample;
}
// Next turn the other CC will get its value.
cc0_turn = !cc0_turn;
}
}
这里改变三个比较器的值以实现PWM波