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