dsp28335芯片 adc中断方式采样代码加注释
时间: 2023-07-09 12:46:40 浏览: 232
DSP28335关于AD采样的程序设计
好的,以下是一个简单的dsp28335芯片adc中断方式采样的代码,我会尽可能详细地加上注释,希望能对你有帮助:
```c
// 定义一个变量,用于存储ADC采样的结果
volatile Uint16 adc_result;
interrupt void adc_isr(void)
{
// 清除ADC中断标志位
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
// 读取采样结果
adc_result = AdcResult.ADCRESULT0;
// 在此处添加采样结果的处理代码
}
void main(void)
{
// 将XINT2引脚配置为ADC SOC引脚
GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO20 = 0;
GpioCtrlRegs.GPAQSEL2.bit.GPIO20 = 0;
// 初始化ADC模块
InitAdc();
// 配置ADC SOC触发源,这里使用XINT2触发
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 6; // XINT2触发
AdcRegs.ADCSOC0CTL.bit.CHSEL = 0; // 采样通道0
AdcRegs.ADCSOC0CTL.bit.ACQPS = 39; // 采样周期
// 使能ADC SOC中断
AdcRegs.INTSEL1N2.bit.INT1E = 1;
AdcRegs.INTSEL1N2.bit.INT1CONT = 0;
AdcRegs.INTSEL1N2.bit.INT1SEL = 0;
// 使能全局中断
EINT;
ERTM;
// 循环等待ADC中断发生
while(1)
{
// 在这里添加其他任务
}
}
void InitAdc(void)
{
EALLOW;
// 使能ADC时钟
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
// 复位ADC模块
AdcRegs.ADCTRL1.bit.RESET = 1;
asm(" NOP");
asm(" NOP");
asm(" NOP");
asm(" NOP");
AdcRegs.ADCTRL1.bit.RESET = 0;
// 配置ADC时钟分频系数,使得采样周期为1.25us
AdcRegs.ADCCTL2.bit.PRESCALE = 0;
AdcRegs.ADCCTL2.bit.RESOLUTION = 0; // 12位分辨率
// 配置ADC采样模式为中断模式
AdcRegs.ADCTRL1.bit.ACQPS = 3;
AdcRegs.ADCTRL1.bit.SEQ_CASC = 0;
AdcRegs.ADCTRL1.bit.CONT_RUN = 0;
AdcRegs.ADCTRL1.bit.SUSMOD = 3;
// 使能ADC SOC0
AdcRegs.ADCSOC0CTL.bit.CHSEL = 0; // 采样通道0
AdcRegs.ADCSOC0CTL.bit.ACQPS = 39; // 采样周期
EDIS;
}
```
这段代码的作用是读取ADC采样结果,并在中断中处理采样结果。代码中使用XINT2引脚作为ADC SOC触发源,当XINT2引脚产生一个上升沿时,ADC模块开始采样,采样完成后触发ADC中断。在ADC中断中,我们可以通过读取`AdcResult.ADCRESULT0`来获取采样结果,然后进行处理。需要注意的是,在中断中要及时清除ADC中断标志位,否则会一直触发中断。
阅读全文