2 * Copyright © 2022 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.
23 #define AO_XOSC_FREQ 16000000
24 #define AO_XOSC_DIV 256
25 #define AO_XOSC_MUL 768
27 #define AO_AHB_PRESCALER 1
28 #define AO_APBA_PRESCALER 1
30 #define HAS_SERIAL_1 1
31 #define USE_SERIAL_1_STDIN 0
33 #define AO_CONFIG_DEFAULT_FLIGHT_LOG_MAX (512 * 1024)
34 #define AO_CONFIG_MAX_SIZE 1024
35 #define LOG_ERASE_MARK 0x55
36 #define LOG_MAX_ERASE 128
37 #define AO_LOG_FORMAT AO_LOG_FORMAT_TELEMETRUM
40 #define USE_INTERNAL_FLASH 0
41 #define USE_EEPROM_CONFIG 1
42 #define USE_STORAGE_CONFIG 0
44 #define USE_USB_STDIO 1
46 #define HAS_BATTERY_REPORT 1
47 #define BEEPER_CHANNEL 4
48 #define BEEPER_TIMER 3
49 #define BEEPER_PORT (&samd21_port_a)
52 #define HAS_RADIO_10MW 1
53 #define HAS_TELEMETRY 1
55 #define HAS_COMPANION 1
61 #define PACKET_HAS_SLAVE 1
62 #define PACKET_HAS_MASTER 0
64 #define LOW_LEVEL_DEBUG 0
67 #define LED_0_PORT (&samd21_port_b)
69 #define LED_1_PORT (&samd21_port_b)
71 #define AO_LED_RED (1 << 0)
72 #define AO_LED_GREEN (1 << 1)
77 #define HAS_ADC_TEMP 1
85 #define HAS_IGNITE_REPORT 1
87 #define AO_SENSE_DROGUE(p) ((p)->adc.sense_a)
88 #define AO_SENSE_MAIN(p) ((p)->adc.sense_m)
89 #define AO_IGNITER_CLOSED 400
90 #define AO_IGNITER_OPEN 60
93 #define AO_IGNITER_DROGUE_PORT (&samd21_port_a)
94 #define AO_IGNITER_DROGUE_PIN 19
97 #define AO_IGNITER_MAIN_PORT (&samd21_port_a)
98 #define AO_IGNITER_MAIN_PIN 18
103 #define AO_DATA_RING 32
104 #define AO_ADC_NUM_SENSE 2
113 #define AO_ADC_DUMP(p) \
114 printf("tick: %5lu drogue: %5d main: %5d batt: %5d\n", \
116 (p)->adc.sense_a, (p)->adc.sense_m, \
119 #define AO_ADC_SENSE_DROGUE 1
120 #define AO_ADC_SENSE_DROGUE_PORT (&samd21_port_a)
121 #define AO_ADC_SENSE_DROGUE_PIN 10
123 #define AO_ADC_SENSE_MAIN 1
124 #define AO_ADC_SENSE_MAIN_PORT (&samd21_port_a)
125 #define AO_ADC_SENSE_MAIN_PIN 11
127 #define AO_ADC_V_BATT 8
128 #define AO_ADC_V_BATT_PORT (&samd21_port_a)
129 #define AO_ADC_V_BATT_PIN 9
131 #define AO_ADC_TEMP 16
133 #define AO_NUM_ADC_PIN 3
135 #define AO_ADC_PIN0_PORT AO_ADC_SENSE_DROGUE_PORT
136 #define AO_ADC_PIN0_PIN AO_ADC_SENSE_DROGUE_PIN
137 #define AO_ADC_PIN1_PORT AO_ADC_SENSE_MAIN_PORT
138 #define AO_ADC_PIN1_PIN AO_ADC_SENSE_MAIN_PIN
139 #define AO_ADC_PIN2_PORT AO_ADC_V_BATT_PORT
140 #define AO_ADC_PIN2_PIN AO_ADC_V_BATT_PIN
142 #define AO_NUM_ADC (AO_NUM_ADC_PIN + 1)
144 #define AO_ADC_SQ1 AO_ADC_SENSE_DROGUE
145 #define AO_ADC_SQ2 AO_ADC_SENSE_MAIN
146 #define AO_ADC_SQ3 AO_ADC_V_BATT
147 #define AO_ADC_SQ4 AO_ADC_TEMP
150 * Voltage divider on ADC battery sampler
152 #define AO_BATTERY_DIV_PLUS 56 /* 5.6k */
153 #define AO_BATTERY_DIV_MINUS 100 /* 10k */
156 * Voltage divider on ADC igniter samplers
158 #define AO_IGNITE_DIV_PLUS 100 /* 100k */
159 #define AO_IGNITE_DIV_MINUS 27 /* 27k */
162 * ADC reference in decivolts
164 #define AO_ADC_REFERENCE_DV 33
170 #define AO_SERIAL_SPEED_UBLOX AO_SERIAL_SPEED_9600
172 #define HAS_SERIAL_1 1
173 #define SERIAL_1_PA00_PA01 1
175 #define ao_gps_getchar ao_serial1_getchar
176 #define ao_gps_putchar ao_serial1_putchar
177 #define ao_gps_set_speed ao_serial1_set_speed
178 #define ao_gps_fifo (ao_samd21_usart1.rx_fifo)
181 * Pressure sensor settings
185 #define AO_MS5607_PRIVATE_PINS 1
186 #define AO_MS5607_CS_PORT (&samd21_port_a)
187 #define AO_MS5607_CS_PIN 21
188 #define AO_MS5607_CS_MASK (1 << AO_MS5607_CS)
189 #define AO_MS5607_MISO_PORT (&samd21_port_a)
190 #define AO_MS5607_MISO_PIN 20
191 #define AO_MS5607_SPI_INDEX AO_SPI_3_PA22_PA23_PA20
197 #define M25_MAX_CHIPS 1
198 #define AO_M25_SPI_CS_PORT (&samd21_port_a)
199 #define AO_M25_SPI_CS_MASK (1 << 27)
200 #define AO_M25_SPI_BUS AO_SPI_5_PB22_PB23_PB03
207 /* gets pretty close to 434.550 */
209 #define AO_RADIO_CAL_DEFAULT 5695733
211 #define AO_CC1200_SPI_CS_PORT (&samd21_port_a)
212 #define AO_CC1200_SPI_CS_PIN 7
213 #define AO_CC1200_SPI_BUS AO_SPI_5_PB22_PB23_PB03
215 #define AO_CC1200_INT_PORT (&samd21_port_b)
216 #define AO_CC1200_INT_PIN (8)
217 #define AO_CC1200_MCU_WAKEUP_PORT (&samd21_port_b)
218 #define AO_CC1200_MCU_WAKEUP_PIN (9)
220 #define AO_CC1200_INT_GPIO 2
221 #define AO_CC1200_INT_GPIO_IOCFG CC1200_IOCFG2
223 #define AO_CC1200_MARC_GPIO 3
224 #define AO_CC1200_MARC_GPIO_IOCFG CC1200_IOCFG3
226 #define HAS_BOOT_RADIO 0
228 #define HAS_HIGHG_ACCEL 1
232 #define HAS_ADXL375 1
233 #define AO_ADXL375_CS_PORT (&samd21_port_a)
234 #define AO_ADXL375_CS_PIN 8
235 #define AO_ADXL375_SPI_INDEX (AO_SPI_0_PA04_PA05_PA06 | AO_SPI_MODE_3)
237 #define AO_ADXL375_AXIS x
238 #define AO_ADXL375_INVERT 1
246 #define AO_COMPANION_CS_PORT (&samd21_port_a)
247 #define AO_COMPANION_CS_PIN (13)
248 #define AO_COMPANION_SPI_BUS AO_SPI_5_PB22_PB23_PB03
254 #define HAS_MONITOR 0
255 #define LEGACY_MONITOR 0
256 #define HAS_MONITOR_PUT 1
257 #define AO_MONITOR_LED 0
261 * Profiling Viterbi decoding
268 #endif /* _AO_PINS_H_ */