外設的所有中斷都由中斷控制晶元8259a匯集後連線到cpu的intr引腳
8259a pic每一片能管理8個中斷源。
使用級聯功能
時鐘中斷連線在主片的ir0引腳,鍵盤中斷連線在ir1引腳
因為0~31號中斷是cpu自己用的,所以ir0開始對應的就是32號中斷號
要完成中斷請求,首先要進行初始化
static
void
pic_init()
8259a的設定我認為我只要了解了解就夠了
接下來,新增中斷請求處理函式
irq的處理函式和isr的處理函式基本上一樣
%macro irq 1
[global irq_%1]
irq_%1:
cli ; 關閉中斷,因為現在正在處理中斷
push 0 ; 無錯誤碼
push %1
jmp irq_common_stub
%endmacro
irq 32
irq 33
irq 34
irq 35
irq 36
irq 37
irq 38
irq 39
irq 40
irq 41
irq 42
irq 43
irq 44
irq 45
irq 46
irq 47
[global irq_common_stub]
[extern irq_handler]
irq_common_stub:
pusha
mov ax, ds
push eax
mov ax, 0x10
mov ds, ax
mov fs, ax
mov es, ax
mov gs, ax
mov ss, ax
push esp
call irq_handler
add esp, 4
pop ebx
mov ds, bx
mov fs, bx
mov es, bx
mov gs, bx
mov ss, bx
popa
add esp, 8
iret
.end:
static
void
irq_init()
inline
void
irq_handler
(idt_regs_t *regs)
定時器中斷能控制使用者程式的執行事件
而且,這種處理函式通常都是對程序的排程處理
時鐘中斷由8253/8254 timer產生的
配置晶元:
void
init_timer
(uint32_t frequency)
static
void
timer_callback
(idt_regs_t *regs)
其他要做的事情就是在入口函式的地方加上乙個init_timer
而已 第六天學習
變數的作用域 區域性變數 在函式內部定義的變數,這個變數只能在函式內部使用,在全域性當中不能使用。使用就報錯了。全域性變數 在函式外部定義的變數,這個變數可以在全域性使用。但是我們一般不推薦使用全域性變數 因為可能會意外的修改掉變數的值。迫不得已不要用全域性變數 衝突處理原則 就近原則。而不是從上到...
學習第六天
還有九天,我就要去參加北大3日遊了。滑稽 像我這樣的蒟蒻去那也就是旅遊模式吧!無所謂了,隨便去考考,說不定有優秀營員呢?滑稽 不可能,絕對不可能 相信自己好了。這麼多天,好像把面試給忘了,雖然有人說面試是瞎 但是還是要準備準備的 明天看吧!還有什麼知識點沒看嗎?我們來看看st表和hash表吧!先看看...
學習android第六天
activity簡介 當在乙個activity中按下返回時,android os會自動銷毀activity物件 當在乙個activity中啟動另乙個activity時,當前activity不會被銷毀,而是被壓入activity棧中 activity的建立 1 自定義類,繼承activity 2 複寫...