00001
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 #ifndef __pic_serial_h
00043 #define __pic_serial_h
00044
00045 #include "pic_utils.h"
00046 #include "config.h"
00047
00048
00049
00051 #define serial_handle_tx_isr() \
00052 if (pir1.TXIF) { serial_tx_isr(); }
00053
00054 #define serial_handle_rx_isr() \
00055 if (pir1.RCIF) { serial_rx_isr(); clear_bit( pir1, RCIF ); }
00056
00057
00067 void serial_tx_isr();
00068
00076 void serial_rx_isr();
00077
00091 void serial_setup(bit req_brgh, uns8 req_spbrg);
00092
00109 void serial_putc(uns8 c);
00110
00124 uns8 serial_getc(void);
00125
00133 void serial_print_str(char *str);
00134
00143 void serial_print_str(rom char *str);
00144
00152 void serial_print_int(uns16 i);
00153
00161 void serial_print_int_hex(uns8 i);
00162
00169 void serial_print_nl();
00170
00178 void serial_print_spc();
00179
00187 void serial_tx_full();
00188
00196 uns8 serial_tx_empty();
00197
00207 uns8 serial_rx_avail();
00208
00209 #if PLATFORM_CLOCK == 40000000
00210 #define SPBRG_9600 255
00211 #define SPBRG_19200 129
00212 #define SPBRG_57600 42
00213 #define SPBRG_115200 21
00214 #endif
00215
00216 #if PLATFORM_CLOCK == 20000000
00217 #define SPBRG_9600 129
00218 #define SPBRG_19200 64
00219 #define SPBRG_57600 21
00220 #define SPBRG_115200 10
00221 #endif
00222
00223 #if PLATFORM_CLOCK == 12000000
00224 #define SPBRG_9600 77
00225 #define SPBRG_19200 38
00226 #define SPBRG_57600 12
00227 #define SPBRG_115200 6
00228 #endif
00229
00230 #if PLATFORM_CLOCK == 8000000
00231 #define SPBRG_9600 51
00232 #define SPBRG_19200 25
00233 #define SPBRG_57600 8
00234 #define SPBRG_115200 3
00235 #endif
00236
00237 #if PLATFORM_CLOCK == 4000000
00238 #define SPBRG_9600 129
00239 #define SPBRG_19200 64
00240 #define SPBRG_57600 21
00241 #define SPBRG_115200 10
00242 #endif
00243
00244 #ifndef SPBRG_9600
00245 #warning "Don't know the SPBRG value for your clock speed."
00246 #warning "Did you set your PLATFORM_CLOCK etc in your config.h?"
00247 #endif
00248
00249 #define BRGH_HIGH_SPEED 1
00250 #define BRGH_LOW_SPEED 0
00251
00252 #ifndef SERIAL_TX_BUFFER_SIZE
00253 #error "pic_serial: SERIAL_TX_BUFFER_SIZE not defined in config.h"
00254 #endif
00255 #ifndef SERIAL_RX_BUFFER_SIZE
00256 #error "pic_serial: SERIAL_RX_BUFFER_SIZE not defined in config.h"
00257 #endif
00258
00259 #endif