OSDN Git Service

[RFAMP] Add power-management of RF-PRE-AMP.
[openi2cradio/OpenI2CRadio.git] / iodef.h
1 /*
2  * OpenI2CRADIO
3  * I/O Port defines.
4  * Copyright (C) 2013-06-10 K.Ohta <whatisthis.sowhat ai gmail.com>
5  * License: GPL2+LE
6  *
7  *  This program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2,
10  *  or (at your option) any later version.
11  *  This library / program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14  *  See the GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this library; see the file COPYING. If not, write to the
18  *  Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
19  *  MA 02110-1301, USA.
20  *
21  *  As a special exception, if you link this(includeed from sdcc) library
22  *  with other files, some of which are compiled with SDCC,
23  *  to produce an executable, this library does not by itself cause
24  *  the resulting executable to be covered by the GNU General Public License.
25  *  This exception does not however invalidate any other reasons why
26  *  the executable file might be covered by the GNU General Public License.
27  */
28
29 #ifndef IODEF_H
30 #define IODEF_H
31 #ifdef __SDCC
32 #else
33 #include <xc.h>
34 #define _XTAL_FREQ 8000000
35 #endif
36 #ifdef  __cplusplus
37 extern "C" {
38 #endif
39
40 /*
41  * LCD(ACM1602 Type)
42  */
43 // If you use I2C-Type ACM1602, You should define, otherwise #undef.
44 #undef _USE_I2C_1602
45 #define _LCD_IF_4BIT
46
47 /*
48  * Machine depended flags
49  */
50 #if defined(__SDCC)
51 #if defined(pic18f23k22) || defined(pic18f24k22) || defined(pic18f25k22) || defined(pic18f26k22)
52 #define _I2C_IO_TWO_MSSPS
53 #define _PIO_HAS_THREE
54 #endif
55
56 #if defined(pic18f23k20) || defined(pic18f24k20) || defined(pic18f25k20) || defined(pic18f26k20)
57 #define _I2C_IO_ONE_MSSP
58 #define _PIO_HAS_THREE
59 #endif
60
61 #if defined(pic18f43k20) || defined(pic18f44k20) || defined(pic18f45k20) || defined(pic18f46k20)
62 #define _I2C_IO_ONE_MSSP
63 #define _PIO_HAS_FIVE
64 #endif
65 #else // __XC
66 #if defined(__18F23K22) || defined(__18F24k22) || defined(__18F25K22) || defined(__18F26K22)
67 #define _I2C_IO_TWO_MSSPS
68 #define _PIO_HAS_THREE
69 #endif
70
71 #if defined(__18F23K20) || defined(__18F24K20) || defined(__18F25K20) || defined(__18F26K20)
72 #define _I2C_IO_ONE_MSSP
73 #define _PIO_HAS_THREE
74 #endif
75
76 #if defined(__18F43K20) || defined(__18F44K20) || defined(__18F45K20) || defined(__18F46K20)
77 #define _I2C_IO_ONE_MSSP
78 #define _PIO_HAS_FIVE
79 #endif
80 #endif
81
82 /*
83  * MAP OF IOPORT
84  *
85  * RE3: VPP (ICSP Programming Voltage) / MCLR, Dont use for I/O.
86  *
87  * PORTA/B/C USED basic.
88  *
89  * PORTA:
90  *        RA0 : KO0
91  *        RA1 : KO1
92  *        RA2 : KO2
93  *        RA3 : KO7
94  *        RA2-RA5 : READ
95  *        RA6-RA7 : Used for CLOCK, connect to 8MHz resonator.
96  *
97  * PORTB:
98  *        RB0 : KI0
99  *        RB1 : KI1
100  *        RB2 : KI2
101  *        RB3 : KI3
102  *        RB4 : Power Key
103  *        RB5-RB7 : FOR ICSP
104  *
105  * PORTC: 
106  *        RC0 : RF AMP SEL bit0
107  *        RC1 : LCD-Backlight
108  *        RC2 : RF AMP SEL bit1
109  *        RC3-RC4 : SCL/SDA
110  *        RC5 : Reserved
111  *        RC6-RC7 : USART
112  *
113  * In addition, usage of PARALLEL-LCD,You should use 40Pin(or greater) PIC.
114  * ON 4BIT LCD I/F:
115  *
116  * PORTD: 
117  *        RD0: LCD RS
118  *        RD1: LCD RW
119  *        RD2: LCD EN
120  *        RD3: POWER LAMP
121  *        RD4-RD7: LCD DB4-DB7
122  *
123  * PORTE:
124  *        RE0:
125  *        RE1:
126  *        RE2: ADC(IN) to measure battery
127  *        RE3: VPP (ICSP Programming Voltage) / MCLR
128  */
129
130 #define TRIS_A_VAL   0b11000000
131 #define AN_A_VAL     0b00000000
132 #define TRIS_B_VAL   0b11111111 /* PORTB as INPUT.*/
133 #define AN_B_VAL     0b00000000
134 #define TRIS_C_VAL_O 0b00011000 /* FOR I2C-WRITE */
135 #define TRIS_C_VAL_I  0b00011000 /* FOR I2C-WRITE */
136 #define AN_C_VAL     0b00000000
137 #define TRIS_D_VAL   0b00000000 /* FOR OUTPUT, LCD(Optional) */
138 #ifdef _LCD_IF_4BIT
139  #define TRIS_D_RVAL 0xf0 /* FOR INPUT*/
140 #else
141  #define TRIS_D_RVAL 0b11111111 /* FOR INPUT*/
142 #endif
143 #define TRIS_E_VAL   0b00000100 /* FOR OUTPUT, ADC, PSP=OFF */
144 #define _BATT_ADC AN7
145 #define _ADC_INITF ANS7
146 #define _ADCH_INITF 0x00
147 #define _PORT_MUTE LATEbits.LATE0
148 #define _PORT_RADIOPOW LATEbits.LATE1
149 //#ifdef __SDCC
150 #define _LCD_BACKLIGHT LATC
151 #define _LCD_BACKLIGHT_BIT b1
152 #define _LCD_BACKLIGHT_TRIS TRISC
153 //#else
154 //#define _LCD_BACKLIGHT _PORTC_RC2_MASK
155 //#endif // __SDCC
156
157 #define _LCD_PORT LATC
158
159 /*
160  * RF Preamp
161  */
162     enum {
163         RFAMP_FM = 1,
164         RFAMP_MWLW = 2,
165         RFAMP_SW = 1
166         /* 3 = Reserve*/
167     };
168 #define _RFAMP_SEL_B0 LATCbits.LATC0
169 #define _RFAMP_SEL_B1 LATCbits.LATC2
170
171 #define _AM_STATLAMP  LATAbits.LATA4
172 #define _FM_STATLAMP  LATAbits.LATA5
173 #define _POW_STATLAMP LATDbits.LATD3
174
175
176 #define _KEY_SENDPORT LATA
177 #define _KEY_RECVPORT PORTB
178 #define _KEY_GRP1MASK 0x01
179 #define _KEY_GRP2MASK 0x02
180 #define _KEY_GRP3MASK 0x04
181 #define _KEY_GRP4MASK 0x08
182 #define _KEY_SENDPORTMASK (_KEY_GRP1MASK | _KEY_GRP2MASK | _KEY_GRP3MASK | _KEY_GRP4MASK)
183 #define _KEY_SEND_GRP1 LATAbits.LATA0
184 #define _KEY_SEND_GRP2 LATAbits.LATA1
185 #define _KEY_SEND_GRP3 LATAbits.LATA2
186 #define _KEY_SEND_GRP4 LATAbits.LATA3
187 #define _KEY_POS1MASK(p) p.b0
188 #define _KEY_POS2MASK(p) p.b1
189 #define _KEY_POS3MASK(p) p.b2
190 #define _KEY_POS4MASK(p) p.b3
191
192 typedef  union {
193     struct {
194     unsigned BIT0A:1;
195     unsigned BIT1A:1;
196     unsigned BIT2A:1;
197     unsigned BIT3A:1;
198
199     unsigned BIT0B:1;
200     unsigned BIT1B:1;
201     unsigned BIT2B:1;
202     unsigned BIT3B:1;
203
204     unsigned BIT0C:1;
205     unsigned BIT1C:1;
206     unsigned BIT2C:1;
207     unsigned BIT3C:1;
208
209     unsigned BIT0D:1;
210     unsigned BIT1D:1;
211     unsigned BIT2D:1;
212     unsigned BIT3D:1;
213
214     };
215     unsigned char byte[2];
216 } keyin_defs;
217
218 enum {
219     charcode_null = 0,
220     charcode_1,
221     charcode_2,
222     charcode_3,
223     charcode_4,
224     charcode_5,
225     charcode_6,
226     charcode_7,
227     charcode_8,
228     charcode_9,
229     charcode_a,
230     charcode_b,
231     charcode_c,
232     charcode_d,
233     charcode_e,
234     charcode_f,
235     charcode_0,
236     // Special keys was removed.
237 };
238
239 /*
240  * LCD Control: Default register values, You should re-define in iodef.h if you need.
241  */
242
243
244 #ifdef _LCD_IF_4BIT
245 /*
246  * 4bit Interface, Used Below:
247  * PORTD: RD0 : RS
248  *        RD1 : RW
249  *        RD2 : EN
250  *        RD4-RD7: DATA(4-7).
251  */
252  #ifndef _LCDPORT_DATA
253 #define _LCDPORT_DATA PORTD
254 #define _LCDPORT_TRIS_DATA TRISD
255 #define _LCDPORT_LATCH_DATA LATD
256 #define _LCDPORT_BUSYMASK 0b10000000
257 #define _LCDPORT_READMASK TRIS_D_RVAL
258 #define _LCDPORT_DATA_SHIFT 4
259  #endif
260
261  #ifndef _LCDPORT_CONT
262 #define _LCDPORT_CONT PORTD
263 #define _LCDPORT_TRIS_CONT TRISD
264 #define _LCDPORT_CONT_LATCH LATD
265 #define _LCDPORT_CONT_RSbit b0
266 #define _LCDPORT_CONT_RWbit b1
267 #define _LCDPORT_CONT_ENbit b2
268 #define _LCDPORT_CONT_BLbit b3
269 #ifdef __SDCC
270 #define _LCDPORT_CONT_RS LATDbits.LATD0
271 #define _LCDPORT_CONT_RW LATDbits.LATD1
272 #define _LCDPORT_CONT_EN LATDbits.LATD2
273 #else
274 #define _LCDPORT_CONT_RS _PORTD_RD0_MASK
275 #define _LCDPORT_CONT_RW _PORTD_RD1_MASK
276 #define _LCDPORT_CONT_EN _PORTD_RD2_MASK
277 #endif
278 #endif
279
280 #else
281 /*
282  * 8bit Interface, Used Below:
283  * PORTE: RE0 : RS
284  *        RE1 : RW
285  *        RE2 : EN
286  * PORTD: RD0-RD7: DATA(0-7).
287  */
288 // 8bit I/F
289  #ifndef _LCDPORT_DATA
290 #define _LCDPORT_DATA PORTD
291 #define _LCDPORT_TRIS_DATA TRISD
292 #define _LCDPORT_LATCH_DATA LATD
293 #define _LCDPORT_BUSYMASK 0b10000000
294 #define _LCDPORT_READMASK TRIS_D_RVAL
295  #endif
296
297  #ifndef _LCDPORT_CONT
298 #define _LCDPORT_CONT PORTE
299 #define _LCDPORT_TRIS_CONT TRISE
300 #define _LCDPORT_CONT_RSbit 0
301 #define _LCDPORT_CONT_RWbit 1
302 #define _LCDPORT_CONT_ENbit 2
303 #define _LCDPORT_CONT_RS _PORTE_RE0
304 #define _LCDPORT_CONT_RW _PORTE_RE1
305 #define _LCDPORT_CONT_EN _PORTE_RE2
306 #define _LCDPORT_CONT_LATCH LATE
307  #endif
308 #endif
309
310 #ifdef  __cplusplus
311 }
312 #endif
313
314 #endif  /* IODEF_H */
315