我正试图找到我观察的解释
a)假设PERIPHBASE位于0x2c000000且MMU被禁用。如果访问地址0x21000000会有DABT吗? 我有一个DABT
b)假设启用了MMU转换,并且仅使用1G块(Lpae)创建1:1映射。因此存在0x2100000的1:1映射。再次访问它会产生DABT。
c)启用MMU但包含0-1G的条目1标记为无效。访问0x21000000再次提供DABT。
如果您正在编写异常/陷阱处理程序,您如何识别(a)(b)(c)中的哪一个导致异常/陷阱。
需要输入,这里有点困惑......
答案 0 :(得分:1)
实际上相当简单。
(a)我怀疑MMU被禁用时无法获得数据中止。据我所知,数据中止是MMU的一个属性。在任何情况下,SCTRL's bit 0都会告诉您MMU是启用还是禁用。
(b)和(c)使用DFSR,您可以区分这些情况。如果在映射存在时发生数据中止,则很可能是权限错误。否则,它只是一个翻译错误。
答案 1 :(得分:1)
PERIPHBASE与这个问题无关。
有两种基本类型的数据中止(DABT):
因此对于(a),只能进行外部中止(MMU只会在启用时触发中止)。
(b)鉴于我们知道尝试访问给定地址的外设的行为将导致中止,因此MMU上的中止和有效映射很可能也是外部中止。但在这种情况下,任何一种情况都是可能的(即使映射有效,对齐检查也可能产生内部中止)。
(c)如果MMU打开且映射无效,则不会进行外部访问 - 因此这将是内部中止。
正如Jitesh指出的那样,数据故障状态寄存器(DFSR)可以为您提供有关故障的信息。故障状态字段将通知您访问如何失败,如果中止是外部的,ExT位将通知您故障是由互连生成(DECERR)还是来自从设备(SLVERR)的错误响应。 / p>