在db1200 的板子上,之前一開始做新的Image
NK.bin 都會Hang 在 -OEMInit 之後。
因為在 startup.s 中,呼叫完 OEMInit 之後 會reenable interrupt
而因為在公版中 有用到GPIO7 也就是 IC1 interrupt 7
如果這個GPIO7 pin 的狀態為 High 沒問題, 如果為 Low 的話 則會trigger interrupt 導致系統Hang住。 (使用MMPG module 就可以pass, 因為它把GPIO7 pull high
之前粗魯的解決方法就是 Disable 整個 IC1 (在startup.s 中 disable interrupt mask )或者在 intr.c (OEMInterruptInit() )中 disable 整個 IC1 handler。
但是正確解法應該是,修改 db1200.h 或 pb1200.h
修改 PLATFORM_INTR_IC1_07
// Platform-specific interrupt defintions for kernel/hal/intr.c
#define PLATFORM_INTR_IC1_07 irqLL | INTR_MODE_UNMASK // 39 GPIO7 Board Interrupt Controller
不要定義 PLATFORM_INTR_IC1_07 的話 在intr.c
的 InterruptConfiguration[HWINTR_MAXIMUM ] array 就會定義 PLATFORM_INTR_IC1_07 為 irqNA
#ifndef PLATFORM_INTR_IC1_07
#define PLATFORM_INTR_IC1_07 irqNA
#endif
PLATFORM_INTR_IC1_07,
沒有留言:
張貼留言