gpt4 book ai didi

arm - 在 ARM cortex A-9 的 U-boot 中启用中断

转载 作者:行者123 更新时间:2023-12-05 00:30:50 25 4
gpt4 key购买 nike

我正在尝试在 uboot 中配置 GPIO 中断,这是为了在没有任何操作系统干预(裸机)的情况下测试中断响应时间。我能够配置引脚复用,并成功地使用 GPIO 引脚设置中断。

我的问题是关于中断服务程序的注册。我看到我的平台的中断向量表位于地址 0xFFFF0000(我阅读了系统控制寄存器以找出这一点)。 GPIO 的中断 ID 是 56,我只是计算了我的中断服务例程应该驻留的地址,然后尝试用指向我的 ISR 例程的指针写入地址。这是正确的做法吗?或者我必须自己处理所有其他事情,例如上下文保存等?

注意:我使用的是 ARM Cortex A-9。

编辑 :

根据我浏览代码的答案,我有以下问题。的定义

我的架构(arm v7)的 do_irq 没有做太多事情,CONFIG_USE_IRQ 对我不起作用,因为没有为我定义像 arch_interrupt_init 这样的函数。所以我可以得出结论,我的架构不支持中断。现在,如果我必须自己定义它,我需要实现哪些功能才能使其正常工作?由于这是我项目的一小部分,我想看看我是否可以做到这一点是否可行。我只想知道这是否需要几行代码或需要一些努力来实现这种中断支持。

最佳答案

ARM 将所有中断引导至地址 0xFFFF0018 (或 0x00000018)。这通常是一个无条件分支。然后代码将检查一些中断 Controller 硬件以确定编号 56 .通常,有一个例程来设置中断号的处理程序,因此您无需手动修补代码;此表取决于 u-boot执行中断处理。

在我的 u-boot sourcenote,中断表是这样的,

.globl _start
_start:
b reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
...
_irq:
.word irq

所以 _irq是安装中断处理例程的标签;它在同一个文件中执行一些汇编程序,然后调用 do_irq() , 基于 CONFIG_USE_IRQ .部分 API 位于 *lib_arm/interrupts.c* 中。一些 CPU 对于 S3C4510B,定义为处理程序 irq,例如 cpu/arm720t/interrupts.c。在这里你可以看到代码从这个 Controller 获取一个寄存器,然后分支到一个表。

所以默认情况下 u-boot似乎不支持中断。这并不奇怪,因为为了简单和速度,引导加载程序通常基于轮询。

注:我的 u-boot基于 2009.01-rc3。

关于arm - 在 ARM cortex A-9 的 U-boot 中启用中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15829601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com