本帖最后由 阳阳阳阳阳阳阳阳 于 2021-8-23 14:35 编辑
/****************************************************************** 编 译 器:Haawking IDE V0.5.0 D S P:dsc28027勇士板 电 脑 配 置:Windows10 专业版; 64 位操作系统 仿 真 器:HX100V2 使 用 库:无 作 用:采样ADCINA1通道的输入电压,ADC的触发源-仅软件 版 本:V0.0.1 ******************************************************************/ 1. HaawkingIDE新建工程
2. 初始化ADC /****************************************************************** 函数名:void ADC_Init(void) 参 数:无 返回值:无 作 用:配置ADCINA1为ADC转换通道,7个clock的采样周期,触发源-仅软件,设置ADCINT1触发SOC0一直采样
******************************************************************/
- void ADC_Init(void)
- {
- EALLOW;
- AdcRegs.ADCCTL1.bit.ADCENABLE = 1; //使能ADC,并给ADC上电,写0无效,写1使能ADC
- while(AdcRegs.ADCCTL1.bit.ADCRDY != 1){
- } //ADC 复位完成,当ADCRDY = 1表示复位完成,0表示复位未完成
- AdcRegs.ADCSOC0CTL.bit.CHSEL = 1; //SOC0事件选择ADCINA1通道
- AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 0; //SOC0事件触发源选择-仅软件
- AdcRegs.ADCSOC0CTL.bit.ACQPS = 6; //SOC0事件采样窗口为 7个ADC clocks
- AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //在ADC将结果锁存到寄存器前的1周期 产生INT脉冲
- AdcRegs.ADCCTL2.bit.CLKDIV2EN = 1; //ADC-4分频
- AdcRegs.INTSEL1N2.bit.INT1E = 1; //使能ADCINT1中断
- AdcRegs.INTSEL1N2.bit.INT1CONT = 1; //每当产生EOC脉冲时,都会产生ADCINTx脉冲,而与是否将标志位清零无关(关键设置)
- AdcRegs.INTSEL1N2.bit.INT1SEL = 0; //EOC0触发ADCINT1
- AdcRegs.ADCINTSOCSEL1.bit.SOC0 = 1; //ADCINT1将触发SOC0
- AdcRegs.ADCSOCFRC1.bit.SOC0 = 1; //SOC0事件:强制进行软件启动转换
- EDIS;
- }
复制代码
ADC中断服务程序函数: /****************************************************************** 函数名:INTERRUPT void adc_isr() 参 数:无 返回值:无 作 用:adc的中断服务程序,当adc的采集产生中断的时候,进入此函数处理adc采集的数据
******************************************************************/
- INTERRUPT void adc_isr(void)
- {
- uint16 a=0;
- a = AdcResult.ADCRESULT0;
- EALLOW;
- AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 0x1;
- AdcRegs.ADCINTOVFCLR.bit.ADCINT1 = 0x1;
- PieCtrlRegs.PIEACK.all = 0xffff;
- EDIS;
- return;
- }
复制代码
3. main函数
- int main(void)
- {
- InitFlash();
- InitSysCtrl(); //将PLL配置成bypass倍频1分频,配置系统时钟为12M
- DINT;
- IER_DISABLE(0xffff); //禁能所有中断
- IFR_DISABLE(0xffff); //清所有中断标志位
- InitPieVectTable(); //This function initializes the PIE vector table to a known state.This function must be executed after boot time.
- EALLOW;
- PieCtrlRegs.PIEACK.all = 0xffff; //清除所有中断
- PieVectTable.rsvd10_1 = &adc_isr;
- PieCtrlRegs.PIEIER10.all = 0xff; //使能第10组中断的,所有小中断
- EDIS;
- IER_ENABLE(M_INT10); //enable interrupt reg
- EINT;
- ERTM;
- ADC_Init(); //初始化ADC
- while(1){
- // i++;
- }
- return 0;
- }
复制代码
4. 接线:P203的RG接1A
5. 点击编译、编译完成后点击下载
6. 运行结果:查看ADC采样值,Add Watch Expression:AdcResult.ADCRESULT0 (计算公式:采样值=((电位器电压值-0.0v)/3.3)*4096) |