46a766c16f5744a92d0c0db4e4a8bec6870beda0
[fw/altos] / src / telelco-v2.0 / ao_pins.h
1 /*
2  * Copyright © 2012 Keith Packard <keithp@keithp.com>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with this program; if not, write to the Free Software Foundation, Inc.,
16  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
17  */
18
19 #ifndef _AO_PINS_H_
20 #define _AO_PINS_H_
21
22 /* 8MHz High speed external crystal */
23 #define AO_HSE                  8000000
24
25 /* PLLVCO = 96MHz (so that USB will work) */
26 #define AO_PLLMUL               12
27 #define AO_RCC_CFGR_PLLMUL      (STM_RCC_CFGR_PLLMUL_12)
28
29 #define AO_CC1200_FOSC          40000000
30
31 /* SYSCLK = 32MHz (no need to go faster than CPU) */
32 #define AO_PLLDIV               3
33 #define AO_RCC_CFGR_PLLDIV      (STM_RCC_CFGR_PLLDIV_3)
34
35 /* HCLK = 32MHz (CPU clock) */
36 #define AO_AHB_PRESCALER        1
37 #define AO_RCC_CFGR_HPRE_DIV    STM_RCC_CFGR_HPRE_DIV_1
38
39 /* Run APB1 at 16MHz (HCLK/2) */
40 #define AO_APB1_PRESCALER       2
41 #define AO_RCC_CFGR_PPRE1_DIV   STM_RCC_CFGR_PPRE2_DIV_2
42
43 /* Run APB2 at 16MHz (HCLK/2) */
44 #define AO_APB2_PRESCALER       2
45 #define AO_RCC_CFGR_PPRE2_DIV   STM_RCC_CFGR_PPRE2_DIV_2
46
47 #define HAS_EEPROM              1
48 #define USE_INTERNAL_FLASH      1
49 #define USE_EEPROM_CONFIG       1
50 #define USE_STORAGE_CONFIG      0
51 #define HAS_USB                 1
52 #define HAS_BEEP                1
53 #define HAS_RADIO               1
54 #define HAS_RADIO_RATE          1
55 #define HAS_TELEMETRY           0
56 #define HAS_AES                 1
57
58 #define HAS_SPI_1               0
59 #define SPI_1_PA5_PA6_PA7       0
60 #define SPI_1_PB3_PB4_PB5       0
61 #define SPI_1_PE13_PE14_PE15    0
62
63 #define HAS_SPI_2               1       /* CC1200 */
64 #define SPI_2_PB13_PB14_PB15    0
65 #define SPI_2_PD1_PD3_PD4       1
66 #define SPI_2_GPIO              (&stm_gpiod)
67 #define SPI_2_SCK               1
68 #define SPI_2_MISO              3
69 #define SPI_2_MOSI              4
70 #define SPI_2_OSPEEDR           STM_OSPEEDR_10MHz
71
72 #define HAS_I2C_1               0
73
74 #define HAS_I2C_2               0
75
76 #define PACKET_HAS_SLAVE        0
77 #define PACKET_HAS_MASTER       0
78
79 #define FAST_TIMER_FREQ         10000   /* .1ms for debouncing */
80
81 /*
82  * Radio is a cc1200 connected via SPI
83  */
84
85 #define AO_RADIO_CAL_DEFAULT    5695733
86
87 #define AO_CC1200_SPI_CS_PORT   (&stm_gpiod)
88 #define AO_CC1200_SPI_CS_PIN    0
89 #define AO_CC1200_SPI_BUS       AO_SPI_2_PD1_PD3_PD4
90 #define AO_CC1200_SPI           stm_spi2
91 #define AO_CC1200_SPI_SPEED     AO_SPI_SPEED_FAST
92
93 #define AO_CC1200_INT_PORT              (&stm_gpiod)
94 #define AO_CC1200_INT_PIN               (5)
95
96 #define AO_CC1200_INT_GPIO      2
97 #define AO_CC1200_INT_GPIO_IOCFG        CC1200_IOCFG2
98
99 #define LOW_LEVEL_DEBUG         0
100
101 #define LED_PER_LED             1
102 #define LED_TYPE                uint16_t
103
104 #define LED_ENABLE_BITS         ((1 << STM_RCC_AHBENR_GPIOAEN) |        \
105                                  (1 << STM_RCC_AHBENR_GPIOCEN) |        \
106                                  (1 << STM_RCC_AHBENR_GPIODEN) |        \
107                                  (1 << STM_RCC_AHBENR_GPIOEEN))
108
109 /* PC7 - PC9, LED 0 - 2 */
110 #define LED_0_PORT              (&stm_gpioc)
111 #define LED_0_PIN               7
112 #define LED_1_PORT              (&stm_gpioc)
113 #define LED_1_PIN               8
114 #define LED_2_PORT              (&stm_gpioc)
115 #define LED_2_PIN               9
116
117 /* PD8 - PD10, LED 3 - 5 */
118 #define LED_3_PORT              (&stm_gpiod)
119 #define LED_3_PIN               8
120 #define LED_4_PORT              (&stm_gpiod)
121 #define LED_4_PIN               9
122 #define LED_5_PORT              (&stm_gpiod)
123 #define LED_5_PIN               10
124
125 /* PE2 - PE11 (not PE6), LED 6-14 */
126 #define LED_6_PORT              (&stm_gpioe)
127 #define LED_6_PIN               2
128 #define LED_7_PORT              (&stm_gpioe)
129 #define LED_7_PIN               3
130 #define LED_8_PORT              (&stm_gpioe)
131 #define LED_8_PIN               4
132 #define LED_9_PORT              (&stm_gpioe)
133 #define LED_9_PIN               5
134 #define LED_10_PORT             (&stm_gpioe)
135 #define LED_10_PIN              7
136 #define LED_11_PORT             (&stm_gpioe)
137 #define LED_11_PIN              8
138 #define LED_12_PORT             (&stm_gpioe)
139 #define LED_12_PIN              9
140 #define LED_13_PORT             (&stm_gpioe)
141 #define LED_13_PIN              10
142 #define LED_14_PORT             (&stm_gpioe)
143 #define LED_14_PIN              11
144
145 /* PA5, LED 15 */
146 #define LED_15_PORT             (&stm_gpioa)
147 #define LED_15_PIN              5
148
149 #define LED_PIN_RED             0
150 #define LED_PIN_AMBER           1
151 #define LED_PIN_GREEN           2
152 #define LED_PIN_BOX             3
153 #define LED_PIN_PAD             4
154 #define LED_PIN_DRAG            5
155 #define LED_PIN_CONTINUITY_7    6
156 #define LED_PIN_CONTINUITY_6    7
157 #define LED_PIN_CONTINUITY_5    8
158 #define LED_PIN_CONTINUITY_4    9
159 #define LED_PIN_CONTINUITY_3    10
160 #define LED_PIN_CONTINUITY_2    11
161 #define LED_PIN_CONTINUITY_1    12
162 #define LED_PIN_CONTINUITY_0    13
163 #define LED_PIN_REMOTE_ARM      14
164 #define LED_PIN_FIRE            15
165 #define AO_LED_RED              (1 << LED_PIN_RED)
166 #define AO_LED_AMBER            (1 << LED_PIN_AMBER)
167 #define AO_LED_GREEN            (1 << LED_PIN_GREEN)
168 #define AO_LED_BOX              (1 << LED_PIN_BOX)
169 #define AO_LED_PAD              (1 << LED_PIN_PAD)
170 #define AO_LED_DRAG             (1 << LED_PIN_DRAG)
171 #define AO_LED_CONTINUITY_7     (1 << LED_PIN_CONTINUITY_7)
172 #define AO_LED_CONTINUITY_6     (1 << LED_PIN_CONTINUITY_6)
173 #define AO_LED_CONTINUITY_5     (1 << LED_PIN_CONTINUITY_5)
174 #define AO_LED_CONTINUITY_4     (1 << LED_PIN_CONTINUITY_4)
175 #define AO_LED_CONTINUITY_3     (1 << LED_PIN_CONTINUITY_3)
176 #define AO_LED_CONTINUITY_2     (1 << LED_PIN_CONTINUITY_2)
177 #define AO_LED_CONTINUITY_1     (1 << LED_PIN_CONTINUITY_1)
178 #define AO_LED_CONTINUITY_0     (1 << LED_PIN_CONTINUITY_0)
179 #define AO_LED_CONTINUITY_NUM   8
180 #define AO_LED_REMOTE_ARM       (1 << LED_PIN_REMOTE_ARM)
181 #define AO_LED_FIRE             (1 << LED_PIN_FIRE)
182
183 #define LEDS_AVAILABLE          (AO_LED_RED |           \
184                                  AO_LED_AMBER |         \
185                                  AO_LED_GREEN |         \
186                                  AO_LED_BOX |           \
187                                  AO_LED_PAD |           \
188                                  AO_LED_DRAG |          \
189                                  AO_LED_CONTINUITY_7 |  \
190                                  AO_LED_CONTINUITY_6 |  \
191                                  AO_LED_CONTINUITY_5 |  \
192                                  AO_LED_CONTINUITY_4 |  \
193                                  AO_LED_CONTINUITY_3 |  \
194                                  AO_LED_CONTINUITY_2 |  \
195                                  AO_LED_CONTINUITY_1 |  \
196                                  AO_LED_CONTINUITY_0 |  \
197                                  AO_LED_REMOTE_ARM |    \
198                                  AO_LED_FIRE)
199
200 /* LCD displays */
201
202 #define LCD_DEBUG               0
203 #define SEVEN_SEGMENT_DEBUG     0
204
205 #define AO_LCD_STM_SEG_ENABLED_0 (              \
206                 (1 << 0) | /* PA1 */            \
207                 (1 << 1) | /* PA2 */            \
208                 (1 << 2) | /* PA3 */            \
209                 (1 << 3) | /* PA6 */            \
210                 (1 << 4) | /* PA7 */            \
211                 (1 << 5) | /* PB0 */            \
212                 (1 << 6) | /* PB1 */            \
213                 (1 << 7) | /* PB3 */            \
214                 (1 << 8) | /* PB4 */            \
215                 (1 << 9) | /* PB5 */            \
216                 (1 << 10) | /* PB10 */          \
217                 (1 << 11) | /* PB11 */          \
218                 (1 << 12) | /* PB12 */          \
219                 (1 << 13) | /* PB13 */          \
220                 (1 << 14) | /* PB14 */          \
221                 (1 << 15) | /* PB15 */          \
222                 (1 << 16) | /* PB8 */           \
223                 (1 << 17) | /* PA15 */          \
224                 (1 << 18) | /* PC0 */           \
225                 (1 << 19) | /* PC1 */           \
226                 (1 << 20) | /* PC2 */           \
227                 (1 << 21) | /* PC3 */           \
228                 (1 << 22) | /* PC4 */           \
229                 (1 << 23) | /* PC5 */           \
230                 (0 << 24) | /* PC6 */           \
231                 (0 << 25) | /* PC7 */           \
232                 (0 << 26) | /* PC8 */           \
233                 (0 << 27) | /* PC9 */           \
234                 (0 << 28) | /* PC10 or PD8 */   \
235                 (0 << 29) | /* PC11 or PD9 */   \
236                 (0 << 30) | /* PC12 or PD10 */  \
237                 (0 << 31))  /* PD2 or PD11 */
238
239 #define AO_LCD_STM_SEG_ENABLED_1 (              \
240                 (0 << 0) | /* PD12 */           \
241                 (0 << 1) | /* PD13 */           \
242                 (0 << 2) | /* PD14 */           \
243                 (0 << 3) | /* PD15 */           \
244                 (0 << 4) | /* PE0 */            \
245                 (0 << 5) | /* PE1 */            \
246                 (0 << 6) | /* PE2 */            \
247                 (0 << 7))  /* PE3 */
248
249 #define AO_LCD_STM_COM_ENABLED (                \
250                 (1 << 0) | /* PA8 */            \
251                 (0 << 1) | /* PA9 */            \
252                 (0 << 2) | /* PA10 */           \
253                 (0 << 3) | /* PB9 */            \
254                 (0 << 4) | /* PC10 */           \
255                 (0 << 5) | /* PC11 */           \
256                 (0 << 6)) /* PC12 */
257
258 #define AO_LCD_28_ON_C  0
259
260 #define AO_LCD_DUTY     STM_LCD_CR_DUTY_STATIC
261
262 #define AO_LCD_PER_DIGIT        1
263
264 #define AO_LCD_DIGITS           3
265 #define AO_LCD_SEGMENTS         8
266
267 #define AO_SEGMENT_MAP {                        \
268                 /* pad segments */              \
269                 { 0, 14 },                      \
270                 { 0, 13 },                      \
271                 { 0, 15 },                      \
272                 { 0, 17 },                      \
273                 { 0, 16 },                      \
274                 { 0, 8 },                       \
275                 { 0, 9 },                       \
276                 { 0, 7 },                       \
277                 /* box1 segments */             \
278                 { 0, 10 },                      \
279                 { 0, 6 },                       \
280                 { 0, 11 },                      \
281                 { 0, 12 },                      \
282                 { 0, 21 },                      \
283                 { 0, 19 },                      \
284                 { 0, 20 },                      \
285                 { 0, 18 },                      \
286                 /* box0 segments */             \
287                 { 0, 22 },                      \
288                 { 0, 4 },                       \
289                 { 0, 23 },                      \
290                 { 0, 5 },                       \
291                 { 0, 3 },                       \
292                 { 0, 1 },                       \
293                 { 0, 2 },                       \
294                 { 0, 0 },                       \
295 }
296
297 /*
298  * Use event queue for input devices
299  */
300
301 #define AO_EVENT                1
302
303 /*
304  * Knobs
305  */
306
307 #define AO_QUADRATURE_COUNT     1
308 #define AO_QUADRATURE_DEBOUNCE  1
309
310 #define AO_QUADRATURE_0_PORT    &stm_gpioe
311 #define AO_QUADRATURE_0_A       15
312 #define AO_QUADRATURE_0_B       14
313
314 #define AO_QUADRATURE_SELECT    0
315
316 /*
317  * Buttons
318  */
319
320 #define AO_BUTTON_COUNT         9
321 #define AO_BUTTON_MODE          AO_EXTI_MODE_PULL_UP
322
323 #define AO_BUTTON_MODE_SELECT   0
324 #define AO_BUTTON_0_PORT        &stm_gpioe
325 #define AO_BUTTON_0             1
326
327 #define AO_BUTTON_DRAG_SELECT   1
328 #define AO_BUTTON_1_PORT        &stm_gpioe
329 #define AO_BUTTON_1             1
330
331 #define AO_BUTTON_SPARE1        2
332 #define AO_BUTTON_2_PORT        &stm_gpiob
333 #define AO_BUTTON_2             9
334
335 #define AO_BUTTON_SPARE2        3
336 #define AO_BUTTON_3_PORT        &stm_gpiob
337 #define AO_BUTTON_3             7
338
339 #define AO_BUTTON_SPARE3        4
340 #define AO_BUTTON_4_PORT        &stm_gpiob
341 #define AO_BUTTON_4             6
342
343 #define AO_BUTTON_ARM           5
344 #define AO_BUTTON_5_PORT        &stm_gpioe
345 #define AO_BUTTON_5             12
346
347 #define AO_BUTTON_FIRE          6
348 #define AO_BUTTON_6_PORT        &stm_gpioa
349 #define AO_BUTTON_6             4
350
351 #define AO_BUTTON_SPARE4        7
352 #define AO_BUTTON_7_PORT        &stm_gpiod
353 #define AO_BUTTON_7             11
354
355 #define AO_BUTTON_SELECT        8
356 #define AO_BUTTON_8_PORT        &stm_gpioe
357 #define AO_BUTTON_8             13
358
359 #endif /* _AO_PINS_H_ */