I am working on an application where I need to start pwm sequence after particular delay (accurate delay of multiple of 100us).
I am quite new to nordic environment.
Here is my code . Can please guide me what is wrong here??
#define Period 20000 //20ms
const nrf_drv_timer_t TIMER_LED = NRF_DRV_TIMER_INSTANCE(0);
APP_PWM_INSTANCE(PWM1,1);
static int gpio_flag =0;
void pwm_update(void)
{
uint32_t value;
value = duty_1;
ready_flag = false;
/* Set the duty cycle - keep trying until PWM is ready... */
while ((app_pwm_channel_duty_set(&PWM1, 0, value))&(app_pwm_channel_duty_set(&PWM1, 1, value)) == NRF_ERROR_BUSY);
/* ... or wait for callback. */
while (!ready_flag);
APP_ERROR_CHECK(app_pwm_channel_duty_set(&PWM1, 1, value));
APP_ERROR_CHECK(app_pwm_channel_duty_set(&PWM1, 0, value));
}
void in_pin_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action)
{
gpio_flag =1;
nrf_drv_timer_enable(&TIMER_LED);
}
void timer0_handler(nrf_timer_event_t event_type, void* p_context)
{
switch (event_type)
{
case NRF_TIMER_EVENT_COMPARE0:
timer_flg =1;
nrf_drv_timer_clear(&TIMER_LED);
gpio_flag=0;
pwm_update();
break;
default:
//Do nothing.
break;
}
}
void timer_init(void)
{
uint32_t time_us = 500;
uint32_t time_ticks;
uint32_t err_code = NRF_SUCCESS;
nrf_drv_timer_config_t timer_cfg = NRF_DRV_TIMER_DEFAULT_CONFIG;
err_code = nrf_drv_timer_init(&TIMER_LED, &timer_cfg, timer0_handler);
APP_ERROR_CHECK(err_code);
time_ticks = nrf_drv_timer_us_to_ticks(&TIMER_LED, time_us);
nrf_drv_timer_compare(
&TIMER_LED, NRF_TIMER_CC_CHANNEL0, time_ticks, true);
}