|
@@ -117,6 +117,14 @@ static int serial_rx_fifo_level(void)
|
|
|
return scif_rxfill(&sh_sci);
|
|
|
}
|
|
|
|
|
|
+static void handle_error(void)
|
|
|
+{
|
|
|
+ sci_in(&sh_sci, SCxSR);
|
|
|
+ sci_out(&sh_sci, SCxSR, SCxSR_ERROR_CLEAR(&sh_sci));
|
|
|
+ sci_in(&sh_sci, SCLSR);
|
|
|
+ sci_out(&sh_sci, SCLSR, 0x00);
|
|
|
+}
|
|
|
+
|
|
|
void serial_raw_putc(const char c)
|
|
|
{
|
|
|
while (1) {
|
|
@@ -138,16 +146,14 @@ static void sh_serial_putc(const char c)
|
|
|
|
|
|
static int sh_serial_tstc(void)
|
|
|
{
|
|
|
+ if (sci_in(&sh_sci, SCxSR) & SCIF_ERRORS) {
|
|
|
+ handle_error();
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
return serial_rx_fifo_level() ? 1 : 0;
|
|
|
}
|
|
|
|
|
|
-void handle_error(void)
|
|
|
-{
|
|
|
- sci_in(&sh_sci, SCxSR);
|
|
|
- sci_out(&sh_sci, SCxSR, SCxSR_ERROR_CLEAR(&sh_sci));
|
|
|
- sci_in(&sh_sci, SCLSR);
|
|
|
- sci_out(&sh_sci, SCLSR, 0x00);
|
|
|
-}
|
|
|
|
|
|
int serial_getc_check(void)
|
|
|
{
|