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/TMS320F280049:ECAP 使用问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/777517/ccs-tms320f280049-ecap-use-problems

器件型号:TMS320F280049

工具/软件:Code Composer Studio

您好;

我们使用的是280049的 ECAP 模块、我们创建了一个演示来测试。一些我们不理解的问题。

如下所 示的代码、ECAP4不能 捕获值使用 这个代码、ECAP1-3执行了。如果更改  InputXbarRegs:ECAP1使用 INPUT6、EAP2-4使用 INPUT3-5、则 ECAP1 不能 捕获值、EAP2-4 执行了。

它有什么问题?  

EALLOW;
InputXbarRegs.INPUT3SELECT = 13;
GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0;//启用 GPIO13上的上拉
GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 0;//同步到 SYSCLKOUT
ECap1Regs.ECCTL0.bit.INPUTSEL = 3;//选择 eCAP1至 INPU13

InputXbarRegs.INPUT4SELECT = 12;
GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0;//启用 GPIO12上的上拉
GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 0;//同步到 SYSCLKOUT
ECap2Regs.ECCTL0.bit.INPUTSEL = 4;//选择 eCAP2至 INPU12

InputXbarRegs.INPUT5SELECT = 13;
GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0;//启用 GPIO13上的上拉
GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 0;//同步到 SYSCLKOUT
ECap3Regs.ECCTL0.bit.INPUTSEL = 5;//选择 eCAP3至 INPU16

InputXbarRegs.INPUT6SELECT = 12;
GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0;//启用 GPIO12上的上拉
GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 0;//同步到 SYSCLKOUT
ECap4Regs.ECCTL0.bit.INPUTSEL = 6;//选择 eCAP4至 INPU12

//2.Init Regs .eCAP1-4
ECap1Regs.ECEINT.ALL = 0x0000;//禁用所有捕捉中断
ECap1Regs.ECCLR.ALL = 0xFFFF;//清除所有 CAP 中断标志
ECap1Regs.ECCTL1.bit.CAP1POL=0;  
ECap1Regs.ECCTL1.bit.CAP2POL=1;
ECap1Regs.ECCTL1.bit.CAP3POL=0;  
ECap1Regs.ECCTL1.bit.CAP4POL=1;
ECap1Regs.ECCTL1.bit.CTRST1 = 1;
ECap1Regs.ECCTL1.bit.CTRRST2 = 1;//差动操作
ECap1Regs.ECCTL1.bit.CTRST3 = 1;//差动操作
ECap1Regs.ECCTL1.bit.CTRRST4 = 1;//差动操作
ECap1Regs.ECCTL1.bit.CAPLDEN = 1;//启用捕捉单元
ECap1Regs.ECCTL1.bit.FREE_SOFT = 3;

ECap1Regs.ECCTL2.bit.CAP_APWM = 0;//ECAP;
ECap1Regs.ECCTL2.bit.SYNCI_EN = 0;//启用同步输入
ECap1Regs.ECCTL2.bit.SYNCO_SEL = 2;//直通
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;//起始计数器
ECap1Regs.ECCTL2.bit.rearm = 1;// ARM 单次触发
ECap1Regs.ECEINT.BIT.CEVT4 = 0;// 4个事件=中断
ECap1Regs.ECCTL2.bit.STOP_Wrap = 3;

ECap2Regs.ECEINT.ALL = 0x0000;//禁用所有捕捉中断
ECap2Regs.ECCLR.ALL = 0xFFFF;//清除所有 CAP 中断标志
ECap2Regs.ECCTL1.bit.CAP1POL=0;  
ECap2Regs.ECCTL1.bit.CAP2POL=1;  
ECap2Regs.ECCTL1.bit.CAP3POL=0;
ECap2Regs.ECCTL1.bit.CAP4POL=1;  
ECap2Regs.ECCTL1.bit.CTRST1 = 1;  
ECap2Regs.ECCTL1.bit.CTRRST2 = 1;//差动操作
ECap2Regs.ECCTL1.bit.CTRST3 = 1;//差动操作
ECap2Regs.ECCTL1.bit.CTRRST4 = 1;//差动操作
ECap2Regs.ECCTL1.bit.CAPLDEN = 1;//启用捕捉单元
ECap2Regs.ECCTL1.bit.FREE_SOFT = 3;

