2 * Copyright © 2012 Keith Packard <keithp@keithp.com>
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.
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.
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.
25 #define AO_HSE_BYPASS 0
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
33 /* PLLMUL is 9, PLLXTPRE (pre divider) is 2, so the
34 * overall PLLCLK is 16 * 9/2 = 72MHz (used as SYSCLK)
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)
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
52 #define AO_CC1200_FOSC 40000000
55 #define USE_INTERNAL_FLASH 1
56 #define USE_EEPROM_CONFIG 1
57 #define USE_STORAGE_CONFIG 0
60 #define BEEPER_TIMER 3
61 #define BEEPER_CHANNEL 1
62 #define BEEPER_PORT (&stm_gpioc)
64 #define AO_BEEP_MID_DEFAULT 179 /* 2100 Hz */
66 #define HAS_RADIO_RATE 1
67 #define HAS_TELEMETRY 0
69 #define HAS_STATIC_TEST 0
71 #define HAS_USB_PULLUP 1
72 #define AO_USB_PULLUP_PORT (&stm_gpioa)
73 #define AO_USB_PULLUP_PIN 10
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
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)
89 #define SPI_2_MODE_OUTPUT STM_GPIO_CR_MODE_OUTPUT_10MHZ
95 #define PACKET_HAS_SLAVE 0
96 #define PACKET_HAS_MASTER 0
98 #define AO_FAST_TIMER 4
99 #define FAST_TIMER_FREQ 10000 /* .1ms for debouncing */
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
114 * Radio is a cc1200 connected via SPI
117 #define AO_RADIO_CAL_DEFAULT 5695733
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
124 #define AO_CC1200_INT_PORT (&stm_gpiob)
125 #define AO_CC1200_INT_PIN (9)
127 #define AO_CC1200_INT_GPIO 2
128 #define AO_CC1200_INT_GPIO_IOCFG CC1200_IOCFG2
130 #define LOW_LEVEL_DEBUG 0
134 #define AO_LED_RED AO_LED_0 /* PC7 */
135 #define LED_0_PORT (&stm_gpioc)
138 #define AO_LED_AMBER AO_LED_1 /* PC8 */
139 #define LED_1_PORT (&stm_gpioc)
142 #define AO_LED_GREEN AO_LED_2 /* PC9 */
143 #define LED_2_PORT (&stm_gpioc)
146 #define AO_LED_BOX AO_LED_3 /* PA9 */
147 #define LED_3_PORT (&stm_gpioa)
150 #define AO_LED_PAD AO_LED_4 /* PA15 */
151 #define LED_4_PORT (&stm_gpioa)
154 #define AO_LED_DRAG AO_LED_5 /* PC12 */
155 #define LED_5_PORT (&stm_gpioc)
158 #define AO_LED_CONTINUITY_7 AO_LED_6 /* PC13 */
159 #define LED_6_PORT (&stm_gpioc)
162 #define AO_LED_CONTINUITY_6 AO_LED_7 /* PC14 */
163 #define LED_7_PORT (&stm_gpioc)
166 #define AO_LED_CONTINUITY_5 AO_LED_8 /* PC15 */
167 #define LED_8_PORT (&stm_gpioc)
170 #define AO_LED_CONTINUITY_4 AO_LED_9 /* PC2 */
171 #define LED_9_PORT (&stm_gpioc)
174 #define AO_LED_CONTINUITY_3 AO_LED_10 /* PC3 */
175 #define LED_10_PORT (&stm_gpioc)
178 #define AO_LED_CONTINUITY_2 AO_LED_11 /* PA0 */
179 #define LED_11_PORT (&stm_gpioa)
182 #define AO_LED_CONTINUITY_1 AO_LED_12 /* PA6 */
183 #define LED_12_PORT (&stm_gpioa)
186 #define AO_LED_CONTINUITY_0 AO_LED_13 /* PB1 */
187 #define LED_13_PORT (&stm_gpiob)
190 #define AO_LED_CONTINUITY_NUM 8
192 #define AO_LED_REMOTE_ARM AO_LED_14 /* PB3 */
193 #define LED_14_PORT (&stm_gpiob)
196 #define AO_LED_FIRE AO_LED_15 /* PB0 */
197 #define LED_15_PORT (&stm_gpiob)
201 * Use event queue for input devices
210 #define AO_QUADRATURE_COUNT 1
211 #define AO_QUADRATURE_DEBOUNCE 0
212 #define AO_QUADRATURE_SINGLE_CODE 1
214 #define AO_QUADRATURE_0_PORT &stm_gpiob
215 #define AO_QUADRATURE_0_A 12
216 #define AO_QUADRATURE_0_B 11
218 #define AO_QUADRATURE_SELECT 0
224 #define AO_BUTTON_COUNT 9
225 #define AO_BUTTON_MODE AO_EXTI_MODE_PULL_UP
227 #define AO_BUTTON_DRAG_MODE 0
228 #define AO_BUTTON_0_PORT &stm_gpioc
229 #define AO_BUTTON_0 1
231 #define AO_BUTTON_DRAG_SELECT 1
232 #define AO_BUTTON_1_PORT &stm_gpioc
233 #define AO_BUTTON_1 0
235 #define AO_BUTTON_SPARE1 2
236 #define AO_BUTTON_2_PORT &stm_gpiob
237 #define AO_BUTTON_2 4
239 #define AO_BUTTON_SPARE2 3
240 #define AO_BUTTON_3_PORT &stm_gpiob
241 #define AO_BUTTON_3 5
243 #define AO_BUTTON_SPARE3 4
244 #define AO_BUTTON_4_PORT &stm_gpiob
245 #define AO_BUTTON_4 6
247 #define AO_BUTTON_ARM 5
248 #define AO_BUTTON_5_PORT &stm_gpioa
249 #define AO_BUTTON_5 8
251 #define AO_BUTTON_FIRE 6
252 #define AO_BUTTON_6_PORT &stm_gpioa
253 #define AO_BUTTON_6 4
255 #define AO_BUTTON_SPARE4 7
256 #define AO_BUTTON_7_PORT &stm_gpiob
257 #define AO_BUTTON_7 7
259 #define AO_BUTTON_ENCODER_SELECT 8
260 #define AO_BUTTON_8_PORT &stm_gpiob
261 #define AO_BUTTON_8 10
269 #define AO_ADC_DUMP(p) \
270 printf("batt: %5d\n", (p)->v_batt)
272 #define HAS_ADC_SINGLE 1
273 #define HAS_ADC_TEMP 0
274 #define HAS_BATTERY_REPORT 1
276 #define AO_ADC_V_BATT 2
277 #define AO_ADC_V_BATT_PORT (&stm_gpioa)
278 #define AO_ADC_V_BATT_PIN 2
280 #define AO_ADC_PIN0_PORT AO_ADC_V_BATT_PORT
281 #define AO_ADC_PIN0_PIN AO_ADC_V_BATT_PIN
283 #define AO_ADC_SQ1 AO_ADC_V_BATT
288 * Voltage divider on ADC battery sampler
290 #define AO_BATTERY_DIV_PLUS 15 /* 15k */
291 #define AO_BATTERY_DIV_MINUS 27 /* 27k */
294 * ADC reference in decivolts
296 #define AO_ADC_REFERENCE_DV 33
298 #define AO_LCO_SEARCH_API
300 //#define AO_LCO_HAS_CONTRAST 1
301 //#define AO_LCO_MIN_CONTRAST 0
302 //#define AO_LCO_MAX_CONTRAST 63
303 //#define AO_LCO_CONTRAST_STEP 1
305 #define AO_LCO_HAS_BACKLIGHT 1
306 #define AO_LCO_MIN_BACKLIGHT 0
307 #define AO_LCO_MAX_BACKLIGHT 65535
308 #define AO_LCO_BACKLIGHT_STEP 771
310 #define AO_LCO_HAS_LCO_INFO 1
311 #define AO_LCO_MIN_INFO_PAGE 0
312 #define AO_LCO_MAX_INFO_PAGE 0
314 #define AO_LCO_HAS_PAD_INFO 1
317 * LCD Backlight via PWM.
323 #define PWM_MAX 65535
324 #define AO_PWM_TIMER stm_tim2
325 #define AO_LCD_BL_PWM_CHAN 1
326 #define AO_PWM_0_GPIO (&stm_gpioa)
327 #define AO_PWM_0_PIN 1
328 #define AO_PWM_TIMER_ENABLE STM_RCC_APB1ENR_TIM2EN
329 #define AO_PWM_TIMER_SCALE 1
331 #define AO_AFIO_PWM_REMAP STM_AFIO_MAPR_TIM2_REMAP
332 #define AO_AFIO_PWM_REMAP_VAL STM_AFIO_MAPR_TIM2_REMAP_PA0_PA1_PA2_PA3
333 #define AO_AFIO_PWM_REMAP_MASK STM_AFIO_MAPR_TIM2_REMAP_MASK
336 #endif /* _AO_PINS_H_ */