7a7ffae2acff8e78f565dc386dd15513133b7a0d
[fw/altos] / src / telelco-v3.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 /* 16MHz crystal */
23
24 #define AO_HSE          1
25 #define AO_HSE_BYPASS   0
26
27 #define AO_SYSCLK       72000000
28 #define AO_HCLK         72000000
29 #define AO_APB1CLK      36000000
30 #define AO_APB2CLK      72000000
31 #define AO_ADCCLK       12000000
32
33 /* PLLMUL is 9, PLLXTPRE (pre divider) is 2, so the
34  * overall PLLCLK is 16 * 9/2 = 72MHz (used as SYSCLK)
35  *
36  * HCLK is SYSCLK / 1 (HPRE_DIV) = 72MHz (72MHz max)
37  * USB is PLLCLK / 1.5 (USBPRE)= 48MHz (must be 48MHz)
38  * APB2 is HCLK / 1 (PPRE2_DIV) = 72MHz (72MHz max)
39  * APB1 is HCLK / 2 (PPRE1_DIV) = 36MHz (36MHz max)
40  * ADC is APB2 / 6 (ADCPRE) = 12MHz (14MHz max)
41  */
42
43 #define AO_RCC_CFGR_USBPRE      STM_RCC_CFGR_USBPRE_1_5
44 #define AO_RCC_CFGR_PLLMUL      STM_RCC_CFGR_PLLMUL_9
45 #define AO_RCC_CFGR_PLLXTPRE    STM_RCC_CFGR_PLLXTPRE_2
46 #define AO_RCC_CFGR_PPRE2_DIV   STM_RCC_CFGR_PPRE2_DIV_1
47 #define AO_RCC_CFGR_PPRE1_DIV   STM_RCC_CFGR_PPRE1_DIV_2
48 #define AO_RCC_CFGR_HPRE_DIV    STM_RCC_CFGR_HPRE_DIV_1
49 #define AO_RCC_CFGR_ADCPRE      STM_RCC_CFGR_ADCPRE_6
50
51
52 #define AO_CC1200_FOSC          40000000
53
54 #define HAS_EEPROM              1
55 #define USE_INTERNAL_FLASH      1
56 #define USE_EEPROM_CONFIG       1
57 #define USE_STORAGE_CONFIG      0
58 #define HAS_USB                 1
59 #define HAS_BEEP                1
60 #define BEEPER_TIMER            3
61 #define BEEPER_CHANNEL          1
62 #define BEEPER_PORT             (&stm_gpioc)
63 #define BEEPER_PIN              6
64 #define AO_BEEP_MID_DEFAULT     179     /* 2100 Hz */
65 #define HAS_RADIO               1
66 #define HAS_RADIO_RATE          1
67 #define HAS_TELEMETRY           0
68 #define HAS_AES                 1
69 #define HAS_STATIC_TEST         0
70
71 #define HAS_USB_PULLUP          1
72 #define AO_USB_PULLUP_PORT      (&stm_gpioa)
73 #define AO_USB_PULLUP_PIN       10
74
75 #define HAS_SPI_1               1       /* NHD-C12864LZ LCD Module */
76 #define SPI_1_PA5_PA6_PA7       1
77 #define SPI_1_PA6_DISABLE       1
78 #define SPI_1_MODE_OUTPUT       STM_GPIO_CR_MODE_OUTPUT_50MHZ
79 #define SPI_1_PB3_PB4_PB5       0
80 #define SPI_1_PE13_PE14_PE15    0
81
82 #define HAS_SPI_2               1       /* CC1200 */
83 #define SPI_2_PB13_PB14_PB15    1
84 #define SPI_2_PD1_PD3_PD4       0
85 #define SPI_2_GPIO              (&stm_gpiod)
86 #define SPI_2_SCK               1
87 #define SPI_2_MISO              3
88 #define SPI_2_MOSI              4
89 #define SPI_2_MODE_OUTPUT       STM_GPIO_CR_MODE_OUTPUT_10MHZ
90
91 #define HAS_I2C_1               0
92
93 #define HAS_I2C_2               0
94
95 #define PACKET_HAS_SLAVE        0
96 #define PACKET_HAS_MASTER       0
97
98 #define AO_FAST_TIMER           4
99 #define FAST_TIMER_FREQ         10000   /* .1ms for debouncing */
100
101 /* LCD module */
102 #define AO_ST7565_CS_PORT       (&stm_gpioc)    /* pin 1 */
103 #define AO_ST7565_CS_PIN        4
104 #define AO_ST7565_RESET_PORT    (&stm_gpioc)    /* pin 2 */
105 #define AO_ST7565_RESET_PIN     5
106 #define AO_ST7565_A0_PORT       (&stm_gpioa)    /* pin 3 */
107 #define AO_ST7565_A0_PIN        3
108 #define AO_ST7565_SPI_BUS       (AO_SPI_1_PA5_PA6_PA7 | AO_SPI_MODE_3)
109 #define AO_ST7565_WIDTH         128
110 #define AO_ST7565_HEIGHT        64
111 #define AO_ST7565_BIAS          ST7565_LCD_BIAS_1_9
112
113 /*
114  * Radio is a cc1200 connected via SPI
115  */
116
117 #define AO_RADIO_CAL_DEFAULT    5695733
118
119 #define AO_CC1200_SPI_CS_PORT   (&stm_gpiob)
120 #define AO_CC1200_SPI_CS_PIN    8
121 #define AO_CC1200_SPI_BUS       AO_SPI_2_PB13_PB14_PB15
122 #define AO_CC1200_SPI           stm_spi2
123
124 #define AO_CC1200_INT_PORT      (&stm_gpiob)
125 #define AO_CC1200_INT_PIN       (9)
126
127 #define AO_CC1200_INT_GPIO      2
128 #define AO_CC1200_INT_GPIO_IOCFG        CC1200_IOCFG2
129
130 #define LOW_LEVEL_DEBUG         0
131
132 #define HAS_LED                 1
133
134 #define AO_LED_RED              AO_LED_0        /* PC7 */
135 #define LED_0_PORT              (&stm_gpioc)
136 #define LED_0_PIN               7
137
138 #define AO_LED_AMBER            AO_LED_1        /* PC8 */
139 #define LED_1_PORT              (&stm_gpioc)
140 #define LED_1_PIN               8
141
142 #define AO_LED_GREEN            AO_LED_2        /* PC9 */
143 #define LED_2_PORT              (&stm_gpioc)
144 #define LED_2_PIN               9
145
146 #define AO_LED_BOX              AO_LED_3        /* PA9 */
147 #define LED_3_PORT              (&stm_gpioa)
148 #define LED_3_PIN               9
149
150 #define AO_LED_PAD              AO_LED_4        /* PA15 */
151 #define LED_4_PORT              (&stm_gpioa)
152 #define LED_4_PIN               15
153
154 #define AO_LED_DRAG             AO_LED_5        /* PC12 */
155 #define LED_5_PORT              (&stm_gpioc)
156 #define LED_5_PIN               12
157
158 #define AO_LED_CONTINUITY_7     AO_LED_6        /* PC13 */
159 #define LED_6_PORT              (&stm_gpioc)
160 #define LED_6_PIN               13
161
162 #define AO_LED_CONTINUITY_6     AO_LED_7        /* PC14 */
163 #define LED_7_PORT              (&stm_gpioc)
164 #define LED_7_PIN               14
165
166 #define AO_LED_CONTINUITY_5     AO_LED_8        /* PC15 */
167 #define LED_8_PORT              (&stm_gpioc)
168 #define LED_8_PIN               15
169
170 #define AO_LED_CONTINUITY_4     AO_LED_9        /* PC2 */
171 #define LED_9_PORT              (&stm_gpioc)
172 #define LED_9_PIN               2
173
174 #define AO_LED_CONTINUITY_3     AO_LED_10       /* PC3 */
175 #define LED_10_PORT             (&stm_gpioc)
176 #define LED_10_PIN              3
177
178 #define AO_LED_CONTINUITY_2     AO_LED_11       /* PA0 */
179 #define LED_11_PORT             (&stm_gpioa)
180 #define LED_11_PIN              0
181
182 #define AO_LED_CONTINUITY_1     AO_LED_12       /* PA6 */
183 #define LED_12_PORT             (&stm_gpioa)
184 #define LED_12_PIN              6
185
186 #define AO_LED_CONTINUITY_0     AO_LED_13       /* PB1 */
187 #define LED_13_PORT             (&stm_gpiob)
188 #define LED_13_PIN              1
189
190 #define AO_LED_CONTINUITY_NUM   8
191
192 #define AO_LED_REMOTE_ARM       AO_LED_14       /* PB3 */
193 #define LED_14_PORT             (&stm_gpiob)
194 #define LED_14_PIN              3
195
196 #define AO_LED_FIRE             AO_LED_15       /* PB0 */
197 #define LED_15_PORT             (&stm_gpiob)
198 #define LED_15_PIN              0
199
200 /*
201  * Use event queue for input devices
202  */
203
204 #define AO_EVENT                1
205
206 /*
207  * Knobs
208  */
209
210 #define AO_QUADRATURE_COUNT     1
211 #define AO_QUADRATURE_DEBOUNCE  0
212 #define AO_QUADRATURE_SINGLE_CODE       1
213
214 #define AO_QUADRATURE_0_PORT    &stm_gpiob
215 #define AO_QUADRATURE_0_A       12
216 #define AO_QUADRATURE_0_B       11
217
218 #define AO_QUADRATURE_SELECT    0
219
220 /*
221  * Buttons
222  */
223
224 #define AO_BUTTON_COUNT         9
225 #define AO_BUTTON_MODE          AO_EXTI_MODE_PULL_UP
226
227 #define AO_BUTTON_DRAG_MODE     0
228 #define AO_BUTTON_0_PORT        &stm_gpioc
229 #define AO_BUTTON_0             1
230
231 #define AO_BUTTON_DRAG_SELECT   1
232 #define AO_BUTTON_1_PORT        &stm_gpioc
233 #define AO_BUTTON_1             0
234
235 #define AO_BUTTON_SPARE1        2
236 #define AO_BUTTON_2_PORT        &stm_gpiob
237 #define AO_BUTTON_2             4
238
239 #define AO_BUTTON_SPARE2        3
240 #define AO_BUTTON_3_PORT        &stm_gpiob
241 #define AO_BUTTON_3             5
242
243 #define AO_BUTTON_SPARE3        4
244 #define AO_BUTTON_4_PORT        &stm_gpiob
245 #define AO_BUTTON_4             6
246
247 #define AO_BUTTON_ARM           5
248 #define AO_BUTTON_5_PORT        &stm_gpioa
249 #define AO_BUTTON_5             8
250
251 #define AO_BUTTON_FIRE          6
252 #define AO_BUTTON_6_PORT        &stm_gpioa
253 #define AO_BUTTON_6             4
254
255 #define AO_BUTTON_SPARE4        7
256 #define AO_BUTTON_7_PORT        &stm_gpiob
257 #define AO_BUTTON_7             7
258
259 #define AO_BUTTON_ENCODER_SELECT        8
260 #define AO_BUTTON_8_PORT        &stm_gpiob
261 #define AO_BUTTON_8             10
262
263 /* ADC */
264
265 struct ao_adc {
266         int16_t         v_batt;
267 };
268
269 #define AO_ADC_DUMP(p) \
270         printf("batt: %5d\n", (p)->v_batt)
271
272 #define HAS_ADC_SINGLE          1
273 #define HAS_ADC_TEMP            0
274 #define HAS_BATTERY_REPORT      1
275
276 #define AO_ADC_V_BATT           2
277 #define AO_ADC_V_BATT_PORT      (&stm_gpioa)
278 #define AO_ADC_V_BATT_PIN       2
279
280 #define AO_ADC_PIN0_PORT        AO_ADC_V_BATT_PORT
281 #define AO_ADC_PIN0_PIN         AO_ADC_V_BATT_PIN
282
283 #define AO_ADC_SQ1              AO_ADC_V_BATT
284
285 #define AO_NUM_ADC              1
286
287 /*
288  * Voltage divider on ADC battery sampler
289  */
290 #define AO_BATTERY_DIV_PLUS     15      /* 15k */
291 #define AO_BATTERY_DIV_MINUS    27      /* 27k */
292
293 /*
294  * ADC reference in decivolts
295  */
296 #define AO_ADC_REFERENCE_DV     33
297
298 #define AO_LCO_SEARCH_API
299 #define AO_LCO_HAS_CONTRAST     1
300 #define AO_LCO_MIN_CONTRAST     0
301 #define AO_LCO_MAX_CONTRAST     63
302 #define AO_LCO_CONTRAST_STEP    1
303
304 #define AO_LCO_HAS_BACKLIGHT    1
305 #define AO_LCO_MIN_BACKLIGHT    0
306 #define AO_LCO_MAX_BACKLIGHT    65535
307 #define AO_LCO_BACKLIGHT_STEP   771
308
309 /*
310  * LCD Backlight via PWM.
311  *
312  * Pin PA1, TIM2_CH2
313  */
314
315 #define NUM_PWM                 1
316 #define PWM_MAX                 65535
317 #define AO_PWM_TIMER            stm_tim2
318 #define AO_LCD_BL_PWM_CHAN      1
319 #define AO_PWM_0_GPIO           (&stm_gpioa)
320 #define AO_PWM_0_PIN            1
321 #define AO_PWM_TIMER_ENABLE     STM_RCC_APB1ENR_TIM2EN
322 #define AO_PWM_TIMER_SCALE      1
323
324 #define AO_AFIO_PWM_REMAP       STM_AFIO_MAPR_TIM2_REMAP
325 #define AO_AFIO_PWM_REMAP_VAL   STM_AFIO_MAPR_TIM2_REMAP_PA0_PA1_PA2_PA3
326 #define AO_AFIO_PWM_REMAP_MASK  STM_AFIO_MAPR_TIM2_REMAP_MASK
327
328
329 #endif /* _AO_PINS_H_ */