Example #1
0
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);

}
Example #2
0
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);
}