在Raspberry Pi3上检测GPU中断需要采取什么步骤?

问题描述

我正在编写裸机内核,但是当emmC INTERRUPT寄存器变为非零时,似乎没有触发中断。

我有两个空闲的内核,一个处于EL3的内核,没有启用数据高速缓存,它会连续显示一页内存,以查看我正在测试的代码在做什么。 (测试代码会在有效的QA7毫秒中断中定期刷新其缓存。)

正在测试的代码正在内核0的Secure EL0上运行,并启用了中断。中断被路由到核心0:

QA7.GPU_interrupts_routing = 0; // IRQ and FIQ to Core 0

初始化emmC接口,并向卡发送复位命令,此时INTERRUPT寄存器变为1(位0置位:命令已完成),但是似乎没有信号向QA7硬件发出GPU中断(位核心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接口中断是IRQ basic pending寄存器中的数字62,位20。启用IRQ pending 2中的第30位,中断就会通过。

Enable_IRQs_2 = 0x42ff6800;

我只需要忽略以下建议:“上表中有许多空条目。不应启用这些条目,因为它们会干扰GPU操作。”在文档中。