DSP

DSP的EALLOW和EDIS指令

2019-07-13 10:17发布

DSP的EALLOW和EDIS指令      在看DSP初始化程序的时候,经常会看到      void DisableDog(void)
     {
         EALLOW;
         SysCtrlRegs.WDCR= 0x0068;
         EDIS;
    }
EALLOW与EDIS究竟有什么含义呢?
在.h文件中会发现,这两条其实是汇编指令 #define  EALLOW asm(" EALLOW")
#define  EDIS   asm(" EDIS")

    原来TI的DSP为了提高安全性能,将很多关键寄存器作了保护处理。通过状态寄存器1(ST1)的位6设置与复位,来决定是否允许DSP指令对关键寄存器进行操作。这些关键寄存器包括:器件仿真寄存器、FLASH寄存器、CSM寄存器、PIE矢量表、系统控制寄存器、GPIOMux寄存器等等。     DSP由于在上电复位之后,状态寄存器基本上都是清零,而这样的状态下正是上述特殊寄存器禁止改写的状态。为了能够对这些特殊寄存器进行初始化,所以在对上述特殊寄存器进行改写之前,一定要执行汇编指令asm(“EALLOW”)或者宏定义EALLOW来设置状态寄存器1的C6位,在设置完寄存器之后,一定要注意执行汇编指令asm(“EDIS”)或者宏定义EDIS来清除状态寄存器1的C6位,来防止杂散代码或指针破坏寄存器内容