1

我试图为我的观察找到解释

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) 中的哪一个导致了异常/陷阱。

需要输入,这里有点困惑......

4

2 回答 2

1

它实际上相当简单。

(a) 我怀疑当 MMU 被禁用时,您无法获得数据中止。据我所知,数据中止是 MMU 的一个属性。在任何情况下,SCTRL 的位 0都会告诉您 MMU 是启用还是禁用。

(b) 和 (c) 使用DFSR ,您可以区分这些情况。如果在映射存在时出现数据中止,则很可能是权限错误。否则,它只是一个翻译错误。

于 2013-10-06T22:28:44.610 回答
1

PERIPHBASE 与该问题并不真正相关。

有两种基本类型的数据中止 (DABT):

  • 内部(由 MMU 生成)
  • 外部(由互连或从设备返回)

所以对于 (a),只有外部中止是可能的(MMU 只会在启用时触发中止)。

(b) 鉴于我们知道尝试访问给定地址处的外设的行为会导致中止,因此 MMU 开启且有效映射的中止很可能也是外部中止。但在这种情况下,任何一种都是可能的(即使映射有效,对齐检查也会产生内部中止)。

(c) 如果 MMU 开启并且映射无效,则不会进行外部访问 - 所以这将是内部中止。

正如 Jitesh 所指出的,数据故障状态寄存器 (DFSR) 可以为您提供有关故障的信息。故障状态字段将告知您访问如何失败,如果中止是外部的,ExT 位将告知您故障是由互连 (DECERR) 生成还是来自从设备 (SLVERR) 的错误响应。

于 2013-10-07T07:47:35.180 回答