コード例 #1
0
ファイル: pwmgen.c プロジェクト: Fiero2M6/machinekit
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;
    }
}
コード例 #2
0
u16 ns2periods(hal_pru_generic_t *hpg, hal_u32_t ns) {
    u16 p = rtapi_ceil((double)ns / (double)hpg->config.pru_period);
    return p;
}