免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
44B0 中斷分析(一)

44B0 中斷分析(一)

        首先 ARM 芯片要中斷設(shè)置要是能中斷向量,然后當(dāng)有 IRQ 中斷來之后,CPU自動(dòng)的到0x18地址處取指。0x18處的指令呢是CPU 根據(jù)中斷源算好的(比如:中斷 EINT4567 來了,那么 0x18 處的指令就是跳轉(zhuǎn)到地址 0x30 處)。然后就執(zhí)行“ldr  pc,=HandlerEINT4567”這條指令。這條指令的執(zhí)行結(jié)果就是跳轉(zhuǎn)到 “HandlerEINT4567 HANDLER HandleEINT4567”處執(zhí)行。這條是宏指令,你可以看一下宏定義。執(zhí)行結(jié)果就是跳轉(zhuǎn)到HandleEINT4567 處執(zhí)行。

        那么 HandleEINT4567 處又是什么指令呢?這就要聯(lián)系 44b.h 文件的#define pISR_EINT4567  (*(unsigned  *)(_ISR_STARTADDRESS+0x74)) 定 義 看 了。
       HandleEINT4567 處的地址就是“_ISR_STARTADDRESS+0x74”。到此還不知道這個(gè)地址對應(yīng)的指令是什么。 這時(shí)候就要去看Target.c文件的中斷初始化了,其中pISR_EINT4567= (unsigned) OSEINT4567ISR;這條語句就解釋了中斷去向何處。  OSEINT4567ISR 就是在OS_CPU_A.s 里面定義的中斷處理程序了。

一、 關(guān)于44B0中斷系統(tǒng)

   44B0 中斷系統(tǒng)中有兩張中斷轉(zhuǎn)移表,經(jīng)過二重轉(zhuǎn)移才跳到中斷處理程序。第一張中斷向量表由硬件決定,所在區(qū)域?yàn)镽OM(flash),地址空間從0X00開始,其中0X00-0X1C為異常向量入口地址,0X20-0XC0為中斷向量入口地址。另一張中斷向量表在RAM 中,可以隨便改,其位置在程序連接后才定。

二、 如何從第一張中斷向量表跳到第二張中斷向量表

    由于 RAM 放在地址空間的高端(距離中斷向量超過了 32M),故在第一張中斷向量表對應(yīng)位置上寫上 
   ldr PC,# interrupt_service 
如:ldr PC,=HandlerEINT4567 

三、如何在啟動(dòng)程序中設(shè)置異常向量,中斷向量表

     如何把 C 語言中的一個(gè)中斷函數(shù)對應(yīng)到匯編的中斷向量表中,示意圖及舉例如下:
