void init_ADC(void) { MCF_GPIO_PANPAR=MCF_GPIO_PANPAR_AN0_AN0 //使能ADC0和1两个通道,用于采集。 |MCF_GPIO_PANPAR_AN1_AN1 |MCF_GPIO_PANPAR_AN2_AN2; MCF_ADC_CTRL1=MCF_ADC_CTRL1_CHNCFG(0) //ADC为正常采集模式 |MCF_ADC_CTRL1_SMODE(2);//循环采集 MCF_ADC_CTRL2=MCF_ADC_CTRL2_DIV(9); //分频系数为:2*(9+1)=20 //ADC模块时钟为4MHz MCF_ADC_CAL=0; //高低电压的参考电压分别为VRH和VRL MCF_ADC_ADSDIS=0; //使能所有的采样通道 //设置8个通道的补偿值,这里全部设置为0 MCF_ADC_ADOFS(0)=0X0000; MCF_ADC_ADOFS(1)=0X0000; MCF_ADC_ADOFS(2)=0X0000; //使能ADC供电,并设置供电延时时间为15个ADC周期 MCF_ADC_POWER=MCF_ADC_POWER_PUDELAY(15) |MCF_ADC_POWER_PD2; MCF_ADC_CTRL1 &= 0xBFFF; //将CTRL1的STOP0位清0,其它位不变,设置为正常模式 while (MCF_ADC_POWER & MCF_ADC_POWER_PSTS0) //等待ADC转换器A被使能 {} while (MCF_ADC_POWER & MCF_ADC_POWER_PSTS1) //等待ADC转换器B被使能 {} MCF_ADC_CTRL1 |= 0x2000; //将CTRL1的START0位置1,其它位不变,启动转换 }
void TADCx_Init(){ MCF_GPIO_PANPAR = MCF_GPIO_PANPAR_AN0_AN0;// | MCF_GPIO_PANPAR_AN1_AN1 | MCF_GPIO_PANPAR_AN2_AN2; /* 停止运行 全部为单端模式 顺序一次 扫描结束中断使能*/ MCF_ADC_CTRL1 = MCF_ADC_CTRL1_STOP0 | MCF_ADC_CTRL1_CHNCFG(0) | MCF_ADC_CTRL1_SMODE(0)|MCF_ADC_CTRL1_EOSIE0; MCF_ADC_CTRL2 = MCF_ADC_CTRL2_DIV(7); // 配置ADC时钟频率 ADC时钟频率 = fsys/(2*(DIV+1)) = 80MHz/256 = 312.5kHz MCF_ADC_ADZCC = 0; // 过零全部禁止 /* 通道设置 全部为默认对应引脚 */ MCF_ADC_ADLST1 = MCF_ADC_ADLST1_SAMPLE0(0) | MCF_ADC_ADLST1_SAMPLE1(1) | MCF_ADC_ADLST1_SAMPLE2(2) | MCF_ADC_ADLST1_SAMPLE3(3); MCF_ADC_ADLST2 = MCF_ADC_ADLST2_SAMPLE4(4) | MCF_ADC_ADLST2_SAMPLE5(5) | MCF_ADC_ADLST2_SAMPLE6(6) | MCF_ADC_ADLST2_SAMPLE7(7); MCF_ADC_ADSDIS &= ~(MCF_ADC_ADSDIS_DS0);// | MCF_ADC_ADSDIS_DS1 | MCF_ADC_ADSDIS_DS2);//使能AN0 AN1 AN2 MCF_ADC_ADSTAT = MCF_ADC_ADSTAT_EOSI0 | MCF_ADC_ADSTAT_EOSI1; MCF_ADC_ADLSTAT = 0XFFFF; //全部设置为小于阀值 /* 上下限寄存器 */ MCF_ADC_ADLLMT(0) = MCF_ADC_ADLLMT_LLMT(0); MCF_ADC_ADLLMT(1) = MCF_ADC_ADLLMT_LLMT(0); MCF_ADC_ADLLMT(2) = MCF_ADC_ADLLMT_LLMT(0); MCF_ADC_ADLLMT(3) = MCF_ADC_ADLLMT_LLMT(0); MCF_ADC_ADLLMT(4) = MCF_ADC_ADLLMT_LLMT(0); MCF_ADC_ADLLMT(5) = MCF_ADC_ADLLMT_LLMT(0); MCF_ADC_ADLLMT(6) = MCF_ADC_ADLLMT_LLMT(0); MCF_ADC_ADLLMT(7) = MCF_ADC_ADLLMT_LLMT(0); MCF_ADC_ADHLMT(0) = MCF_ADC_ADHLMT_HLMT(0xFFFF); MCF_ADC_ADHLMT(1) = MCF_ADC_ADHLMT_HLMT(0xFFFF); MCF_ADC_ADHLMT(2) = MCF_ADC_ADHLMT_HLMT(0xFFFF); MCF_ADC_ADHLMT(3) = MCF_ADC_ADHLMT_HLMT(0xFFFF); MCF_ADC_ADHLMT(4) = MCF_ADC_ADHLMT_HLMT(0xFFFF); MCF_ADC_ADHLMT(5) = MCF_ADC_ADHLMT_HLMT(0xFFFF); MCF_ADC_ADHLMT(6) = MCF_ADC_ADHLMT_HLMT(0xFFFF); MCF_ADC_ADHLMT(7) = MCF_ADC_ADHLMT_HLMT(0xFFFF); /* 偏移量寄存器 */ MCF_ADC_ADOFS(0) = MCF_ADC_ADOFS_OFFSET(0); MCF_ADC_ADOFS(1) = MCF_ADC_ADOFS_OFFSET(0); MCF_ADC_ADOFS(2) = MCF_ADC_ADOFS_OFFSET(0); MCF_ADC_ADOFS(3) = MCF_ADC_ADOFS_OFFSET(0); MCF_ADC_ADOFS(4) = MCF_ADC_ADOFS_OFFSET(0); MCF_ADC_ADOFS(5) = MCF_ADC_ADOFS_OFFSET(0); MCF_ADC_ADOFS(6) = MCF_ADC_ADOFS_OFFSET(0); MCF_ADC_ADOFS(7) = MCF_ADC_ADOFS_OFFSET(0); MCF_ADC_ADZCSTAT = 0;//零点不改变标志位 // 禁止自动低功耗模式与自动掉电模式 MCF_ADC_POWER &= ~MCF_ADC_POWER_ASB; MCF_ADC_POWER &= ~MCF_ADC_POWER_APD; // 开启中断 MCF_INTC0_IMRH &= ~MCF_INTC_IMRH_INT_MASK49; MCF_INTC0_IMRL &= ~MCF_INTC_IMRL_MASKALL; MCF_INTC0_ICR49 = MCF_INTC_ICR_IP(5) + MCF_INTC_ICR_IL(3); MCF_ADC_POWER &=~ MCF_ADC_POWER_PD0; while(MCF_ADC_POWER & MCF_ADC_POWER_PSTS0){} }