📄 ms320f2812的adc模块用于采样过程的初始化代码.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 + -