Mercurial > ecos-v3_0-branch
changeset 2540:d3fd907caafd
* 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
| author | asl |
|---|---|
| date | Tue, 02 Sep 2008 05:56:02 +0000 |
| parents | 11949247abb3 |
| children | b93af20fcb81 |
| files | packages/devs/serial/powerpc/mpc555/current/ChangeLog packages/devs/serial/powerpc/mpc555/current/cdl/ser_powerpc_mpc555.cdl packages/devs/serial/powerpc/mpc555/current/src/mpc555_serial_with_ints.c |
| diffstat | 3 files changed, 37 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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 <steven.clugston@ncl.ac.uk> + + * 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 <steven.clugston@ncl.ac.uk> * Refactored cme555 package to more generic mpc555
--- 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."
--- 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 {
