主题 : 关于qq2440裸奔中断问题!请教大虾们,急急! 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 22817
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2010-06-07
最后登录: 2011-10-13
楼主  发表于: 2010-06-08 12:37

 关于qq2440裸奔中断问题!请教大虾们,急急!

管理提醒: 本帖被 kasim 从 QQ2440技术交流专区 移动到本区(2010-06-08)
MIni2440 中断函数怎么和启动码中的中断联系起来的呢?望各位大虾不吝赐教!

以UART0接受中断为例:
INTOFFSET      EQU         0X4A000014 ;中断请求源偏移地
IntVTAddress      EQU          0x33ffff20 ;中断向量地址
HandleEINT0      EQU           IntVTAddress
........
HandleUART0      EQU         IntVTAddress +4*28
HandleSPI1         EQU         IntVTAddress +4*39
HandleRTC        EQU         IntVTAddress +4*30
HandleADC        EQU         IntVTAddress +4*31  

IRQ_Entry
                IF     IRQ_SETUP <>1
                sub    sp,sp,#4
                stmfd  sp!,{R8,R9}
                LDR    R9,=INTOFFSET
                LDR    R9,[R9]
                LDR    r8,=HandleEINT0
                ADD    r8,r8,r9,lsl #2 ;二级跳转表的首地址
        LDR    r8,[r8]
                STR    r8,[sp,#8] ;中断入口地址送进S P(第一个代码留出的4 字节空间)
        LDMFD  sp!,{r8-r9,pc}
                ENDIF
系统产生中断后跳到 Reset_Entry 运行。运行完这段代码,PC指向了HandleUART0
那在C文件中是不是只要写上 void HandleUART0 ()__IRQ;就可以了呢。程序就会跳到HandleUART0 ()函数运行了呢?
[ 此帖被ltjish在2010-06-08 13:49重新编辑 ]
级别: 新手上路
UID: 22817
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
综合积分: 10 分
注册时间: 2010-06-07
最后登录: 2011-10-13
1楼  发表于: 2010-06-08 13:27
在线等待中。。。。期待大虾的指教
级别: 侠客
UID: 4843
精华: 0
发帖: 102
金钱: 810 两
威望: 554 点
综合积分: 204 分
注册时间: 2009-03-31
最后登录: 2012-11-14
2楼  发表于: 2010-06-08 18:00
在汇编中要export  HandleUART0
然后可以在头文件中: extern int*  HandleUART0 ;
然后用  HandleUART0  = ISR_UART0;
其中,ISR_UART0为中断函数名称。