void hpg_pwmgen_handle_pwm_period(hal_pru_generic_t *hpg, int i) { u32 pwm_pru_periods; pwm_pru_periods = (double) *(hpg->pwmgen.instance[i].hal.pin.pwm_period) / hpg->config.pru_period; if (pwm_pru_periods < 65535) { hpg->pwmgen.instance[i].pru.prescale = 1; hpg->pwmgen.instance[i].pru.period = pwm_pru_periods - 1; } else { // prescale required hpg->pwmgen.instance[i].pru.prescale = rtapi_ceil((double) pwm_pru_periods / 65535.0); hpg->pwmgen.instance[i].pru.period = (pwm_pru_periods / hpg->pwmgen.instance[i].pru.prescale) - 1; } }
u16 ns2periods(hal_pru_generic_t *hpg, hal_u32_t ns) { u16 p = rtapi_ceil((double)ns / (double)hpg->config.pru_period); return p; }