在 Raspberry Pi3 上检测 GPU 中断需要哪些步骤?
What steps are needed to detect a GPU interrupt on a Raspberry Pi3?
我正在写一个裸机内核,但是当 EMMC INTERRUPT 寄存器变为非零时似乎没有触发中断。
我有两个核心空闲,一个在 EL3 上,没有启用数据缓存,不断显示一页内存,以便查看我正在测试的代码。 (测试代码在工作 QA7 毫秒中断时定期刷新其缓存。)
正在测试的代码是 运行 在核心 0 上的 Secure EL0,启用了中断。中断路由到核心 0:
QA7.GPU_interrupts_routing = 0; // IRQ and FIQ to Core 0
初始化EMMC接口,并向卡发送重置命令,此时中断寄存器变为1(位0设置:命令已完成),但似乎没有向QA7硬件发出GPU中断信号(Core 0 中断源寄存器中的第 8 位保持为零)。
EMMC 寄存器 IRPT_MASK 和 IRPT_EN 都设置为 0x017f7137,我认为它应该启用来自该外设的所有已知中断,当然还有位 0。
BCM8235的中断寄存器是这样写的:
Enable_IRQs_1 = 0x20000000; // (1 << 29);
Enable_IRQs_2 = 0x02ff6800; // 0b00000010111111110110100000000000;
Enable_Basic_IRQs = 0x303;
但他们回读为:
Enable_IRQs_1: 0x20000200 // (1 << 9) also set
Enable_IRQs_2: 0x02ff6800 // unchanged
Enable_Basic_IRQs: 0x3 // No interrupts from IRQs 1 or 2.
我错过了什么?
(标记为 raspberry-pi2,因为它也有 QA7 组件。)
简单的答案仅此而已。 Arasan SD 接口中断编号为 62,IRQ basic pending
寄存器中的位 20。启用IRQ pending 2
中的第30位,中断通过。
Enable_IRQs_2 = 0x42ff6800;
我不得不忽略以下建议:“上面的 table 有很多空条目。不应启用这些条目,因为它们会干扰 GPU 操作。”在文档中。
我正在写一个裸机内核,但是当 EMMC INTERRUPT 寄存器变为非零时似乎没有触发中断。
我有两个核心空闲,一个在 EL3 上,没有启用数据缓存,不断显示一页内存,以便查看我正在测试的代码。 (测试代码在工作 QA7 毫秒中断时定期刷新其缓存。)
正在测试的代码是 运行 在核心 0 上的 Secure EL0,启用了中断。中断路由到核心 0:
QA7.GPU_interrupts_routing = 0; // IRQ and FIQ to Core 0
初始化EMMC接口,并向卡发送重置命令,此时中断寄存器变为1(位0设置:命令已完成),但似乎没有向QA7硬件发出GPU中断信号(Core 0 中断源寄存器中的第 8 位保持为零)。
EMMC 寄存器 IRPT_MASK 和 IRPT_EN 都设置为 0x017f7137,我认为它应该启用来自该外设的所有已知中断,当然还有位 0。
BCM8235的中断寄存器是这样写的:
Enable_IRQs_1 = 0x20000000; // (1 << 29);
Enable_IRQs_2 = 0x02ff6800; // 0b00000010111111110110100000000000;
Enable_Basic_IRQs = 0x303;
但他们回读为:
Enable_IRQs_1: 0x20000200 // (1 << 9) also set
Enable_IRQs_2: 0x02ff6800 // unchanged
Enable_Basic_IRQs: 0x3 // No interrupts from IRQs 1 or 2.
我错过了什么?
(标记为 raspberry-pi2,因为它也有 QA7 组件。)
简单的答案仅此而已。 Arasan SD 接口中断编号为 62,IRQ basic pending
寄存器中的位 20。启用IRQ pending 2
中的第30位,中断通过。
Enable_IRQs_2 = 0x42ff6800;
我不得不忽略以下建议:“上面的 table 有很多空条目。不应启用这些条目,因为它们会干扰 GPU 操作。”在文档中。