exception - aarch64 非安全组 1 中断未停用(但作为组 0 中断,ISR 运行正常)
问题描述
我正在 qemu-system-aarch64 上测试一个简单的裸机程序。我添加了一个简单的外围设备来生成中断,当我启用外围设备并给它一个命令时,它会生成中断。我分配了中断 ID 208。(SPI 196、208-32=196)。
当我将中断分配给组 0 时,它可以很好地处理两个中断。但是当我将中断分配给非安全组 1 时,停用从第一个中断开始不起作用。我只显示下面两种设置的区别。
要在 ISR 中获取中断 ID,在使用组 0 时,我使用mrs x0, s3_0_c12_c8_0(ICC_IAR0_EL1, interrupt ack register for group 0)
获取 ID,但在使用非安全组 1 时,我使用mrs x0, s3_0_c12_c12_0(ICC_IAR1_EL1, ack for group 1)
获取 INTID。这没问题,因为在这两种情况下我都得到了 ID 208 ok。
要将 IRQ 分配到一个组中,对于组 0 的情况,我将位“0”写入相应的 GICD_GROUPR 位,对于 NS-group1 的情况,我将位“1”写入 GICD_GROUPR 寄存器位。当然,组 0 和组 1 都在 ICC_IGRPEN1_EL3 寄存器中启用。(裸机程序在 EL3 中运行)
问题是停用。这对 NS-group1 不起作用:对于 0 组测试,我将 INTID 值写入 ICC_EOIR0_EL1(中断结束)寄存器,并将值写入 ICC_DIR_EL1(停用)寄存器。但是对于 NS-group1 的情况,我将 INTID 值写入 ICC_EOIR1_EL1 和 ICC_DIR_EL1。
我尝试了其他设置,但找不到它,但仍在尝试找到我错过的内容。如果有了解 aarch64 的人能给我一些建议,我将不胜感激。谢谢!
解决方案
推荐阅读
- python - 用 Python 登录 Instagram
- telerik - Telerik AJAX 无法上传文件
- javascript - 在一行中的项目之间放置空间
- unity3d - 通过 Unity 中的 Oculus 应用登录 Google 和 Facebook
- vue.js - Vue.js - 编辑 SessionStorage 数据
- c++ - 在自定义 .NET Core 主机中调用构造函数
- javascript - 在多维数组中搜索(算法)
- php - php json_encode 数组和对象数组
- java - 如何从非静态接口方法实现静态方法?
- java - 注册 GsonHttpMessageConverter 而不是 MappingJackson2HttpMessageConverter