欧美成人aaaaa免费视频_亚洲欧美激情小说另类_欧美激情一区二区三区视频_一级在线|欧洲

技術頻道

44b啟動代碼詳解


S3C44B0的IRQ向量中斷模式和非向量中斷模式的概念:


注:arm7的工作模式是arm7的這個內核提供的,而廠商在生產時,在arm7這個內核的基礎上,外擴了各種中斷及其相關的中斷控制器,而這些中斷發生一般會進入IRQ模式,這點很好理解。

(1)向量中斷模式(IRQ支持,FIQ不支持)
當系統發生IRQ中斷時候,cpu的PC會讀取位于0x18處的IRQ中斷指令(也就是說跳到地址0x18處去執行指令),然后CPU自動讀取對應于該中斷源確定地址上的指令取代0x18處的指令(這個過程是由系統自動完成的,不需要用戶編程),通過跳轉指令,系統就直接跳轉到對應地址,這樣節省了中斷處理時間,提高中斷處理速度。——通俗點說,如果采用了向量中斷模式,一旦發生中斷,CPU就會跳到相應的地址來執行指令。例如ADC中斷的向量地址為0xC0,一旦發生ADC中斷,PC就先跳到了地址0x18再跳到0xC0上來執行命令,但對于用戶來說,就跟一發生中斷就直接跳到了0xC0上沒有區別,這個先跳到0x18的過程可以忽略不計,由系統自動完成。如果在0xC0處放如下代碼: ldr PC , =HandlerADC ,當ADC中斷產生的時候系統會自動跳轉到HandlerADC函數中。

(2)非向量中斷模式

這種模式處理方式是一種傳統的中斷處理方法,當系統產生中斷的時候,系統將interrupt pending寄存器中對應標志位置位(當然向量中斷模式也有這步發生),然后跳轉到地址0x18處。用戶需要在地址0x18處寫一個統一中斷函數,該函數通過讀取interrupt pending寄存器中對應標志位,來判斷中斷源,并根據優先級關系再跳到對應中斷源的處理代碼中。

二、向量中斷模式的啟動代碼分析及編程。

1、中斷向量模式中,具體實現如下:

中斷服務入口地址處,寫入一個調用宏的指令(類似于子程序),這個宏是一個“加載程序”,把中斷服務的首地址裝載于pc中。具體調用一個框圖來表示,結合以下的程序理解,接下來還有一個針對框圖的具體的講解。以ADC中斷為例子:



注:(1)步驟①②③在出現在44binit.s,詳見我的啟動代碼中的注釋。

(2)_ISR_STARTADDRESS的定義在option.inc中:

_ISR_STARTADDRESS EQU 0xc7fff00

(3)步驟④在44b.H中定義:

#define pISR_ADC (*(unsigned *)(_ISR_STARTADDRESS+0x20))

(4)在main.C或者其他的c文件里,寫入:

void __IRQ ISR_ADC(){……}和pISR_ADC=(unsignde)ISR_ADC

必須加入在中斷服務程序中__IRQ,以高速編譯器這個是一個中斷服務程序,這樣編譯器會在編譯時候加上返回用戶模式的代碼,以實現中斷后程序的自動返還。

2、具體的代碼解釋:

從上面的流程圖看出,44B0 中斷系統中有兩張中斷轉移表,經過二重轉移才跳到中斷處理程序。第一張中斷向量表由硬件決定,所在區域為ROM(flash),地址空間從0X00開始,其中0X00-0X1C為異常向量入口地址,0X20-0XC0為中斷向量入口地址。另一張中斷向量表在RAM 中,可以隨便改,其位置在程序連接后才定。由于 RAM 放在地址空間的高端(距離中斷向量超過了 32M),為了從第一張中斷向量表跳到第二張中斷向量表,故在第一張中斷向量表對應位置上寫上 ldr PC,# interrupt_service 如:ldr PC,=HandlerEINT4567。

(1) 一級中斷向量表 以下為匯編代碼片斷,詳見44B0數據手冊11章——中斷控制器)

