X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Fser.h;h=1054f4fdd3ec16abce8f59888840d0e26d2e0374;hb=4be63e9bf292129a3d9771025528d254646180fe;hp=f9ff2ddd639afe3e032eed2431be38f4fd845fae;hpb=bcf38f772b397e7a8ba781a69aacb9380e54b32a;p=bertos.git diff --git a/drv/ser.h b/drv/ser.h old mode 100755 new mode 100644 index f9ff2ddd..1054f4fd --- a/drv/ser.h +++ b/drv/ser.h @@ -1,9 +1,34 @@ /** * \file * * * \brief High level serial I/O API @@ -14,6 +39,33 @@ /*#* *#* $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. + *#* + *#* Revision 1.29 2006/09/13 13:59:11 bernie + *#* Documentation fixes. + *#* + *#* Revision 1.28 2006/07/21 10:58:00 batt + *#* Use timer_clock() instead of obsolete timer_ticks(). + *#* *#* Revision 1.27 2006/07/19 12:56:26 bernie *#* Convert to new Doxygen style. *#* @@ -104,6 +156,23 @@ /** \name Serial Error/status flags. */ /*\{*/ +#if CPU_ARM + typedef uint32_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 ARM USART Channel Status Register (US_CSR). + */ + #define SERRF_RXSROVERRUN BV(5) /**< Rx shift register overrun */ + #define SERRF_FRAMEERROR BV(6) /**< Stop bit missing */ + #define SERRF_PARITYERROR BV(7) /**< Parity error */ + #define SERRF_NOISEERROR 0 /**< Unsupported */ + #if CPU_AVR typedef uint8_t serstatus_t; @@ -155,7 +224,10 @@ #endif /*\}*/ -/** Mask to group all RX errors. */ +/** + * \name Masks to group TX/RX errors. + * \{ + */ #define SERRF_RX \ ( SERRF_RXFIFOOVERRUN \ | SERRF_RXTIMEOUT \ @@ -163,10 +235,16 @@ | SERRF_PARITYERROR \ | SERRF_FRAMEERROR \ | SERRF_NOISEERROR) - -/** Mask to group all TX errors. */ #define SERRF_TX (SERRF_TXTIMEOUT) +/*\}*/ +/** + * \name LSB or MSB first data order, used with SPI AVR serial + * \{ + */ +#define SER_MSB_FIRST 0 +#define SER_LSB_FIRST 1 +/*\}*/ /** * \name Parity settings for ser_setparity(). @@ -174,8 +252,8 @@ * \note Values are AVR-specific for performance reasons. * Other processors should either decode them or * redefine these macros. + * \{ */ -/*\{*/ #define SER_PARITY_NONE 0 #define SER_PARITY_EVEN 2 #define SER_PARITY_ODD 3 @@ -188,7 +266,11 @@ */ enum { -#if CPU_AVR_ATMEGA64 || CPU_AVR_ATMEGA128 +#if CPU_ARM_AT91 + SER_UART0, + SER_UART1, + SER_SPI, +#if CPU_AVR_ATMEGA64 || CPU_AVR_ATMEGA128 || CPU_AVR_ATMEGA1281 SER_UART0, SER_UART1, SER_SPI, @@ -238,14 +320,14 @@ typedef struct Serial /* \} */ #if CONFIG_SER_RXTIMEOUT != -1 - mtime_t rxtimeout; + ticks_t rxtimeout; #endif #if CONFIG_SER_TXTIMEOUT != -1 - mtime_t txtimeout; + ticks_t txtimeout; #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; @@ -283,6 +365,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 */