S3C2440彙編中斷程式

2021-06-27 23:12:30 字數 2610 閱讀 2683

雖然現在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...