Programming Philips SC16C652B

Aug 11, 2005 0 Replies

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



Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required