AREA Init,CODE,READONLY
;說明:關鍵字ENTRY告訴編譯器保留這段代碼;從代碼看Init段就是要寫入0x00地址的原始中斷向量,因此把這個文件編譯生成的44binit.O和Init填入ADS-Linker-Layout頁對應項中。【這樣編譯器會把該段代碼編譯到0X0地址。】

ENTRY ;ENTRY程序入口標號需要頂格式寫,否則出錯。

b ResetHandler ;復位異常 0x0000 0000
b HandlerUndef ;未定義異常 0x0000 0004
b HandlerSWI ;軟件中斷異常 0x0000 0008
b HandlerPabort ;指令預取異常 0x0000 000C
b HandlerDabort ;數據預取異常 0x0000 0010
b . ;保留 0x0000 0014
b HandlerIRQ ;外部中斷外設中斷都是在這里擴展的 0x0000 0018
b HandlerFIQ ;快速中斷 0x0000 001C

VECTOR_BRANCH
ldr pc,=HandlerEINT0 ;mGA H/W interrupt vector table 0x00000020
ldr pc,=HandlerEINT1 ;
ldr pc,=HandlerEINT2 ;
……

……

b .
ldr pc,=HandlerADC ;mGKB 0x0000 00C0
b . ;
b . ;
b . ;
b . ;
b . ;mGKB
b .
b .
;0xe0=EnterPWDN
ldr pc,=EnterPWDN

LTORG

通過這段代碼,就在44B0的ROM中以0x00為起始地址的地方建立起了一張中斷向量表,而且這個表的順序完全符合44B0數據手冊中對中斷向量地址的定義要求。



2、 二級中斷向量表 ^ _ISR_STARTADDRESS ;一般為 #define _ISR_STARTADDRESS 0xc7fff00

HandleReset # 4

HandleUndef # 4

HandleSWI # 4

HandlePabort # 4

HandleDabort # 4

HandleReserved # 4

HandleIRQ # 4

HandleFIQ # 4

;Do not use the label ’IntVectorTable’,

;because armasm.exe can not recognize this label correctly.

;the value is different with an address you think it may be.

;IntVectorTable

HandleADC # 4

HandleRTC # 4

……

……

HandleEINT2 # 4

HandleEINT1 # 4

HandleEINT0 # 4 ;0xc1(c7)fff84

END

這段第一行 “^” 符號表示在RAM區開辟空間,就是偽代碼中的MAP。

^ _ISR_STARTADDRESS 表示在RAM的_ISR_STARTADDRESS處開辟一段空間。這里開辟的空間是用來存放中斷服務程序及其他異常處理程序地址的。每個中斷或其他異常都開辟4個字節的空間,這是因為RAM區的程序地址要4個字節才能放得下。而中斷程序的地址是應用程序在使用這個中斷時,將中斷服務程序的地址存入這對應的空間內。



3、 中斷向量表最終指向 一般在44B.H等頭文件能找到對應于二級中斷向量表的宏定義:片斷如下

#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))

#define pISR_ADC (*(unsigned *)(_ISR_STARTADDRESS+0x20))

#define pISR_RTC (*(unsigned *)(_ISR_STARTADDRESS+0x24))

#define pISR_UTXD1 (*(unsigned *)(_ISR_STARTADDRESS+0x28))

#define pISR_UTXD0 (*(unsigned *)(_ISR_STARTADDRESS+0x2c))

……

……

#define pISR_EINT2 (*(unsigned *)(_ISR_STARTADDRESS+0x7c))

#define pISR_EINT1 (*(unsigned *)(_ISR_STARTADDRESS+0x80))

#define pISR_EINT0 (*(unsigned *)(_ISR_STARTADDRESS+0x84))

一般在C文件中將自定義的中斷服務子程序地址放進對應宏中,如:

pISR_TIMER0 = (int) time_interrupt()



2、向量中斷和非向量中斷模式的詳細源碼分析

