嵌入式系統進階 日期 : 2018/12/4
嵌入式系統的設計方式 輪詢的設計方式 大無窮迴圈的設計方式 中斷向量的設計方式 CPU 不斷測試資料是否已經進入,忙碌等待 (Busy Waiting), 無窮迴圈. 大無窮迴圈的設計方式 CPU 不斷測試資料是否已經進入,但盡量不因單一裝置而卡住,使用很多 if 測試狀態旗標 中斷向量的設計方式 週邊設備會自動回報給 CPU後,直接跳到中斷常式中執行. 2 陳鍾誠 - 2018/12/4
輪詢的設計方式 int main(void) { int i; irq_init(); Initial_Creator(); enable_irq(); while (1) UC ch; while (KEYPAD_chk_key(&ch) == OK) KEYPAD_get_key(&ch); LCD_printf("key=%d\n", ch); } disable_irq(); return(0); 3 陳鍾誠 - 2018/12/4
大無窮迴圈的設計方式 int main(void) { int i; irq_init(); Initial_Creator(); enable_irq(); while (1) UC ch; if (KEYPAD_chk_key(&ch) == OK) KEYPAD_get_key(&ch); LCD_printf("key=%d\n", ch); } // if (....) disable_irq(); return(0); 4 陳鍾誠 - 2018/12/4
中斷向量的設計方式 void Initial_TIMER0(void) { rTCFG0 = (rTCFG0 & ~(0xff)) | SYS_TIMER01_PRESCALER; rTCFG1 = (rTCFG1 &~(0xf)) | (SYS_TIMER0_MUX); rTCNTB0 = (TIMER0_RESCHED_PERIOD*PCLK)/ ((SYS_TIMER01_PRESCALER +1)*(SYS_TIMER1_DIVIDER)*1000); rTCMPB0 = 0; rTCON = rTCON & ~(0xffffff) | 0x6aaa0a; rTCON = rTCON & ~(0xffffff) | 0x599909; tick_on = UM; tick_ms = 0; tick_sec = 0; tick_min = 0; tick_hour = 0; register_irq(IRQ_TIMER0, TIMER0_ISR, "Timer ISR"); ClearPending(BIT_TIMER0); EnableInterrupt(BIT_TIMER0); } 5 陳鍾誠 - 2018/12/4
參考文獻 Computer Organization, 5/e Carl Hamacher, Zvonko Vranesic, Safwat Zaky Section 2.7 : 輸出入作業 Chapter 9 : 嵌入式系統 6 陳鍾誠 - 2018/12/4