Example #1
0
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;
}
Example #2
0
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;
}
Example #4
0
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;
}