altos/telelco-v3.0: Use timer 2 for fast timer
[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 HAS_RADIO               1
65 #define HAS_RADIO_RATE          1
66 #define HAS_TELEMETRY           0
67 #define HAS_AES                 1
68 #define HAS_STATIC_TEST         0
69
70 #define HAS_USB_PULLUP          1
71 #define AO_USB_PULLUP_PORT      (&stm_gpioa)
72 #define AO_USB_PULLUP_PIN       10
73
74 #define HAS_SPI_1               1       /* NHD-C12864LZ LCD Module */
75 #define SPI_1_PA5_PA6_PA7       1
76 #define SPI_1_PA6_DISABLE       1
77 #define SPI_1_MODE_OUTPUT       STM_GPIO_CR_MODE_OUTPUT_10MHZ
78 #define SPI_1_PB3_PB4_PB5       0
79 #define SPI_1_PE13_PE14_PE15    0
80
81 #define HAS_SPI_2               1       /* CC1200 */
82 #define SPI_2_PB13_PB14_PB15    1
83 #define SPI_2_PD1_PD3_PD4       0
84 #define SPI_2_GPIO              (&stm_gpiod)
85 #define SPI_2_SCK               1
86 #define SPI_2_MISO              3
87 #define SPI_2_MOSI              4
88 #define SPI_2_MODE_OUTPUT       STM_GPIO_CR_MODE_OUTPUT_10MHZ
89
90 #define HAS_I2C_1               0
91
92 #define HAS_I2C_2               0
93
94 #define PACKET_HAS_SLAVE        0
95 #define PACKET_HAS_MASTER       0
96
97 #define AO_FAST_TIMER           2
98 #define FAST_TIMER_FREQ         10000   /* .1ms for debouncing */
99
100 /* LCD module */
101 #define AO_ST7565_CS_PORT       (&stm_gpioc)    /* pin 1 */
102 #define AO_ST7565_CS_PIN        4
103 #define AO_ST7565_RESET_PORT    (&stm_gpioc)    /* pin 2 */
104 #define AO_ST7565_RESET_PIN     5
105 #define AO_ST7565_A0_PORT       (&stm_gpioa)    /* pin 3 */
106 #define AO_ST7565_A0_PIN        3
107 #define AO_ST7565_SPI_BUS       AO_SPI_1_PA5_PA6_PA7
108 #define AO_ST7565_WIDTH         128
109 #define AO_ST7565_HEIGHT        64
110 #define AO_ST7565_BIAS          ST7565_LCD_BIAS_1_9
111
112 /*
113  * Radio is a cc1200 connected via SPI
114  */
115
116 #define AO_RADIO_CAL_DEFAULT    5695733
117
118 #define AO_CC1200_SPI_CS_PORT   (&stm_gpiob)
119 #define AO_CC1200_SPI_CS_PIN    8
120 #define AO_CC1200_SPI_BUS       AO_SPI_2_PB13_PB14_PB15
121 #define AO_CC1200_SPI           stm_spi2
122
123 #define AO_CC1200_INT_PORT      (&stm_gpiob)
124 #define AO_CC1200_INT_PIN       (9)
125
126 #define AO_CC1200_INT_GPIO      2
127 #define AO_CC1200_INT_GPIO_IOCFG        CC1200_IOCFG2
128
129 #define LOW_LEVEL_DEBUG         0
130
131 #define HAS_LED                 1
132
133 #define AO_LED_RED              AO_LED_0        /* PC7 */
134 #define LED_0_PORT              (&stm_gpioc)
135 #define LED_0_PIN               7
136
137 #define AO_LED_AMBER            AO_LED_1        /* PC8 */
138 #define LED_1_PORT              (&stm_gpioc)
139 #define LED_1_PIN               8
140
141 #define AO_LED_GREEN            AO_LED_2        /* PC9 */
142 #define LED_2_PORT              (&stm_gpioc)
143 #define LED_2_PIN               9
144
145 #define AO_LED_BOX              AO_LED_3        /* PA9 */
146 #define LED_3_PORT              (&stm_gpioa)
147 #define LED_3_PIN               9
148
149 #define AO_LED_PAD              AO_LED_4        /* PA15 */
150 #define LED_4_PORT              (&stm_gpioa)
151 #define LED_4_PIN               15
152
153 #define AO_LED_DRAG             AO_LED_5        /* PC12 */
154 #define LED_5_PORT              (&stm_gpioc)
155 #define LED_5_PIN               12
156
157 #define AO_LED_CONTINUITY_7     AO_LED_6        /* PC13 */
158 #define LED_6_PORT              (&stm_gpioc)
159 #define LED_6_PIN               13
160
161 #define AO_LED_CONTINUITY_6     AO_LED_7        /* PC14 */
162 #define LED_7_PORT              (&stm_gpioc)
163 #define LED_7_PIN               14
164
165 #define AO_LED_CONTINUITY_5     AO_LED_8        /* PC15 */
166 #define LED_8_PORT              (&stm_gpioc)
167 #define LED_8_PIN               15
168
169 #define AO_LED_CONTINUITY_4     AO_LED_9        /* PC2 */
170 #define LED_9_PORT              (&stm_gpioc)
171 #define LED_9_PIN               2
172
173 #define AO_LED_CONTINUITY_3     AO_LED_10       /* PC3 */
174 #define LED_10_PORT             (&stm_gpioc)
175 #define LED_10_PIN              3
176
177 #define AO_LED_CONTINUITY_2     AO_LED_11       /* PA0 */
178 #define LED_11_PORT             (&stm_gpioa)
179 #define LED_11_PIN              0
180
181 #define AO_LED_CONTINUITY_1     AO_LED_12       /* PA1 */
182 #define LED_12_PORT             (&stm_gpioa)
183 #define LED_12_PIN              1
184
185 #define AO_LED_CONTINUITY_0     AO_LED_13       /* PB1 */
186 #define LED_13_PORT             (&stm_gpiob)
187 #define LED_13_PIN              1
188
189 #define AO_LED_CONTINUITY_NUM   8
190
191 #define AO_LED_REMOTE_ARM       AO_LED_14       /* PB3 */
192 #define LED_14_PORT             (&stm_gpiob)
193 #define LED_14_PIN              3
194
195 #define AO_LED_FIRE             AO_LED_15       /* PB0 */
196 #define LED_15_PORT             (&stm_gpiob)
197 #define LED_15_PIN              0
198
199 /*
200  * Use event queue for input devices
201  */
202
203 #define AO_EVENT                1
204
205 /*
206  * Knobs
207  */
208
209 #define AO_QUADRATURE_COUNT     1
210 #define AO_QUADRATURE_DEBOUNCE  0
211 #define AO_QUADRATURE_SINGLE_CODE       1
212
213 #define AO_QUADRATURE_0_PORT    &stm_gpiob
214 #define AO_QUADRATURE_0_A       12
215 #define AO_QUADRATURE_0_B       11
216
217 #define AO_QUADRATURE_SELECT    10
218
219 /*
220  * Buttons
221  */
222
223 #define AO_BUTTON_COUNT         9
224 #define AO_BUTTON_MODE          AO_EXTI_MODE_PULL_UP
225
226 #define AO_BUTTON_DRAG_MODE     0
227 #define AO_BUTTON_0_PORT        &stm_gpioc
228 #define AO_BUTTON_0             1
229
230 #define AO_BUTTON_DRAG_SELECT   1
231 #define AO_BUTTON_1_PORT        &stm_gpioc
232 #define AO_BUTTON_1             0
233
234 #define AO_BUTTON_SPARE1        2
235 #define AO_BUTTON_2_PORT        &stm_gpiob
236 #define AO_BUTTON_2             4
237
238 #define AO_BUTTON_SPARE2        3
239 #define AO_BUTTON_3_PORT        &stm_gpiob
240 #define AO_BUTTON_3             5
241
242 #define AO_BUTTON_SPARE3        4
243 #define AO_BUTTON_4_PORT        &stm_gpiob
244 #define AO_BUTTON_4             6
245
246 #define AO_BUTTON_ARM           5
247 #define AO_BUTTON_5_PORT        &stm_gpioa
248 #define AO_BUTTON_5             8
249
250 #define AO_BUTTON_FIRE          6
251 #define AO_BUTTON_6_PORT        &stm_gpioa
252 #define AO_BUTTON_6             4
253
254 #define AO_BUTTON_SPARE4        7
255 #define AO_BUTTON_7_PORT        &stm_gpiob
256 #define AO_BUTTON_7             7
257
258 #define AO_BUTTON_ENCODER_SELECT        8
259 #define AO_BUTTON_8_PORT        &stm_gpiob
260 #define AO_BUTTON_8             10
261
262 /* ADC */
263
264 struct ao_adc {
265         int16_t         v_batt;
266 };
267
268 #define AO_ADC_DUMP(p) \
269         printf("batt: %5d\n", (p)->v_batt)
270
271 #define HAS_ADC_SINGLE          1
272 #define HAS_ADC_TEMP            0
273 #define HAS_BATTERY_REPORT      1
274
275 #define AO_ADC_V_BATT           2
276 #define AO_ADC_V_BATT_PORT      (&stm_gpioa)
277 #define AO_ADC_V_BATT_PIN       2
278
279 #define AO_ADC_PIN0_PORT        AO_ADC_V_BATT_PORT
280 #define AO_ADC_PIN0_PIN         AO_ADC_V_BATT_PIN
281
282 #define AO_ADC_SQ1              AO_ADC_V_BATT
283
284 #define AO_NUM_ADC              1
285
286 /*
287  * Voltage divider on ADC battery sampler
288  */
289 #define AO_BATTERY_DIV_PLUS     15      /* 15k */
290 #define AO_BATTERY_DIV_MINUS    27      /* 27k */
291
292 /*
293  * ADC reference in decivolts
294  */
295 #define AO_ADC_REFERENCE_DV     33
296
297 #define AO_LCO_SEARCH_API
298
299 #endif /* _AO_PINS_H_ */