⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ms320f2812的adc模块用于采样过程的初始化代码.txt

📁 MS320F2812的ADC模块用于采样过程的初始化代码.rar
💻 TXT
字号:
MS320F2812的ADC模块用于采样过程的初始化代码


void InitAdc(void) //初始化ADC模块 
      { 
      unsigned int i; 
      AdcRegs.ADCTRL1.bit.RESET = 1; //ADC模块软复位,3个周期后,该位自动清0 
      for(i=0;i<12;i++) NOP; //等待ADC寄存器硬件复位完备> 
      AdcRegs.ADCTRL1.bit.SUSMOD = 3; //仿真挂起模式,0为忽略仿真挂起 
      AdcRegs.ADCTRL1.bit.ACQ_PS = 1; //采样保持脉冲个数,即SH为1+1=2个ADCCLK 
      AdcRegs.ADCTRL1.bit.CPS = 0; //是否再对送给ADC的时钟进行二分频 
      AdcRegs.ADCTRL1.bit.CONT_RUN = 0; //1:进入连续运行; 0:开始停止模式 
      AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; //0:独立模式; 1:级联序列器模式 
      AdcRegs.ADCTRL3.bit.ADCBGRFDN = 3; //带隙参考电路上电 
      for(i=0;i<10000;i++) NOP;> 
      AdcRegs.ADCTRL3.bit.ADCPWDN = 1; //除带隙参考电路外的其他ADC模块上电 
      for(i=0;i<5000;i++) NOP;> 
      AdcRegs.ADCTRL3.bit.ADCCLKPS = 3; //设置ADC的转换时钟ADCCLK = 
      HSPCLK/(2*(ADCCLKPS+CPS))=25MHZ 
      AdcRegs.ADCTRL3.bit.SMODE_SEL = 0; //0:顺序采用模式,1:同步采样模式 
      AdcRegs.MAX_CONV.all = 0x0000; //设置ADC的转换通道数 
      AdcRegs.CHSELSEQ1.bit.CONV00 = 0; //设置ADCINA0为SEQ1的第一个转换通道 
      AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1; //清除SEQ1中断标志 
      AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1; //使能EVASOC启动SEQ1 
      AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; //使能SEQ1中断 
      AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ = 0; 
      AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0; 
      AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1 = 0; 
      AdcRegs.ADCTRL2.bit.EXT_SOC_SEQ1 = 0; 
      AdcRegs.ADCTRL2.bit.RST_SEQ2=0; 
      AdcRegs.ADCTRL2.bit.SOC_SEQ2=0; 
      AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2=0; 
      AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2=0; 
      AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ2=0; 
      AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0; //为1时,软件启动ADC转换 
      } 

void InitEv(void) 
      { 
      EvaRegs.T1CMPR = 0x0000; 
      EvaRegs.T1PR = 75; //2MHZ的采样频率 
      EvaRegs.GPTCONA.bit.T1TOADC = 2; //使能事情管理器A,周期中断启动ADC 
      EvaRegs.T1CON.all = 0x1042; 
      } 
      interrupt void ADInterrupt(void) 
      { 
      IFR = 0x0000; 
      //------------------------------------- 
      ADTemp[ADTempIndex] = (unsigned char)((AdcRegs.RESULT0)>>8); 
      ADTempIndex = (ADTempIndex+1)&0x01; 
      Value = ADTemp[0] + ADTemp[1]; 
      if(++aa > 1000000) 
      { 
      aa = 0; 
      LED3 = ~LED3; 
      } 
      //------------------------------------- 
      AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR = 1; //清除INT_SEQ1中断标志 
      AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; //复位SEQ1序列 
      PieCtrl.PIEACK.all = 0xFFFF; //允许再次响应中断 
      } 
      void main(void) 
      { 
      InitSysCtrl(); //初始化系统 
      DINT; //屏蔽全局中断 
      IER = 0x0000; //禁止所有中断 
      IFR = 0x0000; //清除所有中断标志 
      InitPieCtrl(); //初始化PIE中断 
      InitPieVectTable(); //初始化PIE中断矢量表 
      InitGpio(); //初始化通用IO口 
      InitSci(); //初始化SCIA寄存器,即初始化串口 
      EALLOW; //允许操作寄存器 
      PieVectTable.ADCINT = &ADInterrupt; //设置ADC中断入口地址 
      EDIS; //禁止操作寄存器 
      InitAdc(); //初始化ADC寄存器 
      IER |= M_INT1; //使能CPU中断1,即第一组PIE中断,共12组PIE中断 
      InitEv(); //初始化事件触发器A,用于定时采样 
      EINT; //使能全局中断 
      ERTM; //Enable Global realtime interrupt DBGM 
      while(1) 
      { 
      SendToPC(ASCIIBuffer,100,'U'); 
      Delay(); 
      } 
      }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -