X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Fser.h;h=6a6264241def7d8f0afd86d7c88f87ec72cfffb6;hb=53fbc677d700258963dce852099682951ff94a73;hp=27f022cd947b6ab532a8c57922e6e7b0a7edfc7f;hpb=e40b7f1ecfc7be6267192d54b0650960dda84d6d;p=bertos.git diff --git a/drv/ser.h b/drv/ser.h old mode 100755 new mode 100644 index 27f022cd..6a626424 --- a/drv/ser.h +++ b/drv/ser.h @@ -1,9 +1,34 @@ /** * \file * * * \brief High level serial I/O API @@ -14,6 +39,24 @@ /*#* *#* $Log$ + *#* Revision 1.36 2007/01/29 11:30:30 batt + *#* Reimplement ser_clearstatus as a macro. + *#* + *#* Revision 1.35 2007/01/27 20:47:12 batt + *#* Add clear status. + *#* + *#* Revision 1.34 2006/11/20 15:07:40 batt + *#* Revert unneeded locked functions. + *#* + *#* Revision 1.33 2006/11/17 17:03:58 batt + *#* Implement ser_setstatus and ser_getstatus as functions to avoid race conditions. + *#* + *#* Revision 1.32 2006/11/17 16:01:12 batt + *#* Serial status MUST be volatile. + *#* + *#* Revision 1.31 2006/09/13 18:22:48 bernie + *#* Typo. + *#* *#* Revision 1.30 2006/09/13 18:21:23 bernie *#* Add configurable SPI pin mapping. *#* @@ -105,64 +148,15 @@ #ifndef DRV_SER_H #define DRV_SER_H + #include #include -#include /* BV() */ -#include -#include - -/** \name Serial Error/status flags. */ -/*\{*/ -#if CPU_AVR - typedef uint8_t serstatus_t; - - /* Software errors */ - #define SERRF_RXFIFOOVERRUN BV(0) /**< Rx FIFO buffer overrun */ - #define SERRF_RXTIMEOUT BV(5) /**< Receive timeout */ - #define SERRF_TXTIMEOUT BV(6) /**< Transmit timeout */ - /* - * Hardware errors. - * These flags map directly to the AVR UART Status Register (USR). - */ - #define SERRF_RXSROVERRUN BV(3) /**< Rx shift register overrun */ - #define SERRF_FRAMEERROR BV(4) /**< Stop bit missing */ - #define SERRF_PARITYERROR BV(7) /**< Parity error */ - #define SERRF_NOISEERROR 0 /**< Unsupported */ -#elif CPU_DSP56K - typedef uint16_t serstatus_t; - - /* Software errors */ - #define SERRF_RXFIFOOVERRUN BV(0) /**< Rx FIFO buffer overrun */ - #define SERRF_RXTIMEOUT BV(1) /**< Receive timeout */ - #define SERRF_TXTIMEOUT BV(2) /**< Transmit timeout */ - - /* - * Hardware errors. - * These flags map directly to the SCI Control Register. - */ - #define SERRF_PARITYERROR BV(8) /**< Parity error */ - #define SERRF_FRAMEERROR BV(9) /**< Stop bit missing */ - #define SERRF_NOISEERROR BV(10) /**< Noise error */ - #define SERRF_RXSROVERRUN BV(11) /**< Rx shift register overrun */ -#elif OS_HOSTED - typedef uint16_t serstatus_t; +#include CPU_HEADER(ser) - /* Software errors */ - #define SERRF_RXFIFOOVERRUN BV(0) /**< Rx FIFO buffer overrun */ - #define SERRF_RXTIMEOUT BV(1) /**< Receive timeout */ - #define SERRF_TXTIMEOUT BV(2) /**< Transmit timeout */ +#include - /* Hardware errors */ - #define SERRF_RXSROVERRUN 0 /**< Unsupported in emulated serial port. */ - #define SERRF_FRAMEERROR 0 /**< Unsupported in emulated serial port. */ - #define SERRF_PARITYERROR 0 /**< Unsupported in emulated serial port. */ - #define SERRF_NOISEERROR 0 /**< Unsupported in emulated serial port. */ -#else - #error unknown architecture -#endif -/*\}*/ /** * \name Masks to group TX/RX errors. @@ -178,8 +172,8 @@ #define SERRF_TX (SERRF_TXTIMEOUT) /*\}*/ -/** LSB or MSB first data order, used with SPI AVR serial */ - * \name LSB or MSB first data order, used with SPI AVR serial +/** + * \name LSB or MSB first data order for SPI driver. * \{ */ #define SER_MSB_FIRST 0 @@ -199,35 +193,6 @@ #define SER_PARITY_ODD 3 /*\}*/ -/** - * \name Serial hw numbers - * - * \{ - */ -enum -{ -#if CPU_AVR_ATMEGA64 || CPU_AVR_ATMEGA128 - SER_UART0, - SER_UART1, - SER_SPI, -#elif CPU_AVR_ATMEGA103 || CPU_AVR_ATMEGA8 - SER_UART0, - SER_SPI, -#elif CPU_DSP56K - // \todo since we now support "fake" multiplexed serials, this should be moved to hw.h - SER_UART0, - SER_PUNTALI, - SER_BARCODE, -#elif OS_HOSTED - SER_UART0, - SER_UART1, -#else - #error unknown architecture -#endif - SER_CNT /**< Number of serial ports */ -}; -/*\}*/ - struct SerialHardware; @@ -263,7 +228,7 @@ typedef struct Serial #endif /** Holds the flags defined above. Will be 0 when no errors have occurred. */ - serstatus_t status; + volatile serstatus_t status; /** Low-level interface to hardware. */ struct SerialHardware* hw; @@ -301,6 +266,7 @@ extern void ser_close(struct Serial *port); */ #define ser_getstatus(h) ((h)->status) #define ser_setstatus(h, x) ((h)->status = (x)) +#define ser_clearstatus(h) ser_setstatus(h, 0) /* \} */ #endif /* DRV_SER_H */