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(); pir1.RCIF = 0; }
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 == 32000000
00125 #define SPBRG_9600 207
00126 #define SPBRG_19200 103
00127 #define SPBRG_38400 51
00128 #define SPBRG_57600 34
00129 #define SPBRG_115200 16
00130 #endif
00131
00132
00133
00134 #if PLATFORM_CLOCK == 20000000
00135 #define SPBRG_9600 129
00136 #define SPBRG_19200 64
00137 #define SPBRG_38400 32
00138 #define SPBRG_57600 21
00139 #define SPBRG_115200 10
00140 #endif
00141
00142 #if PLATFORM_CLOCK == 16000000
00143 #define SPBRG_9600 103
00144 #define SPBRG_19200 51
00145 #define SPBRG_38400 25
00146 #define SPBRG_57600 16
00147 #define SPBRG_115200 8
00148 #endif
00149
00150 #if PLATFORM_CLOCK == 12000000
00151 #define SPBRG_9600 77
00152 #define SPBRG_19200 38
00153 #define SPBRG_38400 19
00154 #define SPBRG_57600 12
00155 #define SPBRG_115200 6
00156 #endif
00157
00158 #if PLATFORM_CLOCK == 8000000
00159 #define SPBRG_9600 51
00160 #define SPBRG_19200 25
00161 #define SPBRG_38400 12
00162 #define SPBRG_57600 8
00163 #define SPBRG_115200 3
00164 #endif
00165
00166 #if PLATFORM_CLOCK == 4000000
00167 #define SPBRG_9600 25
00168 #define SPBRG_19200 12
00169 #define SPBRG_38400 6
00170 #define SPBRG_57600 3
00171 #define SPBRG_115200 1
00172 #endif
00173
00174
00175
00185 void serial_tx_isr(void);
00186
00187
00195 void serial_rx_isr(void);
00196
00208 #ifdef BRG16_REQUIRED
00209 void serial_setup(uns16 req_spbrg);
00210 #else
00211 void serial_setup(uns8 req_spbrg);
00212 #endif
00213
00229 void serial_putc(uns8 c);
00230
00244 uns8 serial_getc(void);
00245
00253 void serial_print_str(char *str);
00254
00255 void serial_print_var(char *str, uns16 i);
00256
00265 void serial_print_str_rom(rom char *str);
00266
00274 void serial_print_int(uns16 i);
00275
00283 void serial_print_int_hex(uns8 i);
00284
00293 void serial_print_int_hex_16bit(uns16 i);
00294
00301 void serial_print_nl();
00302
00310 void serial_print_spc();
00311
00319 void serial_tx_full();
00320
00328 uns8 serial_tx_empty(void);
00329
00339 uns8 serial_rx_avail(void);
00340
00346 uns8 even_7bit_parity(uns8 in);
00347
00353 uns8 odd_7bit_parity(uns8 in);
00354
00355
00356
00357 #ifndef SPBRG_9600
00358 #warning "Don't know the SPBRG value for your clock speed."
00359 #warning "Did you set your PLATFORM_CLOCK etc in your config.h?"
00360 #endif
00361
00362 #define BRGH_HIGH_SPEED 1
00363 #define BRGH_LOW_SPEED 0
00364
00365 #ifndef SERIAL_TX_BUFFER_SIZE
00366 #error "pic_serial: SERIAL_TX_BUFFER_SIZE not defined in config.h"
00367 #endif
00368 #ifndef SERIAL_RX_BUFFER_SIZE
00369 #error "pic_serial: SERIAL_RX_BUFFER_SIZE not defined in config.h"
00370 #endif
00371
00372 #if SERIAL_TX_BUFFER_SIZE > 254
00373 #error "pic_serial: SERIAL_TX_BUFFER_SIZE can't be bigger than 254 bytes (or one ram bank)"
00374 #endif
00375
00376 #if SERIAL_RX_BUFFER_SIZE > 254
00377 #error "pic_serial: SERIAL_RX_BUFFER_SIZE can't be bigger than 254 bytes (or one ram bank)"
00378 #endif
00379
00380
00381 #endif