器件型号:CCSTUDIO-C2000
您好!
我正在尝试了解如何对 ADC1进行编程、我是否可以参考任何文档?
我有一些用于初始化的现有示例代码、但当我尝试打印读数值时、它看起来都是0。
void ADC_Init()
{
*(unsigned int*) 0x4E58 = 7;//针对 InitAnalogSystemClock() Advisory 的权变措施
if (((** InitAnalogSystemClock)(ACLKDIV4)| 0x8000)!= 0xA005){
//如果返回值不是0xA005,则模拟子系统未正确初始化
ASM (" ESTOP0");
for (;;);
}
EALLOW;
//初始化模拟子系统并将时钟分频器设置为4分频
while (((** AnalogClockEnable)(AnalogConfig1、ADC1_ENABLE));//启用 ADC 1
while (((** AnalogClockEnable)(AnalogConfig2、ADC2_enable));//启用 ADC 2
(**读取 AnalogClockStatus)(AnalogConfig2);//等待 AnalogClockEnable 函数完成
//在最后一次复位是调试器复位时复位两个 ADC (这不是
//复位 ADC
Adc1Regs.ADCCTL1.bit.reset = 1;
//在调用器件校准之前,等待确保 ADC 不会复位
_asm (" nop");
_asm (" nop");
//校准器件的温度
(**设备校准)();
EDIS;
//Init the ADC
InitAdc1();
//配置 ADC 读数以连续触发(ADCINT1和 ADCINT2之间交替)
EALLOW;
Adc1Regs.ADCCTL2.bit.ADCNONOVERLAP = 1;//启用非重叠模式、即转换和未来采样事件不重叠
Adc1Regs.ADCCTL1.bit.INTPULSEPOS = 0;// ADCINT1在 ADCResults 锁存后跳闸
Adc1Regs.INTSEL1N2.bit.INT1E = 1;//启用 ADCINT1
Adc1Regs.INTSEL1N2.bit.INT2E = 1;//启用 ADCINT2
Adc1Regs.INTSEL1N2.bit.INT1CONT = 1;//启用 ADCINT1连续模式
Adc1Regs.INTSEL1N2.bit.INT2CONT = 1;//启用 ADCINT2连续模式
Adc1Regs.INTSEL1N2.bit.INT1SEL = 3;//设置 EOC3以触发 ADCINT1触发
Adc1Regs.INTSEL1N2.bit.INT2SEL = 1;//设置 EOC1以触发 ADCINT2触发
Adc1Regs.ADCSOC0CTL.bit.CHSEL = 0;//将 SOC0通道选择设置为 ADC1A0 (EOC0)
Adc1Regs.ADCSOC1CTL.bit.CHSEL = 2;//将 SOC1通道选择设置为 ADC1A2 (EOC1)
Adc1Regs.ADCSOC2CTL.bit.CHSEL = 3;//将 SOC2通道选择设置为 ADC1A3 (EOC2)
Adc1Regs.ADCSOC3CTL.bit.CHSEL = 4;//将 SOC3通道选择设置为 ADC1A4 (EOC3)
Adc1Regs.ADCINTSOCSEL.bit.SOC0 = 2;// ADCINT2触发 SOC0
Adc1Regs.ADCINTSOCSEL1.bit.SOC1 = 2;// ADCINT2触发 SOC1
Adc1Regs.ADCINTSOCSEL1.bit.SOC2 = 1;// ADCINT1触发 SOC2
Adc1Regs.ADCINTSOCSEL1.bit.SOC3 = 1;// ADCINT1触发 SOC3
Adc1Regs.ADCSOC0CTL.bit.ACQPS = 25;//将 SOC0 S/H 窗口设置为26个 ADC 时钟周期(25个 ACQPS 加1)
Adc1Regs.ADCSOC1CTL.bit.ACQPS = 25;//将 SOC1 S/H 窗口设置为26个 ADC 时钟周期(25个 ACQPS 加1)
Adc1Regs.ADCSOC2CTL.bit.ACQPS = 25;//将 SOC2 S/H 窗口设置为26个 ADC 时钟周期(25个 ACQPS 加1)
Adc1Regs.ADCSOC3CTL.bit.ACQPS = 25;//将 SOC3 S/H 窗口设置为26个 ADC 时钟周期(25个 ACQPS 加1)
EDIS;
DELAY_US (5000);
// EALLOW;
// PieVectTable.ADCINT1 =&ADC_ISR;
// EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的
//
////在 PIE 中启用 ADCINT1
// PieCtrlRegs.PIEIER1.bit.INTx1 = 1;//在 PIE 中启用 INT 1.1
// IER |= M_INT1;//启用 CPU 中断1
//手动启动转换
Adc1Regs.ADCSOCFRC1.bit.SOC0 = 1;//在 SOC0上触发转换
Adc1Regs.ADCSOCFRC1.bit.SOC1 = 1;//在 SOC1上触发转换
Adc1Regs.ADCSOCFRC1.bit.SOC2 = 1;//在 SOC2上触发转换
Adc1Regs.ADCSOCFRC1.bit.SOC3 = 1;//在 SOC3上触发转换
}