主题中讨论的其他器件:C2000WARE
在程序中,将特定的逻辑块函数初始化为 Init.__()。 不幸的是,由于我不知道的原因,Init.adc ();和 Init.adcsOC ();不执行任何操作,即使调试器指示每行代码正在执行。 但是、器件寄存器不变。
主函数的开始
int main(void)
{
Uint32 *emubootctrl = (Uint32 *)0xD00;
EALLOW;
*emubootctrl = 0x0B5A;
EDIS;
InitFlash();
InitSysPll(XTAL_OSC, IMULT_20, FMULT_0, PLLCLK_BY_2); //200Mhz in the CPU, the flash should be configure for more faster CLK
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
Init.GPIO();
Init.CLA();
Init.CLK_SUPPLY_pin();
Init.PWM();
Init.ADC();
Init.ADCSOC();
(...)
init.adc ();和 Init.adcsOC ();它们不是 workinh
#include <stdafx.h>
#include <Init.h>
#include <math.h>
#include <string.h>
#include <IO.h>
#include "F2837xD_sdfm_drivers.h"
class Init_class Init;
(...) //I skipped the rest of classes that are working properly
void Init_class::ADC()
{
EALLOW;
AdcaRegs.ADCCTL2.bit.PRESCALE = 6;
AdcbRegs.ADCCTL2.bit.PRESCALE = 6;
AdccRegs.ADCCTL2.bit.PRESCALE = 6;
AdcSetMode(ADC_ADCA, ADC_RESOLUTION_16BIT, ADC_SIGNALMODE_DIFFERENTIAL);
AdcSetMode(ADC_ADCB, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
AdcSetMode(ADC_ADCC, ADC_RESOLUTION_16BIT, ADC_SIGNALMODE_DIFFERENTIAL);
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdccRegs.ADCCTL1.bit.INTPULSEPOS = 1;
// ADCA config
AdcaRegs.ADCINTSEL1N2.all = 0x0022; //enable ADCINT1 at EOC2
AdcaRegs.ADCINTSOCSEL1.all = 0x0015; // ADCINT1 triggers SOC0,1,2
// ADCB config
AdcbRegs.ADCINTSEL1N2.all = 0x0023; //enable ADCINT1 at EOC3
AdcbRegs.ADCINTSOCSEL1.all = 0x0055; // ADCINT1 triggers SOC0,1,2,3
// ADCC config
AdccRegs.ADCINTSEL1N2.all = 0x0022; //enable ADCINT1 at EOC2
AdccRegs.ADCINTSOCSEL1.all = 0x0015; // ADCINT1 triggers SOC0,1,2
EDIS;
}
void Init_class::ADCSOC()
{
EALLOW;
// ADCASOC config
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0;
AdcaRegs.ADCSOC0CTL.bit.ACQPS = 100;
AdcaRegs.ADCSOC1CTL.bit.CHSEL = 2;
AdcaRegs.ADCSOC1CTL.bit.ACQPS = 100;
AdcaRegs.ADCSOC2CTL.bit.CHSEL = 4;
AdcaRegs.ADCSOC2CTL.bit.ACQPS = 100;
// ADCBSOC config
AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0;
AdcbRegs.ADCSOC0CTL.bit.ACQPS = 60;
AdcbRegs.ADCSOC1CTL.bit.CHSEL = 1;
AdcbRegs.ADCSOC1CTL.bit.ACQPS = 60;
AdcbRegs.ADCSOC2CTL.bit.CHSEL = 2;
AdcbRegs.ADCSOC2CTL.bit.ACQPS = 60;
AdcbRegs.ADCSOC3CTL.bit.CHSEL = 3;
AdcbRegs.ADCSOC3CTL.bit.ACQPS = 60;
// ADCCSOC config
AdccRegs.ADCSOC0CTL.bit.CHSEL = 2;
AdccRegs.ADCSOC0CTL.bit.ACQPS = 100;
AdccRegs.ADCSOC1CTL.bit.CHSEL = 4;
AdccRegs.ADCSOC1CTL.bit.ACQPS = 100;
AdccRegs.ADCSOC2CTL.bit.CHSEL = 14;
AdccRegs.ADCSOC2CTL.bit.ACQPS = 100;
EDIS;
}