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