static void hpg_write(void *void_hpg, long period) { hal_pru_generic_t *hpg = void_hpg; hpg_stepgen_update(hpg, period); hpg_pwmgen_update(hpg); hpg_encoder_update(hpg); hpg_wait_update(hpg); }
void hpg_pwmgen_force_write(hal_pru_generic_t *hpg) { int i; if (hpg->pwmgen.num_instances <= 0) return; for (i = 0; i < hpg->pwmgen.num_instances; i ++) { hpg->pwmgen.instance[i].pru.task.hdr.mode = eMODE_PWM; hpg->pwmgen.instance[i].pru.task.hdr.len = hpg->pwmgen.instance[i].num_outputs; hpg->pwmgen.instance[i].pru.task.hdr.dataX = 0x00; hpg->pwmgen.instance[i].pru.task.hdr.dataY = 0x00; hpg->pwmgen.instance[i].pru.task.hdr.addr = hpg->pwmgen.instance[i].task.next; hpg_pwmgen_handle_pwm_period(hpg, i); hpg->pwmgen.instance[i].written_pwm_period = hpg->pwmgen.instance[i].hal.param.pwm_period; hpg->pwmgen.instance[i].pru.reserved = 0; PRU_task_pwm_t *pru = (PRU_task_pwm_t *) ((u32) hpg->pru_data + (u32) hpg->pwmgen.instance[i].task.addr); *pru = hpg->pwmgen.instance[i].pru; } hpg_pwmgen_update(hpg); }