arm體系結構的7中工作模式
1、使用者模式(usr) :arm處理器正常的程式執行狀態
2、快速中斷模式(fig) :用於高速的資料傳輸或通道處理
3、中斷模式(irq) :用於通用的中斷處理
4、管理模式(svc) :作業系統使用的保護模式
5、資料訪問終止模式(abt) :當資料或指令預取終止時進入該模式,可用於虛擬儲存及儲存保護
6、系統模式(sys) :執行具有特權的作業系統任務
7、未定義指令終止模式(und):當未定義的指令執行時進入該模式,可用於支援硬體協處理器的軟體**
除使用者模式外,其他均為特權模式。
可以通過軟體來進行模式的切換,例如進入svc管理模式,**如下:
mrs r0, cpsr
bic r0, r0, #0x1f
orr r0, r0, #0xd3 //svc模式,cpu狀態為arm工作模式,禁止快速中斷和中斷
msr cpsr, r0
arm體系結構cpu的兩種工作狀態:arm狀態 32位的字對齊的arm指令
thumb狀態 26位的半字對齊的thumb指令
s3c2440/s3c2410一上電便是在arm狀態,所以無需關心cpu的工作狀態
r13:棧指標暫存器
r14:lr暫存器,pc暫存器的備份
r15:pc暫存器,程式計數器
cpu在執行過程中,如何知道各類外設發生了某些不預期的事情,不如串列埠接收到了新資料,usb介面中出入了裝置,按下了某個按鍵等,主要有兩種方法
(1):查詢方式
(2):中斷方式
識別中斷和清除中斷主要是利用兩種暫存器來實現
(1):中斷控制暫存器
在s3c2410/s3c2440中,irq中斷被分為三類
1、request sources(with sub-register) ,即有子中斷的中斷型別,s3c2410有11個,s3c2440有15個
2、request sources(without sub-register),無子中斷的一類中斷
3、eint4_7,eint8_23
首先來說明如何判斷發生的中斷時哪乙個
1、通過讀取intpnd或者intoffset的值可以知道彙總的中斷中哪乙個中斷發生了
2、彙總的中斷中有三種型別的中斷
(1)直接有intpnd便可判斷的中斷
(2)由子中斷彙總的中斷
(3)eint4_7 和eint8_23
對於情況2:比如關於串列埠方面的中斷int_rxd0,int_txd0,int_err0,此三個中斷只要有乙個發生了,且沒有被遮蔽,則三者在intpnd中的標示
均為int_uart0,光是看intpnd還無法分辨具體哪乙個中斷發生,此時需要用到subsrcpnd暫存器,
subsrcpnd 的位[2]標誌int_err0
subsrcpnd 的位[1]標誌int_txd0
subsrcpnd 的位[0]標誌int_rxd0
同理,其他由子中斷彙總的中斷都能在subsrcpnd找到自己子中斷的標示。這中子中斷在s3c2440中有15個,即在subsrcpnd需要15位標示,彙總到
intpnd中由6位標示,總的對映關係如下
int_uart0 :int_rxd0,int_txd0,int_err0
int_uart1 :int_rxd1,int_txd1,int_err1
int_uart2 :int_rxd2,int_txd2,int_err2
int_adc :int_adc_s, int_tc
int_cam :int_cam_c, int_cam_p
int_wdt_ac97 :int_wdt, int_ac97
對於第三種情況ein4~eint 7和eint8~eint23這幾個外部中斷,在intpnd中的標示為eint4_7 和eint8_23
對映關係如下
eint4_7 :ein4~eint7
eint8_23 :eint8~eint23
故而光是參考intpnd暫存器無法知道具體發生的中斷,這是還需要參考eintpend暫存器,這個暫存器中標示了具體發生的中斷
這裡插放中斷流程圖
使用中斷的步驟:
(1)設定好中斷模式和快速中斷模式下的棧
(2)準備好中斷處理函式,即設定中斷向量表,中斷向量位址0x00000018
_start: b start_code
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
然後寫中斷服務程式,即判斷是哪個中斷發生,採取什麼樣的措施
最後清除中斷,清除中斷位置可以在中斷服務程式前,也可以在其後,清中斷是從源頭開始,例如從subsrpnd,到srcpnd到intpnd
注意:srcpnd和intpnd之間的關係,他倆都是中斷的彙總,相應位標誌的中斷一樣,intpnd經由srcpnd遮蔽和優先順序而來,intpnd同一時刻只能
標示一種中斷,因為同一時刻只能相應乙個中斷,而srcpnd可能標示了多個中斷,這表明有多個中斷同時發生了,不過要經過遮蔽和優先順序確定
響應哪個中斷。在前面說過有三類中斷,這裡的遮蔽主要遮蔽第二類中斷,因為第一類和第三類中斷在進入srcpnd標示之前已經被遮蔽了
(3)進入、退出中斷模式或快速中斷模式時,需要儲存、恢復中斷程式的執行環境
對於irq**如下
sub lr ,lr ,#4
s***b sb!,
......
ldmid sp!,^
(4)根據具體中斷,設定相關外設。比如設定觸發條件,設定引腳功能(中斷),設定自己的遮蔽暫存器
(5)對於第一類和第三類中斷,設定遮蔽暫存器
(6)設定主遮蔽暫存器intmask
(7)啟動中斷功能,即設定cpsr暫存器
在uboot的第一階段**中對中斷的處理如下
(1)關閉中斷使能
mrs r0, cpsr
bic r0, r0, #0x1f
orr r0, r0, #0xd3
msr cpsr, r0
(2)遮蔽所有中斷
# define intmsk 0x14400008
mov r1, #0xffffffff
ldr r0, =intmsk
str r1, [r0]
jz2440的時鐘分析
s3c2440有兩個pll phase locked loop 乙個是mpll,乙個是upll。mpll用於cpu及其他外圍器件,upll用於usb。用於產生fclk,hclk,pclk三種頻率,這三種頻率分別有不同的用途 fclk是cpu提供的時鐘訊號。hclk是為ahb匯流排提供的時鐘訊號,ad...
JZ2440學習筆記
1.easyopenjtag工具用於為目標板初次燒寫u boot再合適不過了。2.燒寫核心和檔案系統使用tftp nfs,速度是很快的哦。toc 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下markdown的基...
JZ2440 系統時鐘
jz2440 系統時鐘。時鐘控制邏輯給整個晶元提供了三種時鐘。fclk 用於cpu核心 hclk 用於ahb匯流排上裝置,比如cpu核,儲存控制器,中斷控制器,lcd控制器,dma控制器,和usb主機模組,主要用於高效能模組 pclk 用於apb匯流排上裝置,比如watchdog,iis,i2c,p...