_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 協處理器中 以適應作業系統的需求。但是目...