Board logo

标题: 在uboot的运行状态下,如何响应外部硬件的中断? [打印本页]

作者: wbybyb    时间: 2008-1-28 10:43     标题: 在uboot的运行状态下,如何响应外部硬件的中断?

如何在uboot的运行状态下(此时linux kernel还未运行),响应外部按键产生的gpio中断,使uboot重启或做其他工作?在linux kernel运行状态下我已实现此功能,只要调用request_irq()注册一个中断就行了。但在uboot里似乎没有这样的函数和机制,该怎样把gpio产生的中断和我自己定义的中断服务程序关联起来?
我修改过start.S文件,通过RVECENT(romReserved,xx)注册中断服务程序,但我把所有的romReserved改成reset作过尝试,结果没一点反应。
我的uboot版本是1.1.4,系统是AR9130 SoC,MIPS 24K 32-bit cpu 400MHz。
联系信箱:wb51job@163.com。多谢!

作者: wbybyb    时间: 2008-1-29 14:43

再补充一点。在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个中断没看懂是怎么调用的。而且,我尝试过把所有的RVECENT(romReserved, X) 都改成RVECENT(reset, X),结果都没一点反应。

请高手指点!






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0