在uboot的运行状态下,如何响应外部硬件的中断?
如何在uboot的运行状态下(此时linux kernel还未运行),响应外部按键产生的gpio中断,使uboot重启或做其他工作?在linux kernel运行状态下我已实现此功能,只要调用request_irq()注册一个中断就行了。但在uboot里似乎没有这样的函数和机制,该怎样把gpio产生的中断和我自己定义的中断服务程序关联起来?我的uboot版本是1.1.4,系统是AR9130 SoC,MIPS 24K 32-bit cpu 400MHz。
联系信箱:wb51job@163.com。多谢!
在uboot的start.s文件中,关于中断向量表的代码是这样的:
#define RVECENT(f,n) \
b f; nop
#define XVECENT(f,bev) \
b f ; \
li k0,bev
.set noreorder
.globl _start
.text
_start:
RVECENT(reset,0) /* U-boot entry point */
RVECENT(reset,1) /* software reboot */
RVECENT(romReserved,2)
RVECENT(romReserved,3)
....
RVECENT(romReserved,63)
XVECENT(romExcHandle,0x200) /* bfc00200: R4000 tlbmiss vector */
RVECENT(romReserved,65)
RVECENT(romReserved,66)
....
RVECENT(romReserved,79)
XVECENT(romExcHandle,0x280) /* bfc00280: R4000 xtlbmiss vector */
RVECENT(romReserved,81)
....
RVECENT(romReserved,95)
XVECENT(romExcHandle,0x300) /* bfc00300: R4000 cache vector */
RVECENT(romReserved,97)
....
RVECENT(romReserved,111)
XVECENT(romExcHandle,0x380) /* bfc00380: R4000 general vector */
RVECENT(romReserved,113)
....
RVECENT(romReserved,127)
/* We hope there are no more reserved vectors!
* 128 * 8 == 1024 == 0x400
* so this is address R_VEC+0x400 == 0xbfc00400
*/
reset:
/*
* Clearing CP0 registers - WAR for the Linux hang issue
*/
mtc0 zero, $0
....
/* Exception handlers.
*/
romReserved:
b romReserved
romExcHandle:
b romExcHandle
我对上面定义的128个中断没看懂是怎么调用的。因为我手头资料不全,不知道gpio21脚对应哪个中断号,我尝试过把所有的RVECENT(romReserved, X) 都改成RVECENT(reset, X),结果都没一点反应。郁闷。
请高手帮忙分析一下!
联系信箱:wb51job@163.com。多谢!
在uboot的start.s文件中,关于中断向量表的代码是这样的:
#define RVECENT(f,n) \
b f; nop
#define XVECENT(f,bev) \
b f ; \
li k0,bev
.set noreorder
.globl _start
.text
_start:
RVECENT(reset,0) /* U-boot entry point */
RVECENT(reset,1) /* software reboot */
RVECENT(romReserved,2)
RVECENT(romReserved,3)
....
RVECENT(romReserved,63)
XVECENT(romExcHandle,0x200) /* bfc00200: R4000 tlbmiss vector */
RVECENT(romReserved,65)
RVECENT(romReserved,66)
....
RVECENT(romReserved,79)
XVECENT(romExcHandle,0x280) /* bfc00280: R4000 xtlbmiss vector */
RVECENT(romReserved,81)
....
RVECENT(romReserved,95)
XVECENT(romExcHandle,0x300) /* bfc00300: R4000 cache vector */
RVECENT(romReserved,97)
....
RVECENT(romReserved,111)
XVECENT(romExcHandle,0x380) /* bfc00380: R4000 general vector */
RVECENT(romReserved,113)
....
RVECENT(romReserved,127)
/* We hope there are no more reserved vectors!
* 128 * 8 == 1024 == 0x400
* so this is address R_VEC+0x400 == 0xbfc00400
*/
reset:
/*
* Clearing CP0 registers - WAR for the Linux hang issue
*/
mtc0 zero, $0
....
/* Exception handlers.
*/
romReserved:
b romReserved
romExcHandle:
b romExcHandle
我对上面定义的128个中断没看懂是怎么调用的。因为我手头资料不全,不知道gpio21脚对应哪个中断号,我尝试过把所有的RVECENT(romReserved, X) 都改成RVECENT(reset, X),结果都没一点反应。郁闷。
请高手帮忙分析一下!
...全文
相关推荐
Uboot中start.S源码的指令级的详尽解析
Uboot中start.S源码的指令级的详尽解析,分析start。s最详细的文档!
start.s的代码的详细分析
对uboot中的start.s代码分析的比较详细,看一遍基本能明白star.s 完成什么工作了
内核知识 kgdb pro smp uboot 电源管理 内存管理 内核模块 软中断 同步
内核知识 kgdb pro smp uboot 电源管理 内存管理 内核模块 软中断 同步 网络子系统 文件系统 系统调用 线程管理 中断管理
uboot启动代码的分析
bootloader认识和分析uboot启动代码
uboot定制按键中断启动:解决串口干扰导致的异常停止问题
本文针对嵌入式设备生产环境中,因串口电磁干扰导致U-Boot在`Hit any key to stop autoboot:`阶段异常停止的问题,提供了定制化解决方案。通过修改U-Boot源码,将中断按键从响应“任意键”改为仅响应特定的`固定按键`(如ESC键),从而有效屏蔽随机杂波干扰,确保设备稳定启动,提升产线良品率。


驱动开发/核心开发
