# HG changeset patch # User asl # Date 1220334962 0 # Node ID d3fd907caafd2def7d1f92f78c1d25b2c453473f # Parent 11949247abb3b98cbbe18591cd477d23af4543d7 * cdl/ser_powerpc_mpc555.cdl: Add line status * src/mpc555_serial_with_ints.c: Fixed exception caused by attempt to clear scsr bits. Add line status callbacks diff --git a/packages/devs/serial/powerpc/mpc555/current/ChangeLog b/packages/devs/serial/powerpc/mpc555/current/ChangeLog --- a/packages/devs/serial/powerpc/mpc555/current/ChangeLog +++ b/packages/devs/serial/powerpc/mpc555/current/ChangeLog @@ -1,3 +1,10 @@ +2008-05-13 Steven Clugston + + * cdl/ser_powerpc_mpc555.cdl: Add line status + * src/mpc555_serial_with_ints.c: + Fixed exception caused by attempt to clear scsr bits. + Add line status callbacks + 2008-04-06 Steven Clugston * Refactored cme555 package to more generic mpc555 diff --git a/packages/devs/serial/powerpc/mpc555/current/cdl/ser_powerpc_mpc555.cdl b/packages/devs/serial/powerpc/mpc555/current/cdl/ser_powerpc_mpc555.cdl --- a/packages/devs/serial/powerpc/mpc555/current/cdl/ser_powerpc_mpc555.cdl +++ b/packages/devs/serial/powerpc/mpc555/current/cdl/ser_powerpc_mpc555.cdl @@ -72,6 +72,7 @@ cdl_component CYGPKG_IO_SERIAL_POWERPC_M display "mpc555 PowerPC serial port A driver" flavor bool default_value 0 + implements CYGINT_IO_SERIAL_LINE_STATUS_HW description " This option includes the serial device driver for the mpc555 PowerPC port A." @@ -110,6 +111,7 @@ cdl_component CYGPKG_IO_SERIAL_POWERPC_M display "mpc555 PowerPC serial port B driver" flavor bool default_value 1 + implements CYGINT_IO_SERIAL_LINE_STATUS_HW description " This option includes the serial device driver for the mpc555 PowerPC port B." diff --git a/packages/devs/serial/powerpc/mpc555/current/src/mpc555_serial_with_ints.c b/packages/devs/serial/powerpc/mpc555/current/src/mpc555_serial_with_ints.c --- a/packages/devs/serial/powerpc/mpc555/current/src/mpc555_serial_with_ints.c +++ b/packages/devs/serial/powerpc/mpc555/current/src/mpc555_serial_with_ints.c @@ -609,14 +609,38 @@ static void mpc555_serial_rx_DSR(cyg_vec cyg_uint16 scdr; cyg_uint16 scsr; - // Allways read out the received character, in order to clear receiver flags - HAL_READ_UINT16(port + MPC555_SERIAL_SCxDR, scdr); +#ifdef CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS + cyg_serial_line_status_t stat; +#endif HAL_READ_UINT16(port + MPC555_SERIAL_SCxSR, scsr); + // Always read out the received character, in order to clear receiver flags + HAL_READ_UINT16(port + MPC555_SERIAL_SCxDR, scdr); + if(scsr & (cyg_uint16)MPC555_SERIAL_SCxSR_ERRORS) { - scsr &= ~((cyg_uint16)MPC555_SERIAL_SCxSR_ERRORS); - HAL_WRITE_UINT16(port + MPC555_SERIAL_SCxSR, scsr); +#ifdef CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS + if(scsr & MPC555_SERIAL_SCxSR_OR) + { + stat.which = CYGNUM_SERIAL_STATUS_OVERRUNERR; + (chan->callbacks->indicate_status)(chan, &stat); + } + if(scsr & MPC555_SERIAL_SCxSR_NF) + { + stat.which = CYGNUM_SERIAL_STATUS_NOISEERR; + (chan->callbacks->indicate_status)(chan, &stat); + } + if(scsr & MPC555_SERIAL_SCxSR_FE) + { + stat.which = CYGNUM_SERIAL_STATUS_FRAMEERR; + (chan->callbacks->indicate_status)(chan, &stat); + } + if(scsr & MPC555_SERIAL_SCxSR_PF) + { + stat.which = CYGNUM_SERIAL_STATUS_PARITYERR; + (chan->callbacks->indicate_status)(chan, &stat); + } +#endif } else {