对DSP程序中常出现的EINT、DINT、ERTM、DRTM、EALLOW、EDIS的理解
在看DSP 的初始化程序中经常会看到
void DisableDog(void)
{
EALLOW;
SysCtrlRegs.WDCR= 0x0068;
EDIS;
}
EALLOW与EDIS究竟有什么含义呢?
在.h文件中会发现,这两条其实是汇编指令
#define EALLOW asm(" EALLOW")
#define EDIS asm(" EDIS")
同样的还有:
#define EINT asm(" clrc INTM") //INTM置0,开中断
#define DINT asm(" setc INTM") //INTM置1,关中断
#define ERTM asm(" clrc DBGM") //使能调试事件
#define DRTM asm(" setc DBGM") //禁止调试事件
解释:
TI系列DSP为了提高安全性能,将很多关键寄存器作了保护处理。通过状态寄存器1(ST1)的位6设置与复位,来决定是否允许DSP指令对关键寄存器进行操作。这些关键寄存器包括:器件仿真寄存器、FLASH寄存器、CSM寄存器、PIE矢量表、系统控制寄存器、GPIOMux寄存器等等。
DSP由于在上电复位之后,状态寄存器基本上都是清零,而这样的状态下正是上述特殊寄存器禁止改写的状态。为了能够对这些特殊寄存器进行初始化,所以在对上述特殊寄存器进行改写之前,一定要执行汇编指令asm(“EALLOW”)或者宏定义EALLOW来设置状态寄存器1的C6位,在设置完寄存器之后,一定要注意执行汇编指令asm(“EDIS”)或者宏定义EDIS来清除状态寄存器1的C6位,来防止杂散代码或指针破坏寄存器内容。
来源:CSDN
作者:Aslier
链接:https://blog.csdn.net/a419116194/article/details/103833593