00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef __pic_utils_h
00017 #define __pic_utils_h defined
00018
00019 #include <system.h>
00020 #include "config.h"
00021
00022
00023 #ifdef PORTB
00024 #define NUMBER_PORTS 2
00025 #endif
00026 #ifdef PORTC
00027 #undef NUMBER_PORTS
00028 #define NUMBER_PORTS 3
00029 #endif
00030 #ifdef PORTD
00031 #undef NUMBER_PORTS
00032 #define NUMBER_PORTS 4
00033 #endif
00034 #ifdef PORTE
00035 #undef NUMBER_PORTS
00036 #define NUMBER_PORTS 5
00037 #endif
00038
00039
00040
00041
00042
00043 #define int8 char
00044 #define uns8 unsigned char
00045 #define uns16 unsigned int
00046 #define int16 int
00047
00048
00049
00050
00051 extern uns8 port_shadow[NUMBER_PORTS];
00052 volatile uns8 port_array[NUMBER_PORTS] @PORTA;
00053 volatile uns8 tris_array[NUMBER_PORTS] @TRISA;
00054
00055
00056
00057
00058
00059
00060 #ifdef _PIC16F88
00061 #define turn_analog_inputs_off() ansel = 0
00062 #endif
00063 #ifdef _PIC16F876A
00064 #define turn_analog_inputs_off() adcon1 = 6
00065 #endif
00066 #ifdef _PIC18F4520
00067 #define turn_analog_inputs_off() adcon1 = 15
00068 #endif
00069 #ifdef _PIC18F2620
00070 #define turn_analog_inputs_off() adcon1 = 15
00071 #endif
00072 #ifndef turn_analog_inputs_off()
00073 #warning "!!! - See pic_utils.h for turning off analog inputs on your pic"
00074 #define turn_analog_intputs_off()
00075 #endif
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109 #define set_pin(port, pin) \
00110 set_bit(port_shadow[port - PORTA], pin); \
00111 port_array[port - PORTA] = port_shadow[port - PORTA];
00112
00113 #define clear_pin(port, pin) \
00114 clear_bit(port_shadow[port - PORTA], pin); \
00115 port_array[port - PORTA] = port_shadow[port - PORTA];
00116
00117 #define toggle_pin(port, pin) \
00118 port_shadow[port - PORTA] ^= (1 << (pin)); \
00119 port_array[port - PORTA] = port_shadow[port - PORTA];
00120
00121
00122 #define test_pin(port, pin) \
00123 ((port_array[port - PORTA] & (1 << pin)) != 0)
00124
00125 #define change_pin(port, pin, value) \
00126 if (value) { \
00127 set_pin(port, pin); \
00128 } else { \
00129 clear_pin(port, pin); \
00130 }
00131
00132 void set_pin_var(uns8 port, uns8 pin);
00133 void clear_pin_var(uns8 port, uns8 pin);
00134 void toggle_pin_var(uns8 port, uns8 pin);
00135 #define test_pin_var(port, pin) test_pin(port, pin)
00136 void change_pin_var(uns8 port, uns8 pin, bit value);
00137
00138
00139
00140
00141
00142
00143
00144 #define make_output(port, pin) clear_bit(tris_array[port - PORTA], pin)
00145 #define make_input(port, pin) set_bit(tris_array[port - PORTA], pin)
00146
00147 #define turn_peripheral_ints_on() set_bit(intcon, PEIE)
00148 #define turn_peripheral_ints_off() clear_bit(intcon, PEIE)
00149
00150 #define turn_global_ints_on() set_bit(intcon, GIE)
00151 #define turn_global_ints_off() clear_bit(intcon, GIE)
00152
00153
00154
00155 #define kill_interrupts() do { \
00156 bit store_gie; \
00157 intcon.GIE = 0; \
00158 } while (intcon.GIE != 0)
00159
00160
00161 #define start_crit_sec() \
00162 bit store_gie = intcon.GIE; \
00163 kill_interrupts()
00164
00165
00166 #define end_crit_sec() \
00167 intcon.GIE = store_gie
00168
00169 #ifdef PLATFORM_CLOCK 4000000
00170 #pragma CLOCK_FREQ 4000000
00171 #endif
00172 #ifdef PLATFORM_CLOCK 12000000
00173 #pragma CLOCK_FREQ 12000000
00174 #endif
00175 #ifdef PLATFORM_CLOCK 20000000
00176 #pragma CLOCK_FREQ 20000000
00177 #endif
00178 #ifdef PLATFORM_CLOCK 8000000
00179 #pragma CLOCK_FREQ 8000000
00180 #endif
00181
00182
00183 #ifdef _PIC16
00184 #define boostbloader() \
00185 kill_interrupts(); \
00186 delay_ms(250); \
00187 delay_ms(250); \
00188 delay_ms(250); \
00189 delay_ms(250); \
00190 asm bcf _pclath,3 \
00191 asm bcf _pclath,4 \
00192 asm data 0x2000
00193 #endif
00194
00195
00196 #ifdef _PIC18
00197 #define boostbloader() \
00198 kill_interrupts(); \
00199 delay_ms(250); \
00200 delay_ms(250); \
00201 delay_ms(250); \
00202 delay_ms(250); \
00203 asm reset
00204 #endif
00205
00206 #define MAGIC_BOOSTBLOADER_REQUEST 4
00207
00208
00209 #endif