(1)向量中斷

在1中講到當發生IRQ中斷時,中斷控制器會在數據總線上加載分支指令跳到相應中斷源的向量地址,即一級中斷向量表中對應的中斷向量入口地址。

ldr pc,=HandlerEINT0 ; 0x20

ldr pc,=HandlerEINT1

……

ldr pc,=HandlerTIMER0 ; 0x60

ldr pc,=HandlerTIMER1

……

ldr pc,=HandlerADC ; 0xb4

……

由上述代碼可知,程序會跳轉到HandlerXXX中,定義如下:

HandlerFIQ HANDLER HandleFIQ

HandlerIRQ HANDLER HandleIRQ

HandlerUndef HANDLER HandleUndef

HandlerSWI HANDLER HandleSWI

HandlerDabort HANDLER HandleDabort

HandlerPabort HANDLER HandlePabort

HandlerADC HANDLER HandleADC

HandlerRTC HANDLER HandleRTC

……

HandlerEINT1 HANDLER HandleEINT1

HandlerEINT0 HANDLER HandleEINT0

HandlerXXX HANDLER HandleXXX為一個匯編宏,定義如下:

MACRO

$HandlerLabel HANDLER $HandleLabel

$HandlerLabel

;由于ADS僅支持FD(滿遞減)型堆棧

sub sp,sp,#4 ;將堆棧退一個字用于保存下面用到的R0

stmfd sp!,{r0} ;將R0壓入堆棧

ldr r0,=$HandleLabel ;將HandleLabel的地址賦給R0

ldr r0,[r0] ;將HandleLabel的地址指向的內容(實際的執行地址)賦給R0

