some more additions:
I do have read the technical notes from NXP on this issue. However I continued trying to get multiple read working without success:
Here the latest init sequence - I added some delay (100usec) between writing the registers:
unsigned char sc16is750_reg_init[][2] = {
{SC16IS750_REG_LCR,0x80}, // program baudrate
{SC16IS750_REG_DLL,0x80}, // 2400
{SC16IS750_REG_DLH,0x01},
{SC16IS750_REG_LCR,0xBF}, // access EFR register
{SC16IS750_REG_EFR,0x10}, // enable enhanced registers
{SC16IS750_REG_LCR,0x03}, // 8 data bit, 1 stop bit, no parity
{SC16IS750_REG_MCR,0x04}, // enable TLR and TCR
{SC16IS750_REG_TLR,0x60}, //set TLR 24 char RX
{SC16IS750_REG_FCR,0x06}, // reset TXFIFO, reset RXFIFO
{SC16IS750_REG_FCR,0x01}, // enable FIFO mode
{SC16IS750_REG_IER,0x01}, // receive line status IRQ only
{0xff,0xff}
};
Actually I want an interrupt to be generated if Fifo conatins 24 char. This is why I setup TLR register. This works fine. This means that setting up the register do work. The sequence is in line with the NXP technical note. I'll read the following content out of the registers in ther interrupt service routine:
iir 0xC4 lsr 0x61 rxlvl 24
So 0xC4 means Fifo level interrupt, no overflow. When I do a multiple reads I'll get:
010000000000000000000000000000000000000000000000
If I used the same function but read single characters only I'll get:
010231353A333520536F2030332E30392E323031370000B1
The other interessting point to mention is - I'll can do a multiple write.