電子工程網(wǎng)

標題: [飛凌]S3C2440中斷處理流程 [打印本頁(yè)]

作者: yanhong    時(shí)間: 2010-7-13 14:50
標題: [飛凌]S3C2440中斷處理流程
本文轉引自 飛凌嵌入式 S3C2440 技術(shù)討論區 www.witech.com.cn
粗略寫(xiě)了一下S3C2440的中斷處理流程(以飛凌2440開(kāi)發(fā)板所用bootloader代碼為例),給初學(xué)者看的,希望大家多多討論,不斷改進(jìn),使其最終成為一份完善的教程!
首先定義向量表堆棧  bootloader中取0x33ffff00
        ^   _ISR_STARTADDRESS                ; _ISR_STARTADDRESS=0x33FF_FF00
HandleReset                 #   4
HandleUndef                 #   4
HandleSWI                   #   4
HandlePabort                #   4
HandleDabort                #   4
HandleReserved              #   4
HandleIRQ                   #   4
HandleFIQ                   #   4
IRQ堆棧地址為0x33ffff18,這里放中斷處理函數的入口地址。
ldr        r0,=HandleIRQ       ;This routine is needed
ldr        r1,=IsrIRQ          ;IsrIRQ就是中斷處理函數的入口地址
str        r1,[r0]
中斷發(fā)生后程序自動(dòng)從該處取值并跳轉
b        HandlerIRQ        ;handler for IRQ interrupt
HandlerIRQ      HANDLER HandleIRQ
這里跳轉到了IsrIRQ
IsrIRQ
        sub        sp,sp,#4       ;sp-4,預留給pc。
        stmfd        sp!,{r8-r9}        ;保護r8 r9  一會(huì )兒要用。這里沒(méi)有保持r14。
        ldr        r9,=INTOFFSET        
        ldr        r9,[r9]                ;獲得中斷號
        ldr        r8,=HandleEINT0        ;
        add        r8,r8,r9,lsl #2        ;通過(guò)中斷偏移值計算中斷源
        ldr        r8,[r8]                ;取出相應中斷處理函數的入口地址值
        str        r8,[sp,#8]        ;將其存在sp+8處,即剛才預留給pc的堆棧
        ldmfd        sp!,{r8-r9,pc}        ;還原r8 r9并跳轉到中斷處理函數
中斷函數處理完后會(huì )從r14取值返回
作者: yanhong    時(shí)間: 2010-7-28 17:12
飛凌嵌入式 S3C2440 技術(shù)討論區 www.witech.com.cn




歡迎光臨 電子工程網(wǎng) (http://selenalain.com/) Powered by Discuz! X3.4
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页