/** * @brief The main mixer function * @note This is called from the DMA completion routine, * so keep stack usage and duration to a minimum! * @param None. * @retval None. */ void mixer_update(void) { // Input data is in stick_data[]. // Values are scaled to +/- RESX // ================================= // Output Channel Data // ================================= perOut(g_chans, 0); }
void init_main_ppm( uint32_t period, uint32_t out_enable ) { register Pwm *pwmptr ; perOut(g_chans512, 0) ; setupPulsesPPM() ; if ( out_enable ) { module_output_active() ; } pwmptr = PWM ; // PWM3 for PPM output pwmptr->PWM_CH_NUM[3].PWM_CMR = 0x0004000B ; // CLKA if (g_model.pulsePol == 0) { pwmptr->PWM_CH_NUM[3].PWM_CMR |= 0x00000200 ; // CPOL } pwmptr->PWM_CH_NUM[3].PWM_CPDR = period ; // Period in half uS pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = period ; // Period in half uS pwmptr->PWM_CH_NUM[3].PWM_CDTY = g_model.ppmDelay*100+600 ; // Duty in half uS pwmptr->PWM_CH_NUM[3].PWM_CDTYUPD = g_model.ppmDelay*100+600 ; // Duty in half uS pwmptr->PWM_ENA = PWM_ENA_CHID3 ; // Enable channel 3 pwmptr->PWM_IER1 = PWM_IER1_CHID3 ; #ifdef REVB configure_pins( PIO_PC15, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_B | PIN_PORTC | PIN_NO_PULLUP ) ; #endif #ifdef REVB // PWM1 for PPM2 pwmptr->PWM_CH_NUM[1].PWM_CMR = 0x0000000B ; // CLKB if (g_model.pulsePol == 0) { pwmptr->PWM_CH_NUM[1].PWM_CMR |= 0x00000200 ; // CPOL } pwmptr->PWM_CH_NUM[1].PWM_CPDR = period ; // Period pwmptr->PWM_CH_NUM[1].PWM_CPDRUPD = period ; // Period pwmptr->PWM_CH_NUM[1].PWM_CDTY = g_model.ppmDelay*100+600 ; // Duty pwmptr->PWM_CH_NUM[1].PWM_CDTYUPD = g_model.ppmDelay*100+600 ; // Duty pwmptr->PWM_ENA = PWM_ENA_CHID1 ; // Enable channel 1 #endif pwmptr->PWM_IER1 = PWM_IER1_CHID1 ; NVIC_SetPriority(PWM_IRQn, 3 ) ; NVIC_EnableIRQ(PWM_IRQn) ; }