请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:TMS320F2.8377万S 主题中讨论的其他部件:C2000WARE
您好,
我观察到一种奇怪的行为。 我的代码从RAM执行。 首次运行时,代码将在无效位置结束。 但是,之后每次都能完美地工作。 我最初认为它可能与初始化有关,但我已经达到了这样的地步:我可以通过评论/取消评论一行来复制行为:中断启用。即,我评论中断启用,编译,运行,代码行为正确。 我取消评论,第一次失败时,我重置它(使用CCS),它工作正常。 正如您在代码中所看到的,我特意从中断中删除了所有代码
下面是相关代码:
__interrupt void TimerInterrupt_vector(void){//void
for testing
}
void TimerInt_Init(void){
/*首先,禁用中断...*/
色调;
/*清除任何中断标志*/
_ASM ("和IER,#0");
_ASM ("和IFR,#0");
EALLOW();
PiVectorTable.Timer1_INT =&TimerInterrupT_vector;
EDIS ();
/*停止计时器*/
REG_CpuTimer1.tcr.bit.ts = 1U;
/*使用初始值和重置值*/设置定时器寄存器
REG_CpuTimer1.PRD.ALL = TIME_Period_40US;
/*由于时间太短,我们不需要预分频器*/
REG_CpuTimer1.TPR.bit.TDDR = 0;
REG_CpuTimer1.Thump.bit.TDDRH = 0;
/*重置计时器(将周期加载到计时器寄存器中)*/
REG_CpuTimer1.tcr.bit.trb = 1U;
/*启用中断*/
REG_CpuTimer1.tcr.bit.tie = 1U;
/*启动计时器*/
REG_CpuTimer1.tcr.bit.ts = 0U;
enable_t1_INT();
EINT();
ERTM();
}
我已经验证了您可能会期望的内容:矢量设置正确,位正确等。但是我注意到,我最终使用的无效地址以某种方式被推入堆栈(我在无效地址中使用断点验证了此情况,然后检查堆栈)。
我是否遗漏了一个配置位或一些可以解释这种奇怪行为的东西?