Example #1
0
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,其它位不变,启动转换		 				 				 		
}
Example #2
0
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){}

}