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/TMS320C6745:Code Composer Studio™︎论坛

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/860508/ccs-tms320c6745-code-composer-studio-forum

器件型号:TMS320C6745

工具/软件:Code Composer Studio

您好!

我已经为 eCAP 中使用 APWM 生成中断编写了代码。 当 TSCTR 到达 APRD 时、代码应产生中断、然后在 ECFLG 寄存器的相应位上产生标志。 但是、发现即使在 ISR 子例程中清除了标志、APRD 的标志位也始终等于1。 我已执行以下代码。 有人能解决我的问题。

/*-------- 在 APWM 模式下使用 eCAP 模块生成中断--- *

#define UINT32 unsigned int;
#define TSCTR (uint32 *) 0x01F08000;
#define CTRPHS (uint32 *) 0x01F08004;
#define CAP1 (uint32 *) 0x01F08008;
#define CAP2 (uint32 *) 0x01F0800C;
#define CAP3 (uint32 *) 0x01F08010;
#define CAP4 (uint32 *) 0x01F08014;
#define ECCTL1 (uint32 *) 0x01F08028;
#define ECCTL2 (uint32 *) 0x01F0802A;
#define ECEINT (UINT32 *) 0x01F0802C;
#define ECFLG (UINT32 *) 0x01F0802E;
#define ECCLR (UINT32 *) 0x01F08030;
#define ECFRC (uint32 *) 0x01F08032;


void Init_APWM ();
void APWM_ISR();


void main()

uint32 * ECFLG;

init_apwm();//将 eCAP 初始化为 APWM 模式。
while (* ECFLG >> 1 & 1)  //检查天气标志位1或不检查天气标志位1。

APWM_ISR ();//中断服务例程。
/*调用 GPIO 引脚*/


空 Init_APWM (空)

uint32 *TSCTR、*CTRPHS、*CAP1、*CAP2、*CAP3、*CAP4、*ECCTL1、*ECCTL2、*ECEINT、*ECFLG、*ECCLR、*ECFRC;


* ECEINT = 0x0000;//禁用所有中断
* ECCLR = 0x00FF;//清除所有中断标志
* CTRPHS = 0x00000000;//将相位设置为零
* ECCTL1 = 0x0000;//禁用 ECCTL1
* ECCTL2 = 0x0000;//停止计数器并禁用 ECCTL2

/*配置外设寄存器*/
* ECCTL2 = 1 << 9;//设置 APWM 模式位.CAP_APWM
* ECCTL2 = 0 << 5;//在 bit.SYNCI_EN 中禁用 SYNC
* ECCTL2 = 1 << 7;//禁用同步输出位7位.SYNCO_SEL
* ECCTL2 = 1 << 6;//禁用 SYNC OUT 位6位.SYNCO_SEL。
* ECCTL2 = 0 << 10;//输出为高电平有效位。APWMPOL
* ECEINT = 1 << 6;//启用 int @ CTR=PRD 位。CTR_EQ_PRD
* CAP1 = 0x00010000;//加载周期寄存器
* CAP2 = 0x00010000;//加载比较寄存器
* ECCTL2 = 1 << 4;//开始计数器位。TSCTRSTOP

void APWM_ISR()

uint32 * ECCLR;

/*清除中断标志*/

* ECCLR = 1 << 6;//清除中断标志位.CTR_EQ_PRD
* ECCLR = 1 << 0;//清除所有 INT 中断标志 bit.INT


请参考以下手册、从第243-282页开始

http://www.ti.com/lit/ug/spruh91d/spruh91d.pdf