在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 2440中斷向量的理解

            2440中斷向量的理解

            作者: 時間:2016-11-21 來源:網(wǎng)絡 收藏
            定時器中斷為例,我們作為用戶需要完成的任務:1定時器的初始化,各種寄存器賦值2使能中斷(cpsr和中斷控制器),然后將服務程序地址賦給pISR_TIMER1(為什么賦給它,后面討論)3當然是編寫具體的中斷服務程序。其他啟動代碼幫助我們完成了。程序執(zhí)行過程中,中斷發(fā)生了,我們看看處理器如何找到我們的服務程序的(這不是天然的,是經(jīng)過n道工序,沒有無緣無故的愛)。
            (1),中斷發(fā)生,arm跳到0x00000018執(zhí)行此處指令,這是硬件決定的。這里放置了一個跳轉(zhuǎn)指令:b HandlerIRQ ;handlerforIRQinterrupt
            (2)繼續(xù)找,HandlerFIQHANDLERHandleFIQ,這是什么呢,他是一個宏,我把它翻譯過來:
            HandlerFIQ
            sub sp,sp,#4 ;decrementsp(tostorejumpaddress)
            stmfd sp!,{r0} ;PUSHtheworkregistertostack(lrdoestpushbecauseitreturntooriginaladdress)
            ldrr0,=HandleFIQ;loadtheaddressofHandleXXXtor0
            ldrr0,[r0] ;loadthecontents(serviceroutinestartaddress)ofHandleXXX
            strr0,[sp,#4];storethecontents(ISR)ofHandleXXXtostack
            ldmfdsp!,{r0,pc};POPtheworkregisterandpc(jumptoISR)
            有興趣的可以看下,它最終將pc賦值HandleFIQ的值
            (3)那么HandleFIQ那里儲存了什么呢?arm在啟動時做了這樣的賦值
            ldr r0,=HandleIRQ
            ldr r1,=IsrIRQ
            str r1,[r0]
            可見現(xiàn)在(2)中pc值為IsrIRQ所代表的地址。
            (4)現(xiàn)在來到了IsrIRQ。詳細看下:
            IsrIRQ
            sub sp,sp,#4;reservedforPC
            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]
            ldmfd sp!,{r8-r9,pc}
            這段代碼,首先計算服務程序的地址,然后跳過去。但是INTOFFSET和HandleEINT0兩個東西然人費解。INTOFFSET寄存器的功能則很簡單,它的作用只是用于表明哪個中斷正在被處理。下面是該寄存器各位詳細功能列表

            HandleEINT0其實就是中斷是量表的首地址(區(qū)分于arm的異常向量表),而上面所說的pISR_TIMER1就是有中斷向量表得到的存放實際的中斷處理函數(shù)的地址
            #definepISR_TIMER1 (*(unsigned*)(_ISR_STARTADDRESS+0x4c))
            其實這個地址就應該是add r8,r8,r9,lsl#2中最終得到的r8。


            關鍵詞: 2440中斷向

            評論


            技術專區(qū)

            關閉