experts: I encounter a problem in programming Philips SC16C652B. It provides an feature that trigger an interrupt when the FIFO was empty. But, I didn't get any interrupt after programming it. The folloing is a piece of my code:
// enable write register set 1 writeReg(port, LCR, byte_temp&0x7f); regptr->lcr = byte_temp&0x7f;
// disable interrupt writeReg(port, IER, 0x00); regptr->ier = 0x00;
baud = setptr -> baud; div = (24000000 / 16 / baud); dll = div & 0x00ff; dlh = ((div & 0xff00) >> 8);
// enable write register set 2 writeReg(port, LCR, 0x80); writeReg(port, DLL, dll); writeReg(port, DLH, dlh); regptr->dll = dll; regptr->dlh = dlh;
byte_temp = 0x00; byte_temp = setptr->data | setptr->stop | setptr -> parity; writeReg(port,LCR,byte_temp); regptr->lcr = byte_temp;
byte_temp = 0x00; //byte_temp = setptr->rx_trig_level | setptr->dma_mode //| 0x06 | setptr->fifo_ena; byte_temp = setptr->rx_trig_level | setptr->dma_mode | setptr->fifo_ena;
writeReg(port,FCR, byte_temp & 0x7f);
regptr->isr_fcr = byte_temp; //save FCR register
// enable write register set 3 byte_temp = readReg(port, LCR); writeReg(port, LCR, 0xbf); writeReg(port,FCR, byte_temp | 0xa0); regptr->isr_fcr = byte_temp | 0xa0; writeReg(port, EFR, 0x10);
// restore LCR writeReg(port, LCR, byte_temp&0x7f);
// THR empty interrupt writeReg(port, LSR, 0x20); regptr->lsr = 0x20;
// init buffer bufptr = &PortBuf[n]; bufptr->TxBufPtrIn = 0; bufptr->TxBufPtrOut = 0; bufptr->RxBufPtrIn = 0; bufptr->RxBufPtrOut = 0;
writeReg(port,IER,0x03); regptr->ier = 0x03;
Any comments/suggestions are welcome!!
BR, Edward