在DSP中,为了防止重要寄存器被误写入,设置EALLOW保护。EALLOW 和 EDIS 配套使用,分表表示写入申请(Edit allow)和禁止写入(Edit disable)。举例:
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.WAKEINT = &wakeint_isr;
EDIS; // This is needed to disable write to EALLOW protected registers
这是将中断服务程序地址写入到中断向量表中。由于中断向量表受到了保护,所以,在写入之前需要进行写入申请,写完之后要禁止写入,保护寄存器。
EALLOW保护主要是针对DSP存储空间外设帧(Peripheral Frame)而言的。关于外设帧的更多信息,可以参考博客(F28335第四篇——存储器及CMD文件)。外设帧又简称PF。在DSP中,外设帧总共分成四个区域,为PF0-PF3。其中,PF1-PF3中所有寄存器都受到EALLOW保护,而在PF0中有些寄存器是不受EALLOW保护的。换言之,所有不受保护的寄存器都在PF0中,他们分别为:
- ADC寄存器
- XINTF寄存器(存疑。。。)
- 计时器0/1/2
- PIE寄存器
附上TI官方说明:
更新
由于上文中引用的TI官方文档比较老旧,所以有些数据并不相同,下面给出最新的官方文档中的说明。
不受保护的寄存器只有三个,如下:
- ADC寄存器
- 计时器0/1/2
- PIE寄存器
更新2
通过阅读官方文档,我发现之前的书本上的说法是错误的。PF1-PF3并非所有寄存器都受到EALLOW保护。总结所有不受保护的寄存器如下:
- PF0
- ADC寄存器
- 计时器0/1/2
- PIE寄存器
- PF1
- 部分eCAN寄存器
- eCANB Mailbox RAM
- eCAP 寄存器
- GPIO Data 寄存器
- PF2
- SPI 寄存器
- SCI 寄存器
- ADC寄存器
- 外部中断寄存器
- I2C寄存器
- PF3
- McBSP寄存器
EALLOW保护就是禁止CPU对于DSP寄存器的写操作,如下表
EALLOW位 | CPU写操作 | CPU读操作 | JTAG写操作 | JTAG读操作 |
---|---|---|---|---|
0 | 禁止 | 允许 | 允许 | 允许 |
1 | 允许 | 允许 | 允许 | 允许 |
使用保护的寄存器包括:
- 器件仿真寄存器
- Flash寄存器
- CSM寄存器
- PIE向量寄存器
- DMA寄存器
- 系统控制寄存器
- GPIO控制寄存器(包括GPIO中断寄存器)
- 部分eCAN寄存器
- Xintf寄存器
- ePWM寄存器
注意:
以上是参考TI官方文档TMS320x2833x, 2823x System Control and Interrupts Reference Guide(2010年3月)。但是,官方文档自身也有矛盾的地方。例如:XINTF寄存器,DMA寄存器等。下面附上所有文档内容,如有纰漏,敬请批评,谢谢!