This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F2.8377万S:TMS320F2.8377万S

Guru**** 2331900 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/580777/ccs-tms320f28377s-tms320f28377s

部件号:TMS320F2.8377万S

工具/软件:Code Composer Studio

您好,

我必须在TMS320F2.8377万S上实施2个ADC

我正在使用下面的代码来实施2个ADC。 只有第一个ADC工作,而第二个不工作。

您能否建议我为使其发挥作用而必须进行的更改。


//
#include "F28x_Project.h"

void ConfigureADC (void);

void ConfigureEPWM (void);
void ConfigureEPWM2(void);

void SetupADCEpwm (UINT16通道);
void SetupADCE2pwm (UINT16通道);

中断无效adca1_isr(void);
中断无效adcb1_isr (void);

UINT16 AdcaResults;//以存储adca值
UINT16 AdcbResults;//用于存储ADCB值


易失性UINT16缓冲器全;

Void主(void)

InitSysCtrl();


此示例跳过InitGpio();//

色调;

InitPieCtrl();

IER = 0x0000;
IFR = 0x0000;

InitPieVectorTable();

EALLOW;
PieVectorTable.ADCA1_INT =&adca1_ISR;// ADCA中断1的函数
PieVectorTable.ADCB2_INT =&adcb1_isr;// ADCB中断1的函数
EDIS;

ConfigureADC();//同时配置两个ADC

配置EPWM();
配置EPWM2();


SetupADCEpwm(0);
SetupADCE2pwm (1);

IER || M_INT1;//启用组1中断
EINT;//启用全局中断INTM
ERTM;//启用全局实时中断DBGM

AdcaResults = 0;
AdcbResults =0;

缓冲器全轮= 0;

PieCtrlRegs.PIEIER1.bit.INTx1 = 1;

EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;


EPwm1Regs.ETSEL.bit.SOCAEN = 1;//启用SOCA
EPwm1Regs.TBCTL.bit.CTRMODE = 0;//unfreeze,并进入UP计数模式

EPwm2Regs.ETSEL.bit.SOCBEN = 1;//启用SOCB
EPwm2Regs.TBCTL.bit.CTRMODE = 0;//unfreeze,然后进入UP计数模式

while (!bufferFull);
bufferFull = 0;//清除缓冲区已满标志

EPwm1Regs.ETSEL.bit.SOCAEN = 0;//禁用SOCA
EPwm1Regs.TBCTL.bit.CTRMODE = 3;//冻结计数器

EPwm2Regs.ETSEL.bit.SOCBEN = 0;//禁用SOCB
EPwm2Regs.TBCTL.bit.CTRMODE = 3;//冻结计数器

}同时(1);
}
void配置ADC(void)

EALLOW;
AdcaRegs.ADCCTL2.bit.prescale =6;//将ADCCLK除法器设置为/4
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
DELAY _US (1000);


AdcbRegs.ADCCTL2.bit.prcale =6;//将ADCCLK除法器设置为/4
AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
ADcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
DELAY _US (1000);
EDIS;
}
void配置EPWM (void)

EALLOW;
//假定ePWM时钟已启用
EPwm1Regs.ETSEL.bit.SOCAEN = 0;//禁用组上的SOC
EPwm1Regs.ETSEL.bit.SOCASEL = 4;//在加电计数时选择SOC
EPwm1Regs.ETPS.bit.SOCAPRD = 1;//在第一个事件上生成脉冲
EPwm1Regs.CMPA.bit.CMPA = 0x0800;// set将值与2048个计数进行比较
EPwm1Regs.TBPRD = 0x1000;//将周期设置为4096个计数
EPwm1Regs.TBCTL.bit.CTRMODE = 3;//冻结计数器
EDIS;
}
作废配置EPWM2 (作废)

EALLOW;
//假定ePWM时钟已启用
EPwm2Regs.ETSEL.bit.SOCBEN = 0;//禁用组上的SOC
EPwm2Regs.ETSEL.bit.SOCBSEL = 4;//在加电计数时选择SOC
EPwm2Regs.ETPS.bit.SOCBPRD =1;//在第一个事件上生成脉冲
EPwm2Regs.CMPA.bit.CMPA = 0x0800;// set将值与2048个计数进行比较
EPwm2Regs.TBPRD = 0x1000;//将周期设置为4096个计数
EPwm2Regs.TBCTL.bit.CTRMODE = 3;//冻结计数器
EDIS;
}

void SetupADCEpwm (UINT16通道)

UINT16 acqps;

EALLOW;
AdcaRegs.ADCSOC0CTL.bit.CHSEL =通道;//SOC0将转换针A0
AdcaRegs.ADCSOC0CTL.bit.ACQPS = acqps;//样例窗口为100 SYSCLK周期
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5;// ePWM1 SOCA/C上的触发器
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0;//SOC0的结尾将设置INT1标志
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用INT1标志
AdcaRegs.ADCINTFLGCLL.bit.ADCINT1 =1;//确保INT1标志已清除
EDIS;
}

void SetupADCE2pwm (UINT16通道)

UINT16 acqps;

EALLOW;
ADcbRegs.ADCSOC1CTL.bit.CHSEL =通道;//SOC1将转换引脚A1
AdcbRegs.ADCSOC1CTL.bit.ACQPS = acqps;//样例窗口为100个SYSCLK周期
AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = 5;// ePWM1 SOCA/C上的触发器
AdcbRegs.ADCINTSEL1N2.bit.INT2SEL = 0;// SOC1结束将设置INT1标志
AdcbRegs.ADCINTSEL1N2.bit.INT2E =1;//启用INT2标志
ADcbRegs.ADCINTFLGCLL.bit.ADCINT2 =1;//确保清除INT2标志
EDIS;
}

// A0引脚中断

中断无效适配器1_ISR(void)

AdcaResults = AdcaResultRegs.ADCRESULT0;
ADcaRegs.ADCINTFLGCLL.bit.ADCINT1 = 1;//清除INT1标志
PieCtrlRegs.PIEACG.ALL = PIEACK_GROUP1;
}

// A1引脚中断
中断无效adcb1_isr (void)

AdcbResults = AdcbResultRegs.ADCRESULT0;
ADcbRegs.ADCINTFLGCLL.bit.ADCINT2 =1;//清除INT1标志
PieCtrlRegs.PIEACG.ALL = PIEACK_GROUP1;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Shiva,您好!

    这怎么不起作用? 您是否获得了样品,但其价值不是您所期望的? 样品是否在意外时间发生? 是否触发了样本,而不是ISR?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Devin,
    我没有得到任何输出。 存储输出值的变量始终为0。
    我正在使用连续样品进行测试,因此在意外时间不会出现样品问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Shiva,您好!

    如果在ADCA ISR中设置断点,是否会触发? ADCB ISR的情况如何?

    如果您将ADCA的所有工作引用更改为ADCB,而不是将ADCB添加到程序,会发生什么情况? 如果中断,您可能需要查看ISR的映射方式。 如果工作正常,您可能希望查看来自该ePWM的第二个ePWM和ADCB触发器的设置。