工具/软件:Linux
大家好、 我一直在尝试按照这个线程中关于改变 GPIO 中断优先级的指令: https://e2e.ti.com/support/arm/sitara_arm/f/791/t/523690
首先、我想读取 INTC_ILRm 寄存 器的当前值、我已尝试 devmem2和 omapconf 读取0x48200100、但我始终得到以下错误。
root:~#./omapconf 读取0x48200100
[6065.393717]未处理的故障:在 bb6e7d100处对非线性蚀刻(0x1018)执行外部中止
[6065.401448] PgD = dbb14000
[6065.404169][b6e7d100]* PgD=9dfc4831、* Pte=48200303、* ppte=48200a33
即使读取 INTC_REVISION 寄存器也会返回相同的结果。 因此我已经读取了其他线程、我知道在为未通电和未计时模块映射内存时会返回此错误。 我无法看到如何禁用 INTC 模块、因为 Linux 正在引导并运行正常。
因此、我还尝试从内核驱动程序 IRQ-OMAP-INTC 中读取 INTC 寄存器。 以下代码在引导期间编译和打印、但始终返回0。
静态 int __init omap_init_irq_of (struct device_node *节点)
{
内转台;
int i;
omap_irq_base = of _iomap (node、0);
if (warn_on (!omap_irq_BASE))
return -ENOMEM;
域= IRQ_DOMAIN_ADD_LINEAR (节点、OMAP-nR_IRQ、
&IRQ_general_chip_ops、NULL);
对于(i = 0;i < OMAP-nr_IRQ;i++)
{
PR_INFO ("INTC_ILR reg:0x%x val:0x%x\n"、(OMAP-IRQ_BASE +(INTC_ILR0 +(0x4 * I)))、INTC_READL (INTC_ILR0 + 0x4 * I));//96
}
READ_INTC_IRL_n ();
OMAP-IRQ_SOFT_RESET();
RET = OMAP_ALLOC_GC_of (域、OMAP_IRQ_BASE);
如果(RET < 0)
IRQ_DOMAIN_REMOVE (域);
回程;
}
那么、INTC 寄存器不可读是正常现象、还是 INTC 模块可能无法启用? 我无法看到 INTC 模块可能会被禁用、并且在 PRCM 中找不到 INTC 电源和时钟启用寄存器。
提前感谢您提供的任何帮助。