发布时间 : 星期六 文章“简简单单DSP”系列学习活动——第六期AD学习及使用更新完毕开始阅读8e56a1781711cc7931b71644
AdcRegs.ADCTRL1.bit.CPS=1;
AdcRegs.ADCTRL3.bit.ADCCLKPS=3; /*采样窗口长度设置2.5M*/
AdcRegs.ADCTRL1.bit.ACQ_PS=5; /*配置AD*/ /*级联模式 */
AdcRegs.ADCTRL1.bit.SEQ_CASC=1; /*设置顺序采样模式*/
AdcRegs.ADCTRL3.bit.SMODE_SEL=0;
/*序列发生器最大采样通道数为 16, SEQ 将用到 ADCADCCHSELSEQ1、ADCADCCHSELSEQ2,ADCADCCHSELSEQ3、ADCADCCHSELSEQ4 ,用到ADCMAXCONV的低4位*/
AdcRegs.MAX_CONV.all=0x000F; /*采样 ADCINA0*/
AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0; /*采样 ADCINA1*/
AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x1; /*采样 ADCINA2*/
AdcRegs.ADCCHSELSEQ1.bit.CONV02=0x2; /*采样 ADCINA3*/
AdcRegs.ADCCHSELSEQ1.bit.CONV03=0x3; /*采样 ADCINA4*/
AdcRegs.ADCCHSELSEQ2.bit.CONV04=0x4; /*采样 ADCINA5*/
AdcRegs.ADCCHSELSEQ2.bit.CONV05=0x5; /*采样 ADCINA6*/
AdcRegs.ADCCHSELSEQ2.bit.CONV06=0x6; /*采样 ADCINA7*/
AdcRegs.ADCCHSELSEQ2.bit.CONV07=0x7; /*采样 ADCINB0*/
AdcRegs.ADCCHSELSEQ3.bit.CONV08=0x8; /*采样 ADCINB1*/
AdcRegs.ADCCHSELSEQ3.bit.CONV09=0x9; /*采样 ADCINB2*/
AdcRegs.ADCCHSELSEQ3.bit.CONV10=0xA; /*采样 ADCINB3*/
AdcRegs.ADCCHSELSEQ3.bit.CONV11=0xB; /*采样 ADCINB4*/
AdcRegs.ADCCHSELSEQ4.bit.CONV12=0xC; /*采样 ADCINB5*/
AdcRegs.ADCCHSELSEQ4.bit.CONV13=0xD; /*采样 ADCINB6*/
AdcRegs.ADCCHSELSEQ4.bit.CONV14=0xE; /*采样 ADCINB7*/
AdcRegs.ADCCHSELSEQ4.bit.CONV15=0xF; /*中断模式0*/
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ=1; /*使能ADC中断,*/
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;
/*如果是其他方式触发中断,那么还要设置,比如取EVA触发中断,那么要加这么一条设置,软件上触发就不需要了*/
AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1; }
ADC中断函数处理:
ADC的中断函数在DSP281X_DefaultIsr.c库函数中了,在中断函数里面主要是读取ADC结果缓冲寄存器的值,12位在高位了,因此要把结果缓冲寄存器的值右移4位。并且要复位ADC的输入通道排序寄存器到CONV00,等待ADC采样使能,即有SOC脉冲;清外设中断标志位,以及PIEACK清零。 Uint16 ConversionCount; Uint16 Voltage1[1024]; Uint16 Voltage2[1024];
interrupt void ADCINT_ISR(void) // ADC {
/*读数*/
Voltage1[ConversionCount] =AdcRegs.ADCRESULT0 >>4; Voltage2[ConversionCount]= AdcRegs.ADCRESULT1 >>4; // If 40 conversions have been logged, start over if(ConversionCount == 1023) {
ConversionCount = 0; }
else ConversionCount++; /*复位SEQ1*/
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; /*中断标志位清0*/
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; /*PIEACK清0*/
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; return; }