ECap2Regs.ECCTL2.bit.CAP_APWM = 0;//ECAP;
ECap2Regs.ECCTL2.bit.SYNCI_EN = 0;//启用同步输入
ECap2Regs.ECCTL2.bit.SYNCO_SEL = 2;//直通
ECap2Regs.ECCTL2.bit.TSCTRSTOP = 1;//开始计数器
ECap2Regs.ECCTL2.bit.rearm = 1;// ARM 单次触发
ECap2Regs.ECEINT.BIT.CEVT4 = 1;// 4个事件=中断
ECap2Regs.ECCTL2.bit.STOP_Wrap = 3;

ECap3Regs.ECEINT.ALL = 0x0000;//禁用所有捕捉中断
ECap3Regs.ECCLR.ALL = 0xFFFF;//清除所有 CAP 中断标志
ECap3Regs.ECCTL1.bit.CAP1POL=0;  
ECap3Regs.ECCTL1.bit.CAP2POL=1;  
ECap3Regs.ECCTL1.bit.CAP3POL=0;  
ECap3Regs.ECCTL1.bit.CAP4POL=1;  
ECap3Regs.ECCTL1.bit.CTRST1 = 1;  
ECap3Regs.ECCTL1.bit.CTRRST2 = 1;//差动操作
ECap3Regs.ECCTL1.bit.CTRST3 = 1;//差动操作
ECap3Regs.ECCTL1.bit.CTRRST4 = 1;//差动操作
ECap3Regs.ECCTL1.bit.CAPLDEN = 1;//启用捕捉单元
ECap3Regs.ECCTL1.bit.FREE_SOFT = 3;

ECap3Regs.ECCTL2.bit.CAP_APWM = 0;//ECAP;
ECap3Regs.ECCTL2.bit.SYNCI_EN = 0;//启用同步输入
ECap3Regs.ECCTL2.bit.SYNCO_SEL = 2;//直通
ECap3Regs.ECCTL2.bit.TSCTRSTOP = 1;//开始计数器
ECap3Regs.ECCTL2.bit.rearm = 1;// ARM 单次触发
ECap3Regs.ECEINT.BIT.CEVT4 = 1;// 4个事件=中断
ECap3Regs.ECCTL2.bit.STOP_Wrap = 3;

ECap4Regs.ECEINT.ALL = 0x0000;//禁用所有捕捉中断
ECap4Regs.ECCLR.ALL = 0xFFFF;//清除所有 CAP 中断标志
ECap4Regs.ECCTL1.bit.CAP1POL=0;  
ECap4Regs.ECCTL1.bit.CAP2POL=1;  
ECap4Regs.ECCTL1.bit.CAP3POL=0;  
ECap4Regs.ECCTL1.bit.CAP4POL = 1;
ECap4Regs.ECCTL1.bit.CTRST1 = 1;  
ECap4Regs.ECCTL1.bit.CTRRST2 = 1;//差动操作
ECap4Regs.ECCTL1.bit.CTRST3 = 1;//差动操作
ECap4Regs.ECCTL1.bit.CTRRST4 = 1;//差动操作
ECap4Regs.ECCTL1.bit.CAPLDEN = 1;//启用捕捉单元
ECap4Regs.ECCTL1.bit.FREE_SOFT = 3;

ECap4Regs.ECCTL2.bit.CAP_APWM = 0;//ECAP;
ECap4Regs.ECCTL2.bit.SYNCI_EN = 0;//启用同步输入
ECap4Regs.ECCTL2.bit.SYNCO_SEL = 2;//直通
ECap4Regs.ECCTL2.bit.TSCTRSTOP = 1;//开始计数器
ECap4Regs.ECCTL2.bit.rearm = 1;// ARM 单次触发
ECap4Regs.ECEINT.BIT.CEVT4 = 1;// 4个事件=中断
ECap4Regs.ECCTL2.bit.STOP_Wrap = 3;

EDIS;

谢谢!

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

    输入 XBAR 的问题是您面临的吗?

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

    为什么 ECAP4无法通过执行上述代码来捕获数据? 配置是否有问题?

    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否仍然遇到此问题的问题? 使用输入6 ECAP 时不应出现任何问题。 我能够导入\driverlib\f28004x\examples\ECAP_ex2_capture_PWM 示例、并将其更改为使用输入6、而不会出现任何问题。 你试过这个吗?

    您能否检查 CCS 中的寄存器窗口以确认您没有代码意外覆盖输入6的配置?

    惠特尼