【原创】TI C2833x介绍---系统的初始化(13)
0赞EALLOW和EDIS我们在前面用到的时候也曾经提到过,不过不是专门描述的所以不是很具体。这次有时间了专门把它们总结一下。EALLOW就是Emulation Allow的缩写,即仿真器存取允许;在使用EALLOW指令的情况下(令CPU状态寄存器ST1里面的EALLOW = 1),可以使用仿真器通过JTAG协议访问被保护的那些关键寄存器(被保护是为了防止意外或错误的写操作);EDIS是与EALLOW成对使用的,它自然就是Emulation Disable的缩写,即禁止仿真器对关键寄存器的操作。EALLO是CPU状态寄存器ST1的一个个位(bit6),EALLOW与EDIS这对组合又是C28x汇编指令集中的两条指令,EALLOW置位ST1寄存器的相应位,EDIS则清零ST1寄存器的相应位,在C语言编程中插入汇编指令的时候,可以用下面的语句:
asm(" EALLOW"); //CSMSCR register is EALLOW protected.
*CSMSCR = 0x8000;
asm("EDIS");
我们在看TI的头文件与外设库的时候,看到C程序中的EALLOW与EDIS都是直接使用的,例如:
EALLOW;
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
……
EDIS;
是因为已经在”DSP2833x_Device.h”头文件中预定义了:
#define EALLOW asm(" EALLOW")
#define EDIS asm(" EDIS")
被EALLOW访问保护的寄存器有以下几类:
- Device Emulation
- Flash
- Code Security Module
- PIE Vector Table
- DMA (most registers)
- eCANA/B (control registers only; mailbox RAM not protected)
- ePWM1 - 6 (some registers)
- GPIO (control registers only)
- System Control
在配置EALLOW与不置位的情况下,存取上述几类被保护的寄存器的结果是:
EALLOW位 |
CPU写 |
CPU读 |
JTAG写 |
JTAG读 |
0 |
忽略 |
允许 |
允许 |
允许 |
1 |
允许 |
允许 |
允许 |
允许 |
可以看出,在使用CCS通过JTAG调试的时候,在CCS里面通过watch window或者其它方式直接修改被保护的寄存器,是具有很高的权限的。