主题中讨论的其他器件:C2000WARE、
工具与软件:
尊敬的所有人:
我的 MCU 恰好进入 ILLEGAL_ISR。
数千种使用相同代码的产品已经投入运行多年。 当前有一个产品(MCU)触发 ILLEAGAL ISR。
我无法在工厂中重现此现象。
我检查 TI 文档中 ILLEGAL_ISR 的触发条件、
关于触发条件"32位操作尝试使用[@SP]寄存器寻址模式"。
我不知道我是否违反了这个。
以下是ST1的设置值(我在调用 c_int00 ()后在 CCS 中读取该寄存器、所有代码都用 C 语言写入):
MOM1MAP = 1、OBJMODE = 1、AMODE = 0、PAGE0 = 0
DSP2833x_CodeStartBranch.asm 中的代码 如下所示(在"LB _c_start"之后、所有代码都用 C 语言编写):
WD_DISABLE .set 1
.ref _c_int00
.global code_start
.ref _c_start
_stack:.usect ".stack"、0
香港特别行政区政府在香港特别行政区的工作
*函数: codestart 段
*
*说明:分支到代码起点
香港特别行政区政府在香港特别行政区的工作
.sect "codestart"
CODE_START:
.if WD_DISABLE == 1.
LB wd_disable;Branch to watchdog disable code
.else
LB _c_int00;Branch to start of boot.asm in RTS library (分支到 RTS 库中的 boot.asm 的起始位置)
.endif
;结束 codestart 段
香港特别行政区政府在香港特别行政区的工作
*函数: wd_disable
*
*说明:禁用看门狗定时器
香港特别行政区政府在香港特别行政区的工作
.if WD_DISABLE == 1.
;.text
.sect "ROM1"
WD_DISABLE:
SETC OBJMODE ;为28x 目标代码设置 OBJMODE
EALLOW ;Enable EALLOW protected register access (启用 EALLOW 保护寄存器访问)
MOVZ DP、#7029h>>6. ;设置 WDCR 寄存器的数据页
MOV @7029h、#0068h ;设置 WDCR 中的 WDDIS 位以禁用 WD
EDIS ;禁用 EALLOW 受保护的寄存器访问
MOV SP、##_stack ;设置为栈空间的开头
SPM 0 ;将产品移位设置为0
C28OBJ ;选择 C28x 对象模式
C28ADDR ;清除寻址模式
C28MAP ;设置块 M0和 M1模式
CLRC PAGE0 ;使用堆栈寻址模式
MOVW DP、#0 ;初始化 DP 以指向低64K
CLRC OVM ;关闭溢出模式
asp ;确保 SP 已对齐
LB _c_start
.endif
;结束 wd_disable
.end
谢谢