S5PV210中斷處理

2022-07-17 22:24:27 字數 1379 閱讀 7663

_start:

1、設定棧空間:防止之前的uboot**被覆蓋,應為c中需要棧空間

mov r0, #0x53

msr cpsr_cxsf, r0

b main

--main函式:

1、led燈引腳功能設定

gpj2con &= ~(0xf<<0);

gpj2con |= (1<<0);

2、中斷初始化:

2、1 註冊中斷函式:

功能函式:

_start:

irq_handle: @cpsr會由硬體自動儲存到spsr_irq

ldr sp, =0xd0037f80

sub lr, lr, #4

stmfd sp!,

bl irq_isr 跳轉到真正的中斷處理函式  *irq= vic0address(存放了真正中斷處理函式的首位址)

ldmfd sp!, ^ @將spsr_irq恢復給cpsr

中斷處理函式的執行:

void irq_isr(void)

; void (*isr)(void) = (void *)0;

for(i=0; i<4; i++)

}(*isr)();

}2、2 關閉中斷控制器:()

vic0intenclear = 0xffffffff;

vic1intenclear = 0xffffffff;

2、3 設定為何種中斷(irq)

vic0intselect = 0x0;

vic1intselect = 0x0;

3、將真正的中斷處理函式位址給對應的暫存器vic0vectaddr,

真正的中斷處理函式:

電燈,清除vic0vectaddr中儲存的位址,清除外部中斷的標誌位,pend

void isr_key(void)

4、設定按鍵功能,以及為何種觸發方式

// gph2_0 --> ext_int[16]

gph2con |= 0xf;

//ext_int[16]: falling edge triggered

ext_int_2_con &= ~(7<0);

ext_int_2_con |= (2<<0);

5、開啟外部中斷

ext_int_2_mask &= ~(1<<0);

6、開啟中斷控制器的中斷功能:

void intc_enable(unsigned long intnum)

{unsigned long temp;

if(intnum<32)

{temp = vic0intenable;

temp |= (1<7、進入死迴圈,等待中斷

具體**參考demo_irq

s5pv210 中斷實戰

以下內容源於部落格的學習,以及朱有鵬老師課程的學習,和網路資源的整理。1 建立異常向量表 2 中斷初始化 3 使能 如外部中斷,寫中斷處理函式 4 建立中斷號與中斷處理函式的聯絡,使能。當中斷發生時,中斷處理函式會自動處理中斷 流程如下圖 下面按上述步驟編寫 內容細節見部落格 s5pv210 裸機 ...

s5pv210 中斷系統相關介紹

參考資料 1 異常向量表是cpu中某些特定位址的特定定義。當中斷發生的時候,中斷要想辦法通知cpu去處理中斷,怎麼做到?依靠異常向量表。2 在cpu設計時,事先定義了cpu中一些特定位址作為特定異常的入口位址。3 以上講的是cpu硬體設計時對異常向量表的支援,下來就需要軟體支援了。1 對soc來說,...

關於S5PV210中斷的問題

1 異常向量表 1 所有的cpu都有異常向量表,是cpu設計是就設定好的,是硬體範疇。2 包括但不只是中斷。中斷只是其中的一種 isr和fiq 異常機制,還有其他的 資料異常 軟體中斷 未定義指令 重置 3 s5pv210 的異常向量表可以改變 在 cp15 協處理器中 以適應作業系統的需求。但是目...