00001
00051 #ifndef __pic_serial_h
00052 #define __pic_serial_h
00053
00054 #include "pic_utils.h"
00055 #include "config.h"
00056
00057
00058
00060 #define serial_handle_tx_isr() \
00061 if (pir1.TXIF) { serial_tx_isr(); }
00062
00063 #define serial_handle_rx_isr() \
00064 if (pir1.RCIF) { serial_rx_isr(); clear_bit( pir1, RCIF ); }
00065
00066
00076 void serial_tx_isr();
00077
00085 void serial_rx_isr();
00086
00100 void serial_setup(bit req_brgh, uns8 req_spbrg);
00101
00118 void serial_putc(uns8 c);
00119
00133 uns8 serial_getc(void);
00134
00142 void serial_print_str(char *str);
00143
00152 void serial_print_str(rom char *str);
00153
00161 void serial_print_int(uns16 i);
00162
00170 void serial_print_int_hex(uns8 i);
00171
00180 void serial_print_int_hex_16bit(uns16 i);
00181
00188 void serial_print_nl();
00189
00197 void serial_print_spc();
00198
00206 void serial_tx_full();
00207
00215 uns8 serial_tx_empty();
00216
00226 uns8 serial_rx_avail();
00227
00228 #if PLATFORM_CLOCK == 40000000
00229 #define SPBRG_9600 255
00230 #define SPBRG_19200 129
00231 #define SPBRG_38400 64
00232 #define SPBRG_57600 42
00233 #define SPBRG_115200 21
00234 #endif
00235
00236 #if PLATFORM_CLOCK == 20000000
00237 #define SPBRG_9600 129
00238 #define SPBRG_19200 64
00239 #define SPBRG_38400 32
00240 #define SPBRG_57600 21
00241 #define SPBRG_115200 10
00242 #endif
00243
00244 #if PLATFORM_CLOCK == 16000000
00245 #define SPBRG_9600 103
00246 #define SPBRG_19200 51
00247 #define SPBRG_38400 25
00248 #define SPBRG_57600 16
00249 #define SPBRG_115200 8
00250 #endif
00251
00252 #if PLATFORM_CLOCK == 12000000
00253 #define SPBRG_9600 77
00254 #define SPBRG_19200 38
00255 #define SPBRG_38400 19
00256 #define SPBRG_57600 12
00257 #define SPBRG_115200 6
00258 #endif
00259
00260 #if PLATFORM_CLOCK == 8000000
00261 #define SPBRG_9600 51
00262 #define SPBRG_19200 25
00263 #define SPBRG_38400 12
00264 #define SPBRG_57600 8
00265 #define SPBRG_115200 3
00266 #endif
00267
00268 #if PLATFORM_CLOCK == 4000000
00269 #define SPBRG_9600 25
00270 #define SPBRG_19200 12
00271 #define SPBRG_38400 6
00272 #define SPBRG_57600 3
00273 #define SPBRG_115200 1
00274 #endif
00275
00276
00277
00278
00279 #ifndef SPBRG_9600
00280 #warning "Don't know the SPBRG value for your clock speed."
00281 #warning "Did you set your PLATFORM_CLOCK etc in your config.h?"
00282 #endif
00283
00284 #define BRGH_HIGH_SPEED 1
00285 #define BRGH_LOW_SPEED 0
00286
00287 #ifndef SERIAL_TX_BUFFER_SIZE
00288 #error "pic_serial: SERIAL_TX_BUFFER_SIZE not defined in config.h"
00289 #endif
00290 #ifndef SERIAL_RX_BUFFER_SIZE
00291 #error "pic_serial: SERIAL_RX_BUFFER_SIZE not defined in config.h"
00292 #endif
00293
00294 #if SERIAL_TX_BUFFER_SIZE > 254
00295 #error "pic_serial: SERIAL_TX_BUFFER_SIZE can't be bigger than 254 bytes (or one ram bank)"
00296 #endif
00297
00298 #if SERIAL_RX_BUFFER_SIZE > 254
00299 #error "pic_serial: SERIAL_RX_BUFFER_SIZE can't be bigger than 254 bytes (or one ram bank)"
00300 #endif
00301
00302
00303 #endif