Go to the documentation of this file.00001 #ifndef _DEV_USART_H_
00002 #define _DEV_USART_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063 #include <dev/uart.h>
00064
00074
00079
00083 #ifndef USART_RXBUFSIZ
00084 #define USART_RXBUFSIZ 256
00085 #endif
00086
00092 #ifndef USART_RXHIWMARK
00093 #define USART_RXHIWMARK 240
00094 #endif
00095
00101 #ifndef USART_RXLOWMARK
00102 #define USART_RXLOWMARK 208
00103 #endif
00104
00108 #ifndef USART_TXBUFSIZ
00109 #define USART_TXBUFSIZ 64
00110 #endif
00111
00117 #ifndef USART_TXHIWMARK
00118 #define USART_TXHIWMARK 56
00119 #endif
00120
00126 #ifndef USART_TXLOWMARK
00127 #define USART_TXLOWMARK 40
00128 #endif
00129
00130 #ifndef ENABLE
00131 #define ENABLE 1
00132 #endif
00133
00134 #ifndef DISABLE
00135 #define DISABLE 0
00136 #endif
00137
00138
00143 typedef struct _RINGBUF RINGBUF;
00144
00149 struct _RINGBUF {
00150
00155 uint8_t * volatile rbf_head;
00156
00161 uint8_t * volatile rbf_tail;
00162
00165 uint8_t *rbf_start;
00166
00169 uint8_t *rbf_last;
00170
00175 size_t rbf_siz;
00176
00181 volatile size_t rbf_cnt;
00182
00188 size_t rbf_lwm;
00189
00195 size_t rbf_hwm;
00196
00202 HANDLE rbf_que;
00203
00210 size_t volatile rbf_blockcnt;
00211
00217 uint8_t* volatile rbf_blockptr;
00218 };
00219
00227
00232 #define USART_INITSPEED 115200
00233
00237 #define USART_MF_RTSCONTROL 0x0001
00238 #define USART_MF_CTSSENSE 0x0002
00239 #define USART_MF_DTRCONTROL 0x0004
00240 #define USART_MF_DSRSENSE 0x0008
00241 #define USART_MF_DCDSENSE 0x0010
00243 #define USART_MF_SENSEMASK 0x001A
00244 #define USART_MF_CONTROLMASK 0x0005
00253 #define USART_MF_XONXOFF 0x0020
00254
00262 #define USART_MF_LOCALECHO 0x0040
00264 #define USART_MF_COOKEDMODE 0x0080
00266 #define USART_MF_NOBUFFER 0x0100
00267 #define USART_MF_LINEBUFFER 0x0200
00268 #define USART_MF_BUFFERMASK 0x0300
00270 #define USART_MF_HALFDUPLEX 0x0400
00272 #define USART_MF_BLOCKREAD 0x0800
00273 #define USART_MF_BLOCKWRITE 0x1000
00275 #define USART_MF_FLOWMASK (USART_MF_XONXOFF| USART_MF_HALFDUPLEX|USART_MF_LOCALECHO|USART_MF_BLOCKREAD|USART_MF_BLOCKWRITE)
00276
00277 #define USART_SF_RTSOFF 0x0001
00278 #define USART_SF_CTSOFF 0x0002
00279 #define USART_SF_DTROFF 0x0004
00280 #define USART_SF_DSROFF 0x0008
00281 #define USART_SF_DCDOFF 0x0010
00283 #define USART_SF_TXDISABLED 0x0040
00284 #define USART_SF_RXDISABLED 0x0080
00291 struct _USARTDCB {
00292
00295 uint32_t dcb_modeflags;
00296
00299 uint32_t dcb_statusflags;
00300
00303 uint32_t dcb_rtimeout;
00304
00307 uint32_t dcb_wtimeout;
00308
00311 RINGBUF dcb_tx_rbf;
00312
00315 RINGBUF dcb_rx_rbf;
00316
00319 uint8_t dcb_last_eol;
00320
00325 int (*dcb_init) (void);
00326
00330 int (*dcb_deinit) (void);
00331
00335 void (*dcb_tx_start) (void);
00336
00340 void (*dcb_rx_start) (void);
00341
00345 int (*dcb_set_flow_control) (uint32_t flags);
00346
00350 uint32_t(*dcb_get_flow_control) (void);
00351
00355 int (*dcb_set_speed) (uint32_t rate);
00356
00360 uint32_t(*dcb_get_speed) (void);
00361
00365 int (*dcb_set_data_bits) (uint8_t bits);
00366
00370 uint8_t(*dcb_get_data_bits) (void);
00371
00375 int (*dcb_set_parity) (uint8_t bits);
00376
00380 uint8_t(*dcb_get_parity) (void);
00381
00385 int (*dcb_set_stop_bits) (uint8_t bits);
00386
00390 uint8_t(*dcb_get_stop_bits) (void);
00391
00395 int (*dcb_set_status) (uint32_t flags);
00396
00400 uint32_t(*dcb_get_status) (void);
00401
00405 int (*dcb_set_clock_mode) (uint8_t mode);
00406
00410 uint8_t(*dcb_get_clock_mode) (void);
00411 };
00412
00416 typedef struct _USARTDCB USARTDCB;
00417
00421 extern int UsartInit(NUTDEVICE * dev);
00422 extern int UsartIOCtl(NUTDEVICE * dev, int req, void *conf);
00423 extern int UsartRead(NUTFILE * fp, void *buffer, int size);
00424 extern int UsartWrite(NUTFILE * fp, const void *buffer, int len);
00425 #ifdef __HARVARD_ARCH__
00426 extern int UsartWrite_P(NUTFILE * fp, PGM_P buffer, int len);
00427 #endif
00428 extern NUTFILE *UsartOpen(NUTDEVICE * dev, const char *name, int mode, int acc);
00429 extern int UsartClose(NUTFILE * fp);
00430 extern long UsartSize (NUTFILE *fp);
00431
00432 #endif