s5pv210有4個向量中斷控制器(vic),每個向量中斷控制器包含32個中斷源。
當某個中斷源產生中斷時,cpu會自動的將vicxvectaddry(x=0,1,2,3,y=0-31)暫存器的值賦給vicxaddress(x=0,1,2,3),因此我們可以把我們的中斷處理函式的位址賦給vicxvectaddry暫存器,
比如我們有個函式
void key_handle()
我們把key_handle 函式的值賦給vic0vectaddr0(外部中斷0)
vic0vectaddr0 =key_handle;
當外部中斷0觸發中斷時,cpu會自動的將vic0vectaddr0
的值賦給vic0address,並跳轉到這個位址去執行,即執行函式key_handle。
**如下:
start.s
.global _start /* 宣告乙個全域性的標號 */
.global key_isr
_start:
/* 設定棧,以呼叫c函式 */
ldr sp, =0x40000000
/* 開總中斷 */
mrs r0, cpsr
bic r0, r0, #0x00000080 /* 清楚第7位,irq中斷禁止位,寫0使能irq */
msr cpsr, r0
bl main /* 跳轉到c函式去執行 */
halt:
b halt
key_isr:
** 這是這條剛要執行的指令的位址剛好=pc-4 */
sub lr, lr, #4
stmfd sp!, /* 保護現場 */
bl key_handle
/* 恢復現場 */
ldmfd sp!, ^ /* ^表示把spsr恢復到cpsr */
key.c
#define gpc0con *((volatile unsigned int *)0xe0200060)
#define gpc0dat *((volatile unsigned int *)0xe0200064)
#define gph0con *((volatile unsigned int *)0xe0200c00)
#define gph0dat *((volatile unsigned int *)0xe0200c04)
#define ext_int_0_con *((volatile unsigned int *)0xe0200e00)
#define ext_int_0_mask *((volatile unsigned int *)0xe0200f00)
#define vic0intselect *((volatile unsigned int *)0xf200000c)
#define vic0intenable *((volatile unsigned int *)0xf2000010)
#define vic0vectaddr0 *((volatile unsigned int *)0xf2000100)
#define vic0vectaddr1 *((volatile unsigned int *)0xf2000104)
#define vic0address *((volatile unsigned int *)0xf2000f00)
#define ext_int_0_pend *((volatile unsigned int *)0xe0200f40)
extern void key_isr(void);
void key_handle()
int main()
makefile
key.bin: start.o key.o
arm-linux-ld -ttext 0x20000000 -o key.elf $^
arm-linux-objcopy -o binary key.elf $@
arm-linux-objdump -d key.elf > key.dis
key.o : key.c
arm-linux-gcc -c $< -o $@
start.o : start.s
arm-linux-gcc -c $< -o $@
clean:
rm *.o *.elf *.bin *.dis
按下key1,led1點亮,再次按下key1,led1熄滅
按下key2,led2點亮,再次按下key2,led2熄滅
TQ210裸機程式設計 4 按鍵(中斷法)
s5pv210有4個向量中斷控制器 vic 每個向量中斷控制器包含32個中斷源。當某個中斷源產生中斷時,cpu會自動的將vicxvectaddry x 0,1,2,3,y 0 31 暫存器的值賦給vicxaddress x 0,1,2,3 因此我們可以把我們的中斷處理函式的位址賦給vicxvecta...
TQ210裸機程式設計 3 按鍵(查詢法)
首先檢視tq210的底板原理圖 這次程式設計只操作key1和key2,在tq210核心板原理圖中搜尋xeint0 可以看出key1和key2分別接在s5pv210的gph0 0和gph0 1引腳。這次程式設計使用查詢法,需要設定這兩個引腳為輸入模式,然後迴圈讀取引腳狀態,當使用者按下按鍵時,對應引腳...
TQ210裸機程式設計 3 按鍵(查詢法)
首先檢視tq210的底板原理圖 這次程式設計只操作key1和key2,在tq210核心板原理圖中搜尋xeint0 可以看出key1和key2分別接在s5pv210的gph0 0和gph0 1引腳。這次程式設計使用查詢法,需要設定這兩個引腳為輸入模式,然後迴圈讀取引腳狀態,當使用者按下按鍵時,對應引腳...