阅读:1807回复:0
请gerryzhou小牛帮忙看下st16c2550的问题(怪异!)
最近在做st16c2550的驱动移植,代码是用PB4.2的public下的,现在的问题是,我在SL_Init里面做了对pMCR的操作后(将MCR[3]置1,打开INTA/INTB中断),就会一直陷入到后面的ClearPendingInt循环里面,代码如下:
VOID ClearPendingInts( PVOID pHead // @parm PVOID returned by HWinit. ) { PSER16550_INFO pHWHead = (PSER16550_INFO)pHead; EnterCriticalSection(&(pHWHead->RegCritSec)); try { pHWHead->IIR = INB(pHWHead, pIIR_FCR); while ( ! (pHWHead->IIR & 0x01) ) { DEBUGMSG (ZONE_INIT, (TEXT("!!IIR %X\r\n"), pHWHead->IIR)); // Reading LSR clears RLS interrupts. ReadLSR( pHWHead ); // Reset RX FIFO to clear any old data remaining in it. OUTB(pHWHead, pIIR_FCR, pHWHead->FCR | SERIAL_FCR_RCVR_RESET); // Reading MSR clears Modem Status interrupt ReadMSR( pHWHead ); // Simply reading IIR is sufficient to clear THRE pHWHead->IIR = INB(pHWHead, pIIR_FCR); } } except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) { DEBUGMSG (ZONE_ERROR,(TEXT("-SL_PostInit, 0x%X - ERROR\r\n"), pHWHead)); // Just fall through & release CritSec } LeaveCriticalSection(&(pHWHead->RegCritSec)); } 上面黑体的地方一直打印出0xc0,说明CPU无法清除st16c2550的pending int,这样就没法退出循环,但是从里面读的LSR和MSR来看,根本就没有中断产生。 不知道为什么一开st16c2550的MSR[3]位后,就会出现这样的问题呢? |
|