Programming Philips SC16C652B

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

Reply to
Newbie
Loading thread data ...

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.