00001
00002
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
00078 #ifndef __pic_serial_h
00079 #define __pic_serial_h
00080
00081 #include "pic_utils.h"
00082 #include "config.h"
00083
00084
00085
00087 #define serial_handle_tx_isr() \
00088 if (pir1.TXIF) { serial_tx_isr(); }
00089
00090 #define serial_handle_rx_isr() \
00091 if (pir1.RCIF) { serial_rx_isr(); clear_bit( pir1, RCIF ); }
00092
00093 #define serial_print_debug(string, variable) serial_print_str(string); serial_print_int(variable); serial_print_nl();
00094
00095
00096 #if PLATFORM_CLOCK == 64000000
00097 #define BRG16_REQUIRED
00098 #define SPBRG_9600 1666
00099 #define SPBRG_19200 832
00100 #define SPBRG_38400 416
00101 #define SPBRG_57600 277
00102 #define SPBRG_115200 138
00103 #endif
00104
00105 #if PLATFORM_CLOCK == 48000000
00106 #define BRG16_REQUIRED
00107 #define SPBRG_2400 4999
00108 #define SPBRG_4800 2499
00109 #define SPBRG_9600 1249
00110 #define SPBRG_19200 624
00111 #define SPBRG_38400 312
00112 #define SPBRG_57600 207
00113 #define SPBRG_115200 103
00114 #endif
00115
00116 #if PLATFORM_CLOCK == 40000000
00117 #define SPBRG_9600 255
00118 #define SPBRG_19200 129
00119 #define SPBRG_38400 64
00120 #define SPBRG_57600 42
00121 #define SPBRG_115200 21
00122 #endif
00123
00124 #if PLATFORM_CLOCK == 20000000
00125 #define SPBRG_9600 129
00126 #define SPBRG_19200 64
00127 #define SPBRG_38400 32
00128 #define SPBRG_57600 21
00129 #define SPBRG_115200 10
00130 #endif
00131
00132 #if PLATFORM_CLOCK == 16000000
00133 #define SPBRG_9600 103
00134 #define SPBRG_19200 51
00135 #define SPBRG_38400 25
00136 #define SPBRG_57600 16
00137 #define SPBRG_115200 8
00138 #endif
00139
00140 #if PLATFORM_CLOCK == 12000000
00141 #define SPBRG_9600 77
00142 #define SPBRG_19200 38
00143 #define SPBRG_38400 19
00144 #define SPBRG_57600 12
00145 #define SPBRG_115200 6
00146 #endif
00147
00148 #if PLATFORM_CLOCK == 8000000
00149 #define SPBRG_9600 51
00150 #define SPBRG_19200 25
00151 #define SPBRG_38400 12
00152 #define SPBRG_57600 8
00153 #define SPBRG_115200 3
00154 #endif
00155
00156 #if PLATFORM_CLOCK == 4000000
00157 #define SPBRG_9600 25
00158 #define SPBRG_19200 12
00159 #define SPBRG_38400 6
00160 #define SPBRG_57600 3
00161 #define SPBRG_115200 1
00162 #endif
00163
00164
00165
00175 void serial_tx_isr();
00176
00184 void serial_rx_isr();
00185
00197 #ifdef BRG16_REQUIRED
00198 void serial_setup(uns16 req_spbrg);
00199 #else
00200 void serial_setup(uns8 req_spbrg);
00201 #endif
00202
00218 void serial_putc(uns8 c);
00219
00233 uns8 serial_getc(void);
00234
00242 void serial_print_str(char *str);
00243
00244 void serial_print_var(char *str, uns16 i);
00245
00254 void serial_print_str(rom char *str);
00255
00263 void serial_print_int(uns16 i);
00264
00272 void serial_print_int_hex(uns8 i);
00273
00282 void serial_print_int_hex_16bit(uns16 i);
00283
00290 void serial_print_nl();
00291
00299 void serial_print_spc();
00300
00308 void serial_tx_full();
00309
00317 uns8 serial_tx_empty();
00318
00328 uns8 serial_rx_avail();
00329
00330
00331
00332
00333 #ifndef SPBRG_9600
00334 #warning "Don't know the SPBRG value for your clock speed."
00335 #warning "Did you set your PLATFORM_CLOCK etc in your config.h?"
00336 #endif
00337
00338 #define BRGH_HIGH_SPEED 1
00339 #define BRGH_LOW_SPEED 0
00340
00341 #ifndef SERIAL_TX_BUFFER_SIZE
00342 #error "pic_serial: SERIAL_TX_BUFFER_SIZE not defined in config.h"
00343 #endif
00344 #ifndef SERIAL_RX_BUFFER_SIZE
00345 #error "pic_serial: SERIAL_RX_BUFFER_SIZE not defined in config.h"
00346 #endif
00347
00348 #if SERIAL_TX_BUFFER_SIZE > 254
00349 #error "pic_serial: SERIAL_TX_BUFFER_SIZE can't be bigger than 254 bytes (or one ram bank)"
00350 #endif
00351
00352 #if SERIAL_RX_BUFFER_SIZE > 254
00353 #error "pic_serial: SERIAL_RX_BUFFER_SIZE can't be bigger than 254 bytes (or one ram bank)"
00354 #endif
00355
00356
00357 #endif