The other interrupt config are ok since i have tested it by forcing these interrupts BY INTFRCHn registers.
Does any of you achieved to have ADC interrupts??? Because most of the examples i found are based on pooling....
Thank's in advance;
/* Pin assignments for port AN Pin AN7 : Battery voltage Pin AN6 : Oil Psi Pin AN5 : Analog Input2 Pin AN4 : Analog Input1 Pin AN3 : Water Temp Pin AN2 : GPIO output, initially logic '0' Pin AN1 : GPIO output, initially logic '0' Pin AN0 : GPIO output, initially logic '0' */ MCF_GPIO_PORTAN = 0; MCF_GPIO_DDRAN = MCF_GPIO_DDRAN_DDRAN2 | MCF_GPIO_DDRAN_DDRAN1 | MCF_GPIO_DDRAN_DDRAN0; MCF_GPIO_PANPAR = MCF_GPIO_PANPAR_PANPAR7 | MCF_GPIO_PANPAR_PANPAR6 | MCF_GPIO_PANPAR_PANPAR5 | MCF_GPIO_PANPAR_PANPAR4 | MCF_GPIO_PANPAR_PANPAR3;/********************************************************************** init_adc - Analog-to-Digital Converter (ADC) ***********************************************************************/static void init_adc (void){ /* Scan mode = Triggered sequential ADC clock frequency = 2.00 MHz Voltage reference supplied by VREFH and VREFL The following interrupt source are enabled: End-of-Scan A Sample list: Sample 0 : AN3 Low limit = $000, High limit = $FFF, Offset = $000 Sample 1 : AN4 Low limit = $000, High limit = $FFF, Offset = $000 Sample 2 : AN5 Low limit = $000, High limit = $FFF, Offset = $000 Sample 3 : AN6 Low limit = $000, High limit = $FFF, Offset = $000 Sample 4 : AN7 Low limit = $000, High limit = $FFF, Offset = $000 Sample 5 : Disabled Sample 6 : Disabled Sample 7 : Disabled */ /* Initialise LOLIM, HILIM and OFFST registers of enabled channels: */ MCF_ADC_ADLLMT0 = 0; MCF_ADC_ADHLMT0 = MCF_ADC_ADHLMT_HLMT(0xfff); MCF_ADC_ADOFS0 = 0; MCF_ADC_ADLLMT1 = 0; MCF_ADC_ADHLMT1 = MCF_ADC_ADHLMT_HLMT(0xfff); MCF_ADC_ADOFS1 = 0; MCF_ADC_ADLLMT2 = 0; MCF_ADC_ADHLMT2 = MCF_ADC_ADHLMT_HLMT(0xfff); MCF_ADC_ADOFS2 = 0; MCF_ADC_ADLLMT3 = 0; MCF_ADC_ADHLMT3 = MCF_ADC_ADHLMT_HLMT(0xfff); MCF_ADC_ADOFS3 = 0; MCF_ADC_ADLLMT4 = 0; MCF_ADC_ADHLMT4 = MCF_ADC_ADHLMT_HLMT(0xfff); MCF_ADC_ADOFS4 = 0; /* Initialise ADC */ MCF_ADC_ADZCC = 0; MCF_ADC_ADLST1 = MCF_ADC_ADLST1_SAMPLE3(0x6) | MCF_ADC_ADLST1_SAMPLE2(0x5) | MCF_ADC_ADLST1_SAMPLE1(0x4) | MCF_ADC_ADLST1_SAMPLE0(0x3); MCF_ADC_ADLST2 = MCF_ADC_ADLST2_SAMPLE7(0x7) | MCF_ADC_ADLST2_SAMPLE6(0x6) | MCF_ADC_ADLST2_SAMPLE5(0x5) | MCF_ADC_ADLST2_SAMPLE4(0x7); MCF_ADC_ADSDIS = MCF_ADC_ADSDIS_DS7 | MCF_ADC_ADSDIS_DS6 | MCF_ADC_ADSDIS_DS5; MCF_ADC_CAL = 0x0; MCF_ADC_CTRL1 = MCF_ADC_CTRL1_STOP0 | MCF_ADC_CTRL1_SYNC0 | MCF_ADC_CTRL1_EOSIE0 | MCF_ADC_CTRL1_SMODE(0x4); MCF_ADC_CTRL2 = MCF_ADC_CTRL2_DIV(0x9); /* Power up ADC converter(s) in use */ MCF_ADC_POWER = MCF_ADC_POWER_PUDELAY(0xd) | MCF_ADC_POWER_PD2; /* Wait for converter A power up to complete */ while (MCF_ADC_POWER & MCF_ADC_POWER_PSTS0) ; /* Wait for converter B power up to complete */ while (MCF_ADC_POWER & MCF_ADC_POWER_PSTS1) ;}
/* Enter task loop */ while (TRUE) { if(!AnalogActiveFlag && !TimeoutFlag) { MCF_ADC_CTRL1 = MCF_ADC_CTRL1_SYNC0 | MCF_ADC_CTRL1_EOSIE0 | MCF_ADC_CTRL1_SMODE(0x4); /* Start ATD conversion */ MCF_ADC_CTRL1 |= MCF_ADC_CTRL1_START0; /* Set analog active flag */ AnalogActiveFlag = TRUE; } /* Wait for another .05 second */ OSTimeDly(5); }
/* ATD conversion complete interrupt */void AtdInterrupt(void) { /* Clear interrupt flag */ MCF_ADC_ADSTAT = MCF_ADC_ADSTAT_EOSI0; /* Get current conversion results */ WaterTempResult += MCF_ADC_ADRSLT0 >> 5; AnalogInput2Result += MCF_ADC_ADRSLT1 >> 5; AnalogInput1Result += MCF_ADC_ADRSLT2 >> 5; OilPsiResult += MCF_ADC_ADRSLT3 >> 5; BatteryVoltageResult += MCF_ADC_ADRSLT4 >> 5; /* Increment sample count */ AnalogInCount++; /* Sample array full— */ if(AnalogInCount >= ANALOG_SAMPLE_COUNT) { /* Reset AnalogInCount */ AnalogInCount = 0; /* Get conversion results */ WaterTempBinary = WaterTempResult / ANALOG_SAMPLE_COUNT; AnalogInput2Binary = AnalogInput2Result / ANALOG_SAMPLE_COUNT; AnalogInput1Binary = AnalogInput1Result / ANALOG_SAMPLE_COUNT; OilPsiBinary = OilPsiResult / ANALOG_SAMPLE_COUNT; BatteryVoltageBinary = BatteryVoltageResult / ANALOG_SAMPLE_COUNT; /* Clear analog in results */ WaterTempResult = 0; AnalogInput2Result = 0; AnalogInput1Result = 0; OilPsiResult = 0; BatteryVoltageResult = 0; } /* Clear analog active flag */ AnalogActiveFlag = FALSE;}