diff --git a/examples/common/serial/serial.c b/examples/common/serial/serial.c index dd79050ce534146bc9075d7e0c683932fd1f0c0c..a60a324bdf1089e6eb7c44d99b99cb5b6b7475ee 100644 --- a/examples/common/serial/serial.c +++ b/examples/common/serial/serial.c @@ -144,24 +144,28 @@ void readCom_(int *ioRegionId, comRStruct *comRead, int numberOfBytes, RTIME t) { outb(0x03,regionList[*ioRegionId].start+UART_16550_FCR); inb(regionList[*ioRegionId].start + UART_16550_LSR); + inb(regionList[*ioRegionId].start + UART_16550_RXB); comRead->com_irbp=comRead->com_arbp; comRead->comStat=0; comRead->clearFifo=2; -//printf("[readCom_] FIFO cleared %04x\n",regionList[*ioRegionId].start); +// cSta=inb(regionList[*ioRegionId].start + UART_16550_LSR); +//rt_printf("[readCom_] FIFO cleared %04x %02x\n",regionList[*ioRegionId].start,cSta); } - com_irbp=comRead->com_irbp; - cSta = inb(regionList[*ioRegionId].start + UART_16550_LSR); -//cSta=DATA_READY; // worst case -//rt_printf("%02x ",cSta); - if ((cSta & 0x9E) != 0) { -//if (regionList[*ioRegionId].start==0x238) rt_printf("@@@%02x ",cSta); -// comRead->comStat=cSta & 0x9E; + com_irbp=comRead->com_irbp; + i = 0; + while (i < numberOfBytes) { + + cSta = inb(regionList[*ioRegionId].start + UART_16550_LSR); + if ((cSta & 0x9E) != 0) { +//if (regionList[*ioRegionId].start==0x3E8) rt_printf("@@@%02x ",cSta); comRead->comStat=cSta & 0x1E; outb(0x03, regionList[*ioRegionId].start + UART_16550_FCR); + inb(regionList[*ioRegionId].start + UART_16550_LSR); + inb(regionList[*ioRegionId].start + UART_16550_RXB); com_irbp=comRead->com_arbp; - } - i = 0; - while ((cSta & DATA_READY) && i < numberOfBytes) { + } + if ((cSta & DATA_READY)==0) break; // comment for worst case timing test + comRead->comTime[com_irbp]=t; #ifndef _NRT #if (IO_TIMING) @@ -178,8 +182,8 @@ if (t2-t1>maxIoTime) maxIoTime=t2-t1; //debug read -//if (regionList[*ioRegionId].start==0x3f8) -//rt_printf("r%02X ",cData); +//if (regionList[*ioRegionId].start==0x2f8) +//rt_printf("r%02X_%d ",cData,com_irbp); //rt_printf("r%02X_%d ",cData,GETTIME_MS); comRead->comReadBuf[com_irbp]=cData; com_irbp++; @@ -189,14 +193,6 @@ if (t2-t1>maxIoTime) maxIoTime=t2-t1; //rt_printf("%d %d\n",com_irbp,comRead->com_arbp); comRead->comStat = 0xFF; } - cSta = inb(regionList[*ioRegionId].start + UART_16550_LSR); - if ((cSta & 0x9E) != 0) { -//if (regionList[*ioRegionId].start==0x3E8) rt_printf("@@@%02x ",cSta); - comRead->comStat=cSta & 0x9E; - comRead->comStat=cSta & 0x1E; - outb(0x03, regionList[*ioRegionId].start + UART_16550_FCR); - com_irbp=comRead->com_arbp; - } i++; //cSta=DATA_READY; // worst case }