您的位置:首页 > 其它

【DSP】TMS320F28035 ADC例程(软件触发+中断)

2017-08-02 21:39 603 查看
#include "DSP28x_Project.h"

interrupt void adc_isr(void);

Uint16 ConversionCount;
Uint16 Voltage1[10];
Uint16 Voltage2[10];

main()
{
InitSysCtrl();

DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();

EALLOW;
PieVectTable.ADCINT1 = &adc_isr; //映射ADC中断
EDIS;

InitAdc();

PieCtrlRegs.PIEIER1.bit.INTx1 = 1;   //使能PIE级INT1.1中断
IER |= M_INT1;                       //使能CPU级INT1中断
EINT;                                //使能总中断

ConversionCount = 0;

EALLOW;
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;    //转换完成前一个ADC时钟周期产生EOC
AdcRegs.INTSEL1N2.bit.INT1E     = 1;    //使能ADCINT1
AdcRegs.INTSEL1N2.bit.INT1CONT  = 0;    //关闭连续模式
AdcRegs.INTSEL1N2.bit.INT1SEL   = 1;    //将ADCINT1映射到EOC1
AdcRegs.ADCSOC0CTL.bit.CHSEL    = 0;    //将ADCINA0映射到通道0
AdcRegs.ADCSOC1CTL.bit.CHSEL    = 1;    //将ADCINA1映射到通道1
AdcRegs.ADCSOC0CTL.bit.TRIGSEL  = 0;    //软件触发SOC0
AdcRegs.ADCSOC1CTL.bit.TRIGSEL  = 0;    //软件触发SOC1
AdcRegs.ADCSOC0CTL.bit.ACQPS    = 6;    //设置窗口采样次数
AdcRegs.ADCSOC1CTL.bit.ACQPS    = 6;    //设置窗口采样次数
EDIS;

AdcRegs.ADCSOCFRC1.all = 0x0003;//强制给通道0和1产生SOC信号

for(;;)
{
}

}

interrupt void  adc_isr(void)
{

Voltage1[ConversionCount] = AdcResult.ADCRESULT0;
Voltage2[ConversionCount] = AdcResult.ADCRESULT1;

if(ConversionCount == 9)
{
ConversionCount = 0;
}
else ConversionCount++;

AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;     //清除EOC1信号(ADCINT1)

AdcRegs.ADCSOCFRC1.all = 0x0003;//强制给通道0和1产生SOC信号

PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;   //写1清0,写0无效
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: