📄 2808adc1.0.c
字号:
#include "DSP280x_Device.h" // DSP280x 头文件
#include "DSP280x_Examples.h" // DSP280x 例子文件
interrupt void adc_isr(void);
// //定义全局变量:
Uint16 LoopCount;
Uint16 ConversionCount;
Uint16 Voltage1[10];
Uint16 Voltage2[10];
main()
{
InitSysCtrl();//初始化系统
EALLOW;
SysCtrlRegs.HISPCP.all = 0x4; // HSPCLK = SYSCLKOUT/8
EDIS;
DINT; //清断和中断向量表
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW; // 开写保护
PieVectTable.ADCINT = &adc_isr;
EDIS; // 关写保护
InitAdc();
PieCtrlRegs.PIEIER1.bit.INTx6 = 1; //使能PIE中的ADCINT中断
IER |= M_INT1; // 使能 CPU 中断 1,使能全部 INT1
EINT; // 使能全局实时中断 DBGM
ERTM; //使能全局实时中断 DBGM
LoopCount = 0;//循环计数器清零
ConversionCount = 0;//当前转化结果数清零
// 配置 ADC
AdcRegs.ADCMAXCONV.all = 0x0001; // 设置SEQ1的2个转化通道一转换通道
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3; // 设置SEQ1的 ADCINA3 作为第
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x2; // 设置SEQ1的 ADCINA2 作为第二转换通道
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// 使能EPWM SOCA启动SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // 使能 SEQ1 中断 (每次 EOS)
EPwm1Regs.ETSEL.bit.SOCAEN = 1; // 使能EPwm1 SOC 去启动 SEQ1
EPwm1Regs.ETSEL.bit.SOCASEL = 4; // 使能 SEQ1 中断 (每次 EOS)
EPwm1Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event
EPwm1Regs.CMPA.half.CMPA = 0x0080; // 设置比较器A的值
EPwm1Regs.TBPRD = 0xFFFF; // 设置周期寄存器
EPwm1Regs.TBCTL.bit.CTRMODE = 0; // 计数开始
for(;;)
{
LoopCount++;
}
}
interrupt void adc_isr(void)
{
Voltage1[ConversionCount] = AdcRegs.ADCRESULT0 >>4;//AdcRegs.ADCRESULT0中的值位12位的数
Voltage2[ConversionCount] = AdcRegs.ADCRESULT1 >>4;
// 如果已记录了10次转化,则重新开始转换
if(ConversionCount == 9)
{
ConversionCount = 0;
}
else ConversionCount++;
// 重新初始化下一次ADC转换
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // 复位 SEQ1
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // 清 INT SEQ1位
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // 清中断应答信号,准备接收下一次中断
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -