Hi all,
I have a problem to activate PWM using a PPI and timer
Attached the code
#define PWM0_GPIOTE_CH 0 #define PWM0_PPI_CH_A 0 #define PWM0_PPI_CH_B 1 #define PWM0_TIMER_CC_NUM 0 void timer_init() { NRF_TIMER3->BITMODE = TIMER_BITMODE_BITMODE_24Bit << TIMER_BITMODE_BITMODE_Pos; NRF_TIMER3->PRESCALER = 0; NRF_TIMER3->SHORTS = TIMER_SHORTS_COMPARE0_CLEAR_Msk << 5; NRF_TIMER3->MODE = TIMER_MODE_MODE_Timer << TIMER_MODE_MODE_Pos; NRF_TIMER3->CC[5] = 125; NRF_TIMER3->CC[0] = 63; } void pwm0_init(uint32_t pinselect) { NRF_GPIOTE->CONFIG[PWM0_GPIOTE_CH] = GPIOTE_CONFIG_MODE_Task << GPIOTE_CONFIG_MODE_Pos | GPIOTE_CONFIG_POLARITY_Toggle << GPIOTE_CONFIG_POLARITY_Pos | pinselect << GPIOTE_CONFIG_PSEL_Pos | GPIOTE_CONFIG_OUTINIT_High << GPIOTE_CONFIG_OUTINIT_Pos; NRF_PPI->CH[PWM0_PPI_CH_A].EEP = (uint32_t)&NRF_TIMER3->EVENTS_COMPARE[0]; NRF_PPI->CH[PWM0_PPI_CH_A].TEP = (uint32_t)&NRF_GPIOTE->TASKS_CLR[PWM0_GPIOTE_CH]; NRF_PPI->CH[PWM0_PPI_CH_B].EEP = (uint32_t)&NRF_TIMER3->EVENTS_COMPARE[5]; NRF_PPI->CH[PWM0_PPI_CH_B].TEP = (uint32_t)&NRF_GPIOTE->TASKS_SET[PWM0_GPIOTE_CH]; NRF_PPI->CHENSET = (1 << PWM0_PPI_CH_A) | (1 << PWM0_PPI_CH_B); } void mainLoopIteration() { static int i = 0; if (i == 0) { timer_init(); pwm0_init(18); } i++; if (i == 20) { NRF_TIMER3->TASKS_START = 1; } if (i == 50) { NRF_TIMER3->TASKS_STOP = 1; i = 1; }
Doe any one have an idea or advice to help?
Regards,
Amir