int serial_getc(void) { unsigned short status; char ch; while (!serial_getc_check()) ; ch = *SCFRDR; status = *SCFSR; *SCFSR = RDRF_CLEAR; if (status & (FSR_FER | FSR_FER | FSR_ER | FSR_BRK)) handle_error(); if (*SCLSR & LSR_ORER) handle_error(); return ch; }
static int sh_serial_getc(void) { unsigned short status; char ch; while (!serial_getc_check()) ; ch = sci_in(&sh_sci, SCxRDR); status = sci_in(&sh_sci, SCxSR); sci_out(&sh_sci, SCxSR, SCxSR_RDxF_CLEAR(&sh_sci)); if (status & SCIF_ERRORS) handle_error(); if (sci_in(&sh_sci, SCLSR) & SCxSR_ORER(&sh_sci)) handle_error(); return ch; }
int serial_getc(void) { unsigned short status; char ch; while (!serial_getc_check()) ; ch = readb(SCFRDR); status = readw(SCFSR); writew(RDRF_CLEAR, SCFSR); if (status & (FSR_FER | FSR_FER | FSR_ER | FSR_BRK)) handle_error(); if (readw(SCLSR) & LSR_ORER) handle_error(); return ch; }
int serial_getc(void) { unsigned short status; char ch; while (!serial_getc_check()) { ; } ch = readb(SCIF_BASE + SCFRDR); status = readw(SCIF_BASE + SCFSR); writew((SCFSR_ER_ENABLE | SCFSR_TEND_ENABLE | SCFSR_TDFE_ENABLE | SCFSR_BRK_ENABLE), SCIF_BASE + SCFSR); if (status & (SCFSR_PER | SCFSR_FER | SCFSR_ER | SCFSR_BRK)) { handle_error(); } if (readw(SCIF_BASE + SCLSR) & SCLSR_ORER) { handle_error(); } return ch; }