DSP程序中常出现的EINT、DINT、ERTM、DRTM、EALLOW、EDIS的理解

风格不统一 提交于 2020-01-25 10:06:48

对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位,来防止杂散代码或指针破坏寄存器内容。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!