00001
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 #ifndef __pic_serial_h
00042 #define __pic_serial_h
00043
00044 #include "pic_utils.h"
00045 #include "config.h"
00046
00047
00048
00050 #define serial_handle_tx_isr() \
00051 if (pir1.TXIF) { serial_tx_isr(); }
00052
00053 #define serial_handle_rx_isr() \
00054 if (pir1.RCIF) { serial_rx_isr(); clear_bit( pir1, RCIF ); }
00055
00056
00066 void serial_tx_isr();
00067
00075 void serial_rx_isr();
00076
00090 void serial_setup(bit req_brgh, uns8 req_spbrg);
00091
00108 void serial_putc(uns8 c);
00109
00123 uns8 serial_getc(void);
00124
00132 void serial_print_str(char *str);
00133
00142 void serial_print_str(rom char *str);
00143
00151 void serial_print_int(uns16 i);
00152
00160 void serial_print_int_hex(uns8 i);
00161
00170 void serial_print_int_hex_16bit(uns16 i);
00171
00178 void serial_print_nl();
00179
00187 void serial_print_spc();
00188
00196 void serial_tx_full();
00197
00205 uns8 serial_tx_empty();
00206
00216 uns8 serial_rx_avail();
00217
00218 #if PLATFORM_CLOCK == 40000000
00219 #define SPBRG_9600 255
00220 #define SPBRG_19200 129
00221 #define SPBRG_38400 64
00222 #define SPBRG_57600 42
00223 #define SPBRG_115200 21
00224 #endif
00225
00226 #if PLATFORM_CLOCK == 20000000
00227 #define SPBRG_9600 129
00228 #define SPBRG_19200 64
00229 #define SPBRG_38400 32
00230 #define SPBRG_57600 21
00231 #define SPBRG_115200 10
00232 #endif
00233
00234 #if PLATFORM_CLOCK == 16000000
00235 #define SPBRG_9600 103
00236 #define SPBRG_19200 51
00237 #define SPBRG_38400 25
00238 #define SPBRG_57600 16
00239 #define SPBRG_115200 8
00240 #endif
00241
00242 #if PLATFORM_CLOCK == 12000000
00243 #define SPBRG_9600 77
00244 #define SPBRG_19200 38
00245 #define SPBRG_38400 19
00246 #define SPBRG_57600 12
00247 #define SPBRG_115200 6
00248 #endif
00249
00250 #if PLATFORM_CLOCK == 8000000
00251 #define SPBRG_9600 51
00252 #define SPBRG_19200 25
00253 #define SPBRG_38400 12
00254 #define SPBRG_57600 8
00255 #define SPBRG_115200 3
00256 #endif
00257
00258 #if PLATFORM_CLOCK == 4000000
00259 #define SPBRG_9600 25
00260 #define SPBRG_19200 12
00261 #define SPBRG_38400 6
00262 #define SPBRG_57600 3
00263 #define SPBRG_115200 1
00264 #endif
00265
00266
00267
00268
00269 #ifndef SPBRG_9600
00270 #warning "Don't know the SPBRG value for your clock speed."
00271 #warning "Did you set your PLATFORM_CLOCK etc in your config.h?"
00272 #endif
00273
00274 #define BRGH_HIGH_SPEED 1
00275 #define BRGH_LOW_SPEED 0
00276
00277 #ifndef SERIAL_TX_BUFFER_SIZE
00278 #error "pic_serial: SERIAL_TX_BUFFER_SIZE not defined in config.h"
00279 #endif
00280 #ifndef SERIAL_RX_BUFFER_SIZE
00281 #error "pic_serial: SERIAL_RX_BUFFER_SIZE not defined in config.h"
00282 #endif
00283
00284 #if SERIAL_TX_BUFFER_SIZE > 254
00285 #error "pic_serial: SERIAL_TX_BUFFER_SIZE can't be bigger than 254 bytes (or one ram bank)"
00286 #endif
00287
00288 #if SERIAL_RX_BUFFER_SIZE > 254
00289 #error "pic_serial: SERIAL_RX_BUFFER_SIZE can't be bigger than 254 bytes (or one ram bank)"
00290 #endif
00291
00292
00293 #endif