您好!
我们需要保护多个位置免受 USR 模式写入的影响。 由于 MPU 只有有限的区域数量(以及有限的双电源配置)、并且操作系统本身已经占用了很多空间、因此我们希望尽可能地将这些空间用于应用代码和 RAM 保护、并在可能的情况下将其他保护机制用于"CPU 寄存器"。
我已经阅读了此主题(以及其他一些主题)和 TRM 第2.3.2.5章: https://e2e.ti.com/support/microcontrollers/hercules/f/312/p/347425/1216363
我知道我可以使用 PCR 模块中的寄存器来保护 PS 和 PCS 芯片选择。 这实际上涵盖了我们所有的常规外设需求、因为我们不需要 EMIF 和以太网保护、这还允许将某些外设保留在直接 USR 模式操作下(只需注意、某些寄存器可能默认受到 USR 写入保护)。
-此 PCR 保护始终触发数据中止、而不仅仅是像某些其他受保护寄存器那样(例如 DMA 寄存器或 SCIGCR0)忽略写入?
我从另一个线程中了解到、系统寄存器 PPC、PPSE 和 PPS (从0xFFF8 0000到0xFFFF FFFF)不能通过 PCR 进行类似保护-默认情况下、此区域中的寄存器通常对 USR 模式写入有限制、但并不是在所有寄存器中。
问题:只有保护该区域的选项是 MPU、但我仅采用1个区域、因为它的长度为0x80000 (2^19)
问题:如果此区域中没有 MPU "默认保护寄存器"、则忽略 USR 模式写入、不触发数据中止(未实现的地址不在范围内)?
由于 EMIF 和以太网超出了基于存储器映射的(我们的)范围、因此重要的一切都可以使用1个 MPU 区域和 PCR 进行保护、以防应用能够保护整个系统外设区域?
这是其他类似 RTI 寄存器可以在 USR 模式下写入的拼写错误或实际功能、而其他类似的不是:RTICPUC0 (TRM 13.3.7)与 RTICPUC1 (TRM 13.3.12)? 尝试对其进行测试、看起来它受到保护、所以它是拼写错误? 从文档中确定在设计应用中真正需要保护的内容时实际受保护的内容和不受保护的内容有点困难/不可能-使用 MPU 保护整个区域可能比尝试寻找未受保护的寄存器是否"无害"更容易、因为 RTICPUC0针对 示例不是"无害的"、需要在我们的应用中提供保护...
此外、无法找到任何地方、仅限 VIM RAM 写入权限、这取决于 TRM 假设不是但无法确定-尝试对其进行测试、看起来它忽略 USR 模式写入、以便对其进行保护? 只是出于好奇、TRM 中的说法是什么?
通过 MPU 或 PCR 违反访问的记录有所不同(基于 TRM 2.3.2.5说明如何使用这些字)、因此导致数据中止的目标地址需要从不同的寄存器中读取(还是"MRC P15、#0、r0、c6、c0、 #0"与 FAULT_ADDRESS_REG 相同? 如果相同、这些"MRC p16 C6"样式的运算如何映射到特定的外设地址空间?