str r0,[sp,#4] ;將對應的中斷函數首地址入棧保護

ldmfd sp!,{r0,pc} ;將中斷函數的首地址出棧,放入PC中

MEND

由上宏定義可知,程序又跳到HandleXXX中執行,即二級中斷向量表中的地址。為此綜上所述,便可跳到對應的中斷服務子程序地址,執行中斷!

(2)非向量中斷

前面講過,一旦產生IRQ中斷,微控制器會切換到IRQ模式,并且跳轉到一級向量表0x0000018地址處執行程序;而FIQ則跳到0x000001C地址處。即

ENTRY

b ResetHandler ;復位異常 0x0000 0000
……
b HandlerIRQ ;外部中斷 0x0000 0018
b HandlerFIQ ;快速中斷 0x0000 001C
……

然后跳轉到宏HandlerIRQ HANDLER HandleIRQ 或 HandlerFIQ HANDLER HandleFIQ。

由以下代碼可知,HandleIRQ最終對應的是IsrIRQ地址標號。

;****************************************************

;* Setup IRQ handler *

;****************************************************

ldr r0,=HandleIRQ ;This routine is needed

ldr r1,=IsrIRQ str r1,[r0]

上述代碼位于ResetHandler為標號的匯編代碼段內,板子上電或復位后,都要從位于0x0執行b ResetHandler 的指令跳轉到ResetHandler為標號的匯編代碼段處執行,也就將HandleIRQ初始化為IsrIRQ。IsrIRQ代碼段如下:

IsrIRQ ;using I_ISPR register.

sub sp,sp,#4 ;reserved for PC

stmfd sp!,{r8-r9}

;IMPORTANT CAUTION

;if I_ISPC is not used properly, I_ISPR can be 0 in this routine.

ldr r9,=I_ISPR

ldr r9,[r9]

cmp r9, #0x0 ;If the IDLE mode work-around is used, r9 may be 0 sometimes.

beq %F2 ;相等就向后搜索跳轉標號2.

mov r8,#0x0

0

movs r9,r9,lsr #1

bcs %F1 ;>= 就向后搜索跳轉標號1.

add r8,r8,#4

b %B0 ;向前搜索跳轉標號0.

1

ldr r9,=HandleADC

add r9,r9,r8 ;以HandleADC(r9)為基址,r8對應所發生中斷源的偏移量

ldr r9,[r9] ;結果為二級中斷向量表中對應中斷標號地址HandleXXX

str r9,[sp,#8]

ldmfd sp!,{r8-r9,pc}

2

ldmfd sp!,{r8-r9}

add sp,sp,#4

subs pc,lr,#4

上述這段程序就是用來處理非向量中斷(比向量中斷方式多執行的代碼段),具體判斷I_ISPR中各位是否置1 置1表示目前此中斷等待響應(每次只能有一位置1),從最高優先級中斷位開始判斷,檢測到等待服務,中斷就將pc置為中斷服務函數首地址。這段代碼就是向量中斷和非向量中斷區別的根本所在,向量中斷利用硬件計算,直接通過一級中斷向量表中0X20-0XC0中斷向量入口地址跳轉到二級中斷向量表中對應的HandleXXX地址,省掉了這段代碼的操作。

文章版權歸西部工控xbgk所有,未經許可不得轉載。

欧美成人aaaaa免费视频_亚洲欧美激情小说另类_欧美激情一区二区三区视频_一级在线|欧洲

      9000px;">

          六月丁香综合在线视频| 在线中文字幕不卡| 日韩欧美国产电影| 91性感美女视频| 麻豆精品视频在线观看视频| 国产欧美日韩亚州综合| 538在线一区二区精品国产| www.av亚洲| 免费三级欧美电影| 亚洲国产日韩在线一区模特| 中文字幕国产精品一区二区| 精品国产污污免费网站入口 | 看国产成人h片视频| 国产精品国产三级国产三级人妇 | 久久99精品久久久久久| 亚洲视频一区在线| 久久久不卡网国产精品二区| 精品国产一区二区三区av性色 | 成人少妇影院yyyy| 老色鬼精品视频在线观看播放| 天天色 色综合| 一二三区精品视频| 一区二区国产视频| 精品欧美一区二区久久| 91麻豆精品久久久久蜜臀| 成人黄色a**站在线观看| 日本一区中文字幕| 日韩高清在线不卡| 一区二区三区.www| 亚洲毛片av在线| 亚洲婷婷在线视频| 日韩毛片在线免费观看| 欧美一区二区三区播放老司机| 9i看片成人免费高清| 91福利国产成人精品照片| 91国产免费看| 成人深夜在线观看| 这里只有精品99re| 日韩视频123| 久久综合九色综合欧美98| 国产亚洲综合色| 国产精品国产三级国产有无不卡| 欧美xxxx老人做受| 久久精子c满五个校花| 成人免费在线播放视频| 亚洲精品自拍动漫在线| 亚洲18色成人| 国产一区高清在线| 国产91精品一区二区麻豆亚洲| www.av亚洲| 在线成人午夜影院| 一区二区三区在线视频观看 | 国产亚洲欧美中文| 国产亚洲成aⅴ人片在线观看 | 久久久久国产精品人| 国产人成亚洲第一网站在线播放| 国产精品久久久久久久久快鸭| 一区二区三区欧美| 久久精品国产精品亚洲精品| 成人在线一区二区三区| 欧美日韩精品综合在线| 精品黑人一区二区三区久久 | 国产精品免费视频网站| 一区二区成人在线| 国产乱人伦偷精品视频不卡| 欧美亚洲动漫制服丝袜| 久久人人97超碰com| 亚洲欧美日韩国产成人精品影院| 奇米色一区二区三区四区| jiyouzz国产精品久久| 日韩欧美一区二区久久婷婷| 国产精品免费视频观看| 免费在线观看精品| 99精品视频一区| 日韩欧美不卡在线观看视频| 一区二区三区欧美久久| 成人午夜私人影院| 中文字幕av一区 二区| 麻豆精品一区二区| 精品久久国产老人久久综合| 亚洲成av人在线观看| 欧美在线不卡视频| 亚洲色图19p| 99在线精品视频| 欧美国产欧美亚州国产日韩mv天天看完整| 精品粉嫩超白一线天av| 久久99久久99精品免视看婷婷| 精品精品国产高清a毛片牛牛| 奇米精品一区二区三区在线观看 | 亚洲人午夜精品天堂一二香蕉| 三级一区在线视频先锋 | 国产美女在线观看一区| 日韩精品一区二区三区四区视频| 一区二区三区成人| 另类成人小视频在线| 欧美大片免费久久精品三p| 午夜精品视频一区| 日韩一级高清毛片| 日韩不卡一二三区| 国产清纯白嫩初高生在线观看91| 精品一区二区三区不卡| 欧美国产禁国产网站cc| 国产成人亚洲精品青草天美| 亚洲欧洲日产国产综合网| 91免费版在线| 亚洲午夜羞羞片| 久久综合久久鬼色中文字| 国产精品一区二区91| 国产精品女主播av| www.亚洲色图.com| 亚洲伊人伊色伊影伊综合网| 欧洲亚洲精品在线| 亚洲一二三区视频在线观看| 91久久一区二区| 亚洲女同ⅹxx女同tv| 成人三级伦理片| 亚洲色图.com| 欧美日韩国产小视频在线观看| 日日摸夜夜添夜夜添国产精品| 欧美精品丝袜久久久中文字幕| 视频一区中文字幕国产| 日韩精品一区二区三区中文不卡 | 一区二区三区四区国产精品| 色综合久久99| 亚洲www啪成人一区二区麻豆| 欧美日韩一级片在线观看| 日韩精品一级二级| 久久久av毛片精品| 一本色道久久综合亚洲91| 亚洲一区影音先锋| 日韩精品影音先锋| 成人av网址在线| 日韩av网站在线观看| 久久精品一区二区三区av| 精品在线播放免费| 日韩精品一区二区在线| 国产在线视视频有精品| 精品一区二区在线观看| 日韩视频不卡中文| 日本大胆欧美人术艺术动态| 欧美日韩综合在线免费观看| 亚洲午夜久久久久久久久电影院| 色悠悠久久综合| 午夜精品一区二区三区电影天堂| 制服丝袜成人动漫| 日本不卡视频一二三区| 精品国产成人系列| 奇米在线7777在线精品| 青青草国产精品亚洲专区无| 色综合一区二区三区| 91啪在线观看| 精品成人一区二区| 一区二区三区毛片| 日本不卡的三区四区五区| 激情综合网最新| 欧美电影影音先锋| 一区二区成人在线观看| 91亚洲精品久久久蜜桃| 精品国产一区二区亚洲人成毛片| 国产精品国产精品国产专区不片| 欧美在线观看视频一区二区 | 精品理论电影在线| 波多野结衣在线一区| 丝袜美腿成人在线| 日韩理论片网站| 青娱乐精品在线视频| 亚洲欧美日韩久久精品| 中文字幕欧美区| 中文字幕中文字幕在线一区 | 亚洲老妇xxxxxx| 国产日产精品一区| 欧美日韩一本到| 亚洲国产毛片aaaaa无费看| 欧美精品少妇一区二区三区| 亚洲国产日韩一区二区| 欧美精品一级二级三级| 国产风韵犹存在线视精品| 洋洋成人永久网站入口| 中文字幕综合网| 丁香亚洲综合激情啪啪综合| 午夜激情一区二区三区| 精品国产网站在线观看| 欧美日韩一区二区三区在线| 亚洲一区二区三区在线| 国产美女精品人人做人人爽| 日本成人在线视频网站| 亚洲一区二区三区爽爽爽爽爽| 奇米色一区二区| 一本到不卡免费一区二区| 久久久精品一品道一区| 精品无人码麻豆乱码1区2区| 99国产精品久久久久久久久久久| 久久综合久久综合亚洲| 日韩欧美一区中文| 欧美—级在线免费片| 成人av网站在线观看免费| 亚洲综合清纯丝袜自拍| 风间由美一区二区三区在线观看| 国产成人a级片| 国产激情一区二区三区四区|