“简简单单DSP”系列学习活动——第六期AD学习及使用 联系客服

发布时间 : 星期六 文章“简简单单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; }