雖然現在c語言已經成為主流力量,但是我還是非常喜歡用彙編寫**。**的高效率,高速度是有天獨厚的,但我更喜歡他那種「指哪打哪"的高透明。265m的ram任你主宰,想把那句話放在哪,就放在哪。這種任性你懂嗎?
學習中斷程式兩大感悟(自己卡住的地方)
2,位址切記不要寫錯。我就是在這裡卡了將近一天時間。
s3c2440資料太多了,我對說無意了。寫此部落格僅想記錄一下自己學習嵌入式的例程,等到幾個月後,再回頭看一看,應該會有別樣滋味。
**獻上:
.text
.global _start
_start:
b reset
@ 0x04
handleundef:
b handleundef
handleswi:
b handleswi
handleprefetchabort:
b handleprefetchabort
handledataabort:
b handledataabort
handlenotused:
b handlenotused
b handleirq
handlefiq:
b handlefiq
reset:
bl init_io
bl init_int
ldr r1, =0x53000000 @關閉開門狗·
ldr r2, =0xffffffdf
str r2, [r1]
msr cpsr_c, #0xd2 @開啟中斷模式
ldr sp, =3072 @設定中斷模式的堆疊指標(不同模式下,用不同的sp)
msr cpsr_c, #0x5f @開啟系統模式
loop:
ldr r1, =0x56000014 @迴圈。用於判斷進入中斷後是否成功返回主函式
ldr r2, =0xfffffebf
str r2, [r1]
b loop
init_io:
ldr r1, =0x56000010 @ gpbcon設定為輸出模式,控制led
ldr r2, =0xfffd57fd
str r2, [r1]
ldr r1, =0x56000014 @gpbdat 關閉燈
ldr r2, =0xffffffff
str r2, [r1]
ldr r1, =0x56000060 @gpgcon設定為外部中斷模式
ldr r2, =0xfffffffe
str r2, [r1]
ldr r1, =0x5600008c @eint1設定為低電平觸發
ldr r2, =0
str r2, [r1]
mov pc, lr
init_int:
ldr r1, =0x4a000008 @inimak 使能中斷
ldr r2, =0xffffffdf
str r2, [r1]
ldr r1, =0x560000a4 @exinmak 使能外部中斷
ldr r2, =0xfffffeff
str r2, [r1]
mov pc, lr
handleirq:
sub lr, lr, #4 @此時lr是中斷模式下的lr
s***b sp!, @入棧
ldr r1, =0x56000014 @gpbdat 開燈
ldr r2, =0x00000000
str r2, [r1]
ldr r1, =0x56000064 @gpbdat
loopp: @等待:當鬆開按鍵後才推出迴圈,防止多次進入中斷
ldr r2, [r1]
and r2, r2, #0x00000001
cmp r2, #0
beq loopp
ldr r1, =0x56000014 @gpbdat除錯時使用,檢驗是否真的在上面停止了,如果不鬆手,燈狀態是不會改變的
ldr r2, =0x00000f50
str r2, [r1]
ldr r1, =0x4a000000 @清除標誌位
ldr r2, [r1]
str r2, [r1]
ldr r1, =0x4a000010
ldr r2, [r1]
str r2, [r1]
ldr r1, =0x560000a8
ldr r2, [r1]
str r2, [r1]
ldmia sp!, ^ @出棧 ^ 不要忘記。用來將是spsr值賦給cpsr
還要多說兩句,1好多人寫**是用mdk,寫mdk是,彙編標號如loop後面是不要寫 :(冒號)的,但是gnu 彙編必須寫,否則不通過。
s3c2440外部中斷操作
要想正確地執行2440的外部中斷,一般需要完成兩個部分內容 中斷初始化和中斷處理函式。在具體執行中斷之前,要初始化好要用的中斷。2440的外部中斷引腳eint與通用io引腳f和g復用,要想使用中斷功能,就要把相應的引腳配置成中斷模式,如我們想把埠f0設定成外部中斷,而其他引腳功能不變,則gpfcon...
S3C2440的中斷機制
1.中斷原理圖 2.中斷過程 如果是不帶子中斷的內部中斷 發生後srcpnd相應位置1,那麼等待進一步處理。如果是帶子中斷的內部中斷 發生後subsrcpnd相應位置1,如果沒有被intsubmsk遮蔽,那 麼srcpnd相應位置1,等待進一步處理 如果是外部中斷 eint0 eint3發生後src...
S3C2440氣泡排序(彙編)
area test2,code,readonly entry code32 把隨機的十個數安從小到大的順序排序,並存放在目標記憶體單元中 r0,r1用於迴圈計數 r6,r7 用於完成r4,r5的i 4偏移量 r8 r11用於 src資料轉存dst start mov r0,0 外迴圈次數 mov r...