DSP的EALLOW保护在<TMS320F28002X_Technical Reference Manual>是这样子描述的: //start 系统中的一些寄存器通过EALLOW保护机制来防止出现虚假的CPU写操作。它使用特殊的CPU指令EALLOW和EDIS来启用和禁用对受保护寄存器的访问。当前保护状态由CPU ST1寄存器中的EALLOW位给出,如表3-1所示。
寄存器保护在启动时默认启用。当受保护时,CPU对受保护寄存器的所有写操作都被忽略。只允许CPU读、JTAG读和JTAG写。如果通过执行EALLOW指令禁用了保护,则允许CPU自由地写入受保护的寄存器。在修改寄存器之后,可以通过执行EDIS指令清除EALLOW位来再次保护它们。
对时钟配置和外围时钟启用寄存器的写入可能会被禁用,直到下一次通过写入特殊锁寄存器进行重置。
表3 - 1.访问受EALLOW保护的寄存器 (1) EALLOW位通过JTAG端口被覆盖,允许在调试期间从Code Composer Studio接口完全访问受保护的寄存器。 //stop
CPU ST1寄存器中的EALLOW位的描述
EALLOW (位6) -仿真访问启用位。 当设置此位时,允许访问仿真和其他受保护的寄存器。使用EALLOW指令设置该位,使用EDIS指令清除该位。请参阅特定设备的数据表,以确定受保护的寄存器。 当CPU服务中断时,将当前的EALLOW值保存在堆栈上(当ST1保存在堆栈上时),然后清除EALLOW。因此,在中断服务程序(ISR)开始时,禁止访问受保护的寄存器。如果ISR必须访问受保护的寄存器,它必须包含一个EALLOW指令。在ISR结束时,可以通过IRET指令恢复EALLOW。
受保护的寄存器,可以查看下表的Pipeline Protected项 EALLOW和EDIS常常成对出现,例如:
static inline void
ADC_configOSDetectMode(uint32_t base, ADC_OSDetectMode modeVal)
{
EALLOW;
HWREGH(base + ADC_O_OSDETECT) = ((HWREGH(base + ADC_O_OSDETECT) &
(~ADC_OSDETECT_DETECTCFG_M)) | modeVal);
EDIS;
}
|