/* * Copyright (c) 2014 - 2016, Freescale Semiconductor, Inc. * Copyright (c) 2016 - 2018, NXP. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of the copyright holder nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL NXP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. */ #include "ADC.h" #include "variable.h" void ADC0_init_HWTrigger(void) { PCC->PCCn[PCC_ADC0_INDEX] &=~ PCC_PCCn_CGC_MASK; /* Disable clock to change PCS */ PCC->PCCn[PCC_ADC0_INDEX] |= PCC_PCCn_PCS(6); /* PCS=1: Select SOSCDIV2 */ PCC->PCCn[PCC_ADC0_INDEX] |= PCC_PCCn_CGC_MASK; /* Enable bus clock in ADC */ // ADC0->SC1[0] |= ADC_SC1_ADCH_MASK // |ADC_SC1_AIEN_MASK; /* ADCH=1F: Module is disabled for conversions*/ /* AIEN=0: Interrupts are disabled */ ADC0->CFG1 |= ADC_CFG1_ADIV_MASK |ADC_CFG1_MODE(1);/* ADICLK=0: Input clk=ALTCLK1=SOSCDIV2 */ /* ADIV=0: Prescaler=1 */ /* MODE=1: 12-bit conversion */ ADC0->CFG2 = 0x00000000C; /* SMPLTS=12(default): sample time is 13 ADC clks */ ADC0->CLPS=0; ADC0->CLP3=0; ADC0->CLP2=0; ADC0->CLP1=0; ADC0->CLP0=0; ADC0->CLPX=0; ADC0->CLP9=0; ADC0->SC3 = /* CAL=0: Do not start calibration sequence */ ADC_SC3_AVGE(1)| /* ADCO=0: One conversion performed */ ADC_SC3_AVGS(3); /* AVGE,AVGS=0: HW average function disabled */ ADC0->SC3 |=ADC_SC3_CAL_MASK; while(ADC0->SC3&ADC_SC3_CAL_MASK); ADC0->SC2 = ADC_SC2_ADTRG_MASK; /* ADTRG=1: HW trigger */ /* ACFE,ACFGT,ACREN=0: Compare func disabled */ /* DMAEN=0: DMA disabled */ /* REFSEL=0: Voltage reference pins= VREFH, VREEFL */ // ADC0->SC1[1] = ADC_SC1_ADCH(8) // |ADC_SC1_AIEN_MASK; /* ADCH=1F: Module is disabled for conversions*/ // /* AIEN=0: Interrupts are disabled */ //ADC0->SC2|=ADC_SC2_DMAEN_MASK; ADC0->CFG1|=ADC_CFG1_ADIV(1); ADC0->SC3 = ADC_SC3_AVGE(1)| ADC_SC3_AVGS(1); ADC0->SC1[0] = ADC_SC1_ADCH(0)/* BTS_AD1 */ |ADC_SC1_AIEN_MASK ; ADC0->SC1[1]=ADC_SC1_ADCH(1)/* BTS_AD2 */ |ADC_SC1_AIEN_MASK ; ADC0->SC1[2] = ADC_SC1_ADCH(8)/* pressure_AD1 */ |ADC_SC1_AIEN_MASK ; ADC0->SC1[3]=ADC_SC1_ADCH(9)/* pressure_AD2 */ |ADC_SC1_AIEN_MASK ; ADC0->SC1[4] = ADC_SC1_ADCH(10)/* pressure_AD3 */ |ADC_SC1_AIEN_MASK ; ADC0->SC1[5]=ADC_SC1_ADCH(11)/* BTS_AD8 */ |ADC_SC1_AIEN_MASK ; ADC0->SC1[6] = ADC_SC1_ADCH(12)/* throttle_AD */ |ADC_SC1_AIEN_MASK ; ADC0->SC1[7]=ADC_SC1_ADCH(13)/* temperature_AD */ |ADC_SC1_AIEN_MASK ; ADC0->SC1[8] = ADC_SC1_ADCH(14)/* pressure_AD4 */ |ADC_SC1_AIEN_MASK ; ADC0->SC1[9]=ADC_SC1_ADCH(15)/* BTS_AD4 */ |ADC_SC1_AIEN_MASK ; S32_NVIC->ICPR[1]|=1<<(ADC0_IRQn%32); S32_NVIC->ISER[1]|=1<<(ADC0_IRQn%32); S32_NVIC->IP[ADC0_IRQn]|=0xA0; } void ADC1_init_HWTrigger(void) { PCC->PCCn[PCC_ADC1_INDEX] &=~ PCC_PCCn_CGC_MASK; /* Disable clock to change PCS */ PCC->PCCn[PCC_ADC1_INDEX] |= PCC_PCCn_PCS(6); /* PCS=1: Select SOSCDIV2 */ PCC->PCCn[PCC_ADC1_INDEX] |= PCC_PCCn_CGC_MASK; /* Enable bus clock in ADC */ ADC1->SC1[0] |= ADC_SC1_ADCH_MASK |ADC_SC1_AIEN_MASK; /* ADCH=1F: Module is disabled for conversions*/ /* AIEN=0: Interrupts are disabled */ ADC1->CFG1 |= ADC_CFG1_ADIV_MASK |ADC_CFG1_MODE(1);/* ADICLK=0: Input clk=ALTCLK1=SOSCDIV2 */ /* ADIV=0: Prescaler=1 */ /* MODE=1: 12-bit conversion */ ADC1->CFG2 = 0x00000000C; /* SMPLTS=12(default): sample time is 13 ADC clks */ ADC1->SC2 = ADC_SC2_ADTRG_MASK; /* ADTRG=1: HW trigger */ /* ACFE,ACFGT,ACREN=0: Compare func disabled */ /* DMAEN=0: DMA disabled */ /* REFSEL=0: Voltage reference pins= VREFH, VREEFL */ ADC1->CFG2 = 0x00000000C; /* SMPLTS=12(default): sample time is 13 ADC clks */ ADC1->CLPS=0; ADC1->CLP3=0; ADC1->CLP2=0; ADC1->CLP1=0; ADC1->CLP0=0; ADC1->CLPX=0; ADC1->CLP9=0; ADC1->SC3 = /* CAL=0: Do not start calibration sequence */ ADC_SC3_AVGE(1)| /* ADCO=0: One conversion performed */ ADC_SC3_AVGS(3); /* AVGE,AVGS=0: HW average function disabled */ ADC1->SC3 |=ADC_SC3_CAL_MASK; while(ADC1->SC3&ADC_SC3_CAL_MASK){;} // ADC0->SC1[1] = ADC_SC1_ADCH(8) // |ADC_SC1_AIEN_MASK; /* ADCH=1F: Module is disabled for conversions*/ // /* AIEN=0: Interrupts are disabled */ ADC1->SC3 = 0x00000000; /* CAL=0: Do not start calibration sequence */ /* ADCO=0: One conversion performed */ /* AVGE,AVGS=0: HW average function disabled */ //ADC1->SC2|=ADC_SC2_DMAEN_MASK; ADC1->CFG1|=ADC_CFG1_ADIV(1); ADC1->SC3 = ADC_SC3_AVGE(1)| ADC_SC3_AVGS(1); ADC1->SC1[0] = ADC_SC1_ADCH(0)/* BTS_AD3 */ |ADC_SC1_AIEN_MASK ; ADC1->SC1[1]=ADC_SC1_ADCH(1)/* BTS_AD7 */ |ADC_SC1_AIEN_MASK ; ADC1->SC1[2] = ADC_SC1_ADCH(12)/* BTS_AD5 */ |ADC_SC1_AIEN_MASK ; ADC1->SC1[3]=ADC_SC1_ADCH(13)/* BTS_AD6 */ |ADC_SC1_AIEN_MASK ; ADC1->SC1[4] = ADC_SC1_ADCH(3)/* POWER_ON */ |ADC_SC1_AIEN_MASK ; ADC1->SC1[5]=ADC_SC1_ADCH(11)/* V_AD */ |ADC_SC1_AIEN_MASK ; // ADC1->SC1[6] = ADC_SC1_ADCH(12)/* throttle_AD */ // |ADC_SC1_AIEN_MASK; // // ADC1->SC1[7]=ADC_SC1_ADCH(13)/* temperature_AD */ // |ADC_SC1_AIEN_MASK; // // ADC1->SC1[8] = ADC_SC1_ADCH(14)/* pressure_AD4 */ // |ADC_SC1_AIEN_MASK; // // ADC1->SC1[9]=ADC_SC1_ADCH(15)/* BTS_AD4 */ // |ADC_SC1_AIEN_MASK; S32_NVIC->ICPR[1]|=1<<(ADC1_IRQn%32); S32_NVIC->ISER[1]|=1<<(ADC1_IRQn%32); S32_NVIC->IP[ADC1_IRQn]|=0xA0; } void ADC0_IRQHandler() { uint8_t i; for(i=0;i<10;i++) { if(ADC0->SC1[i]&ADC_SC1_COCO_MASK) { ADC0Value[i] = ADC0->R[i]; } } // if(ADC0->SC1[0]&ADC_SC1_COCO_MASK) // { // // // } // if(ADC0->SC1[1]&ADC_SC1_COCO_MASK) // { // // } // if(ADC0->SC1[2]&ADC_SC1_COCO_MASK) // { // } // // if(ADC0->SC1[3]&ADC_SC1_COCO_MASK) // { // // // } // if(ADC0->SC1[4]&ADC_SC1_COCO_MASK) // { // // // } // if(ADC0->SC1[5]&ADC_SC1_COCO_MASK) // { // // } // if(ADC0->SC1[6]&ADC_SC1_COCO_MASK) // { // // // } // if(ADC0->SC1[7]&ADC_SC1_COCO_MASK) // { // // // } // if(ADC0->SC1[8]&ADC_SC1_COCO_MASK) // { // // } // if(ADC0->SC1[9]&ADC_SC1_COCO_MASK) // { // // } } void ADC1_IRQHandler(void) { uint8_t i; for(i=0;i<6;i++) { if(ADC1->SC1[i]&ADC_SC1_COCO_MASK) { ADC1Value[i]=ADC1->R[i]; } } // if(ADC1->SC1[0]&ADC_SC1_COCO_MASK) // { // // // // } // if(ADC1->SC1[1]&ADC_SC1_COCO_MASK) // { // // // } // if(ADC1->SC1[2]&ADC_SC1_COCO_MASK) // { // // } // if(ADC1->SC1[3]&ADC_SC1_COCO_MASK) // { // // // } // if(ADC1->SC1[4]&ADC_SC1_COCO_MASK) // { // // // // } // if(ADC1->SC1[5]&ADC_SC1_COCO_MASK) // { // // } }