// Init of Drv PWM Boolean DrvPwmInit( Int16U period ) { //init the structure to the dafault value for(Int8U indexPwm = 0U; indexPwm < E_NB_PWMS ; indexPwm++) { pwms[ indexPwm ].enable = FALSE; pwms[ indexPwm ].pin = pwmPins[ indexPwm ]; pwms[ indexPwm ].ticks = 0U; pwms[ indexPwm ].min = 0U; pwms[ indexPwm ].mid = 0U; pwms[ indexPwm ].max = 0U; DrvIoSetPinOutput( pwms[ indexPwm ].pin ); } //set idx to 0 at startup idPwm = 0U; //on init le timer 1 tick = 0.5us BIT_LOW(TCCR1A,WGM11); //mode normal BIT_LOW(TCCR1A,WGM10); //mode normal BIT_LOW(TCCR1B,WGM13); //mode normal BIT_LOW(TCCR1B,WGM12); //mode normal BIT_LOW (TIMSK1,OCIE1A);//disable ISR on OCIE1A BIT_LOW(TIMSK1,OCIE1B);//disable ISR on OCIE1B BIT_LOW (TIMSK1,TOIE1);//disable ISR on TOIE1 BIT_LOW (TIMSK1,ICIE1);//disable ISR on ICIE1 //set initial period DrvPwmSetPeriod(period); //reset counter to 0 TCNT1 = 0x0000U; return TRUE; }
inline void ClearAlarmFlag (AlarmType flag) { if (flag != AlarmType_None) { if (activeFlags) { BIT_LOW(activeFlags, flag); if (!activeFlags) { OnAlarmEnded(); } } } }
// set the period of all PWM Boolean DrvPwmSetPeriod( Int16U period ) { periodPwm = period; if(periodPwm != 0U) { OCR1B = periodPwm; BIT_LOW (TCCR1B,CS12); //prescaler 8 BIT_HIGH(TCCR1B,CS11); //prescaler 8 BIT_LOW (TCCR1B,CS10); //prescaler 8 BIT_HIGH(TIMSK1,OCIE1B);//enable ISR on OCIE1B } else { OCR1B = 0U; BIT_LOW (TCCR1B,CS12); //disable BIT_LOW (TCCR1B,CS11); //disable BIT_LOW (TCCR1B,CS10); //disable BIT_LOW(TIMSK1,OCIE1B);//disable ISR on OCIE1B } return TRUE; }
////////////////////////////////////////PUBILC FUNCTIONS////////////////////////////////////////// //Fonction d'initialisation //return : TRUE si ok Boolean DrvAdcInit ( void ) { Boolean oSuccess = TRUE; //AVCC with external capacitor at AREF pin BIT_HIGH(ADMUX,REFS0); //single ended input BIT_LOW(ADMUX,MUX4); BIT_LOW(ADMUX,MUX3); //free running BIT_LOW(ADCSRB,ADTS0); BIT_LOW(ADCSRB,ADTS1); BIT_LOW(ADCSRB,ADTS2); //disable digital input reg for ADC pins BIT_LOW(DIDR0,ADC0D); BIT_LOW(DIDR0,ADC1D); BIT_LOW(DIDR0,ADC2D); BIT_LOW(DIDR0,ADC3D); BIT_HIGH(DIDR0,ADC4D); BIT_HIGH(DIDR0,ADC5D); BIT_HIGH(DIDR0,ADC6D); BIT_HIGH(DIDR0,ADC7D); //enable ADC BIT_HIGH(ADCSRA,ADEN); //no start now BIT_LOW(ADCSRA,ADSC); //no auto trigger BIT_LOW(ADCSRA,ADATE); //flag BIT_LOW(ADCSRA,ADIF); //disable ADC interrupt BIT_LOW(ADCSRA,ADIE); //division factor set to 8 BIT_HIGH(ADCSRA,ADPS0); BIT_HIGH(ADCSRA,ADPS1); return oSuccess; }