#define _ISR_STARTADDRESS   0xc7fff00     //GCS6:16M bit DRAM/SDRAM 
#define pISR_EINT4567 (*(unsigned *)(_ISR_STARTADDRESS+0x74)) 
.macro HANDLER HandleLabel 
sub      sp, sp, #4     
stmfd   sp!, {r0}      
ldr      r0,=\HandleLabel 
ldr      r0, [r0]      
str      r0, [sp,# 4]     
ldmfd   sp!, {r0,pc}      
.endm 
.text 
ENTRY: 
    b ResetHandler  ……
VECTOR_BRANCH: 
   ldr pc,=HandlerEINT0  ……   
   ldr pc,=HandlerEINT4567      /* 0x30  */   
HandlerEINT4567:HANDLER HandleEINT4567 
.equ HandleEINT4567, _ISR_STARTADDRESS+4*29 
   

   把C語言中的一個(gè)中斷函數(shù)對應(yīng)到匯編的中斷向量表中 
   pISR_EINT4567 = (int)Eint4567Isr;  
其實(shí)異常向量就是中斷向量,ARM7的內(nèi)核實(shí)際上只有8個(gè)(1個(gè)保留)異常向量,對于眾多的中斷源,ARM7 的內(nèi)核是通過 IRQ、FRQ 的軟件查詢中斷狀態(tài)寄存器的位來獲得ISR的起始地址。而44B0為了克服這種方式所帶來的中斷延遲,就加入了更多的中斷向量表(0x20到0xc0),要使用這種方式,必須在中斷控制寄存器中設(shè)置每個(gè)中斷源的方式為IRQ 方式,且使用向量中斷。 
     S3C44B0X 的中斷控制器有 30 個(gè)中斷源。S3C44B0X 支持新的中斷處理模式稱為(vectored interrupt mode),在多個(gè)中段請求發(fā)生時(shí),由硬件優(yōu)先級邏輯確定應(yīng)該有哪個(gè)中斷得到服務(wù),同時(shí)硬件邏輯使中斷相量表的跳轉(zhuǎn)指令加載到(0X18或0X1C)位置,在該位置執(zhí)行跳轉(zhuǎn)指令使程序跳到相應(yīng)的中斷服務(wù)線程,因此相對與傳統(tǒng)的ARM 的軟件方法能夠大大減少中斷進(jìn)入延時(shí)。有兩種類型的中斷模式,F(xiàn)IQ  (快速中斷)和IRQ.所有的中斷源在中斷請求時(shí)應(yīng)該確定使用的中斷模式。在網(wǎng)絡(luò)上廣為流傳的44b0開發(fā)板例程中,大部分使用的都是IRQ 中斷模式(請查閱寄存器rINTCON)。
     一般來講,使用 44b0 開 發(fā)板進(jìn)行調(diào)試時(shí), 無需更改44b.h,44blib.h,def.h,option.h,44binit.s,44blib.c,44blib_a.s,memcfg.s,option.s 等程序,甚至無需看懂,即可編程使用 44b0 開發(fā)板。如前所述,硬件邏輯使中斷向量表的跳轉(zhuǎn)指令加載到(0X18 或 0X1C)位置,在該位置執(zhí)行跳轉(zhuǎn)指令使程序跳到相應(yīng)的中斷服務(wù)線程,用戶只需定義相應(yīng)的中斷服務(wù)程序即可。中斷向量表的定義如下
(節(jié)選,請看44b.h)
/* ISR */
#define pISR_RESET (*(unsigned *)(_ISR_STARTADDRESS+0x0))
#define pISR_UNDEF (*(unsigned *)(_ISR_STARTADDRESS+0x4))
#define pISR_SWI (*(unsigned *)(_ISR_STARTADDRESS+0x8))
#define pISR_PABORT (*(unsigned *)(_ISR_STARTADDRESS+0xc))
#define pISR_DABORT (*(unsigned *)(_ISR_STARTADDRESS+0x10))
#define pISR_RESERVED (*(unsigned *)(_ISR_STARTADDRESS+0x14))
#define pISR_IRQ (*(unsigned *)(_ISR_STARTADDRESS+0x18))
#define pISR_FIQ (*(unsigned *)(_ISR_STARTADDRESS+0x1c))

void __irq Mycat(void);;;
顯然,至此可以基本理解 44b0 的中斷,是如何與程序中的中斷服務(wù)子程序聯(lián)系起來的了。中斷的硬件邏輯,將檢測到的中斷,以某種方式指向中斷服務(wù)程序的地址,該地址在頭文件中以宏定義的形式出現(xiàn)。用戶在自己的程序中,將中斷服務(wù)子程序的地址付給該指針,從而將其聯(lián)系起來。
      ARM7TDMI 在矢量模式下,當(dāng)從 0X18 地址處取指令時(shí)候,中斷控制器會在數(shù)據(jù)總線上加載分支指令,這些分支指令使程序計(jì)數(shù)器能夠?qū)?yīng)到每一個(gè)中斷源的向量地址。這些跳轉(zhuǎn)到每一個(gè)中斷源向量地址的分支指令由中斷控制器產(chǎn)生。
     例如:假設(shè) EINT0 是 IRQ 中斷,EINT0 的向量地址為:0X20(見向量表),那么中斷控制器必須產(chǎn)生0X18---0X20的分支指令。 中斷控制器產(chǎn)生的機(jī)器碼為: 0XEA000000。在各個(gè)中斷源對應(yīng)的中斷向量地址中,存放著跳轉(zhuǎn)到相應(yīng)中斷服務(wù)程序的程序代碼。在相應(yīng)向量地址處分支指令的機(jī)器代碼如下計(jì)算:

矢量中斷模式的機(jī)器指令代碼=0XEA000000+((<目標(biāo)地址>-<向量地址>-0X8)>>2)

     機(jī)器代碼一般由反匯編后自動(dòng)產(chǎn)生。
     結(jié)合這些,再看看程序中的代碼。在無矢量中斷模式,通過分析IISPR/FISPR 寄存器,IRQ/FIQ 處理器將移動(dòng)PC到相應(yīng)的ISR。HandleXXX 地址包含每個(gè)響應(yīng)的ISR程序的起始地址。(見 44binit.S 文件) 編譯器它自動(dòng)有設(shè)置的(初始化的偽編譯宏),
|Image$$RO$$Limit|:表示RO 區(qū)末地址后面的地址,即RW數(shù)據(jù)源的起始地址
|Image$$RW$$Base|:RW 區(qū)在 RAM 里的執(zhí)行區(qū)起始地址,也就是編譯器選項(xiàng)
RW_Base指定的地址
|Image$$ZI$$Base|:ZI 區(qū)在RAM 里面的起始地址
|Image$$ZI$$Limit|:ZI 區(qū)在RAM 里面的結(jié)束地址后面的一個(gè)地址
程序先把 ROM 里|Image$$RO$$Limt|開始的 RW 初始數(shù)據(jù)拷貝到 RAM 里面|Image$$RW$$Base|開始的地址,當(dāng)RAM這邊的目標(biāo)地址到達(dá)|Image$$ZI$$Base|后就表示RW區(qū)的結(jié)束和ZI區(qū)的開始,接下去就對這片ZI區(qū)進(jìn)行清零操作,直到遇到結(jié)束地址|Image$$ZI$$Limit|。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
三星S3C2440 ARM-920T 中斷向量宏義
中斷體系結(jié)構(gòu)
s3c2440外部中斷操作
S3C44B0的向量中斷模式概念
U-Boot系列之一: S3C2410內(nèi)存映射結(jié)構(gòu)
S5PV210中斷體系
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服