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 0
42 #define USE_STORAGE_CONFIG 1
44 #define USE_USB_STDIO 1
45 #define HAS_BATTERY_REPORT 1
46 #define BEEPER_CHANNEL 4
47 #define BEEPER_TIMER 3
48 #define BEEPER_PORT (&samd21_port_a)
51 #define HAS_RADIO_10MW 1
52 #define HAS_TELEMETRY 1
54 #define HAS_COMPANION 1
60 #define PACKET_HAS_SLAVE 1
61 #define PACKET_HAS_MASTER 0
63 #define LOW_LEVEL_DEBUG 0
66 #define LED_0_PORT (&samd21_port_b)
68 #define LED_1_PORT (&samd21_port_b)
70 #define AO_LED_RED (1 << 0)
71 #define AO_LED_GREEN (1 << 1)
76 #define HAS_ADC_TEMP 1
84 /* Beep on PA16 function E TCC2.0 */
86 #define AO_BEEP_TCC (&samd21_tcc2)
87 #define AO_BEEP_TCC_APBC_MASK SAMD21_PM_APBCMASK_TCC2
88 #define AO_BEEP_PORT (&samd21_port_a)
89 #define AO_BEEP_PIN (16)
90 #define AO_BEEP_FUNC SAMD21_PORT_PMUX_FUNC_E
97 #define HAS_IGNITE_REPORT 1
99 #define AO_SENSE_DROGUE(p) ((p)->adc.sense_a)
100 #define AO_SENSE_MAIN(p) ((p)->adc.sense_m)
101 #define AO_IGNITER_CLOSED 400
102 #define AO_IGNITER_OPEN 60
105 #define AO_IGNITER_DROGUE_PORT (&samd21_port_a)
106 #define AO_IGNITER_DROGUE_PIN 19
109 #define AO_IGNITER_MAIN_PORT (&samd21_port_a)
110 #define AO_IGNITER_MAIN_PIN 18
115 #define AO_DATA_RING 32
116 #define AO_ADC_NUM_SENSE 2
125 #define AO_ADC_DUMP(p) \
126 printf("tick: %5lu drogue: %5d main: %5d batt: %5d\n", \
128 (p)->adc.sense_a, (p)->adc.sense_m, \
131 #define AO_ADC_SENSE_DROGUE 18
132 #define AO_ADC_SENSE_DROGUE_PORT (&samd21_port_a)
133 #define AO_ADC_SENSE_DROGUE_PIN 10
135 #define AO_ADC_SENSE_MAIN 19
136 #define AO_ADC_SENSE_MAIN_PORT (&samd21_port_a)
137 #define AO_ADC_SENSE_MAIN_PIN 11
139 #define AO_ADC_V_BATT 17
140 #define AO_ADC_V_BATT_PORT (&samd21_port_a)
141 #define AO_ADC_V_BATT_PIN 9
143 #define AO_ADC_TEMP SAMD21_ADC_INPUTCTRL_MUXPOS_TEMP
145 #define AO_NUM_ADC_PIN 3
147 #define AO_ADC_PIN0_PORT AO_ADC_SENSE_DROGUE_PORT
148 #define AO_ADC_PIN0_PIN AO_ADC_SENSE_DROGUE_PIN
149 #define AO_ADC_PIN1_PORT AO_ADC_SENSE_MAIN_PORT
150 #define AO_ADC_PIN1_PIN AO_ADC_SENSE_MAIN_PIN
151 #define AO_ADC_PIN2_PORT AO_ADC_V_BATT_PORT
152 #define AO_ADC_PIN2_PIN AO_ADC_V_BATT_PIN
154 #define AO_NUM_ADC (AO_NUM_ADC_PIN + 1)
156 #define AO_ADC_SQ0 AO_ADC_SENSE_DROGUE
157 #define AO_ADC_SQ1 AO_ADC_SENSE_MAIN
158 #define AO_ADC_SQ2 AO_ADC_V_BATT
159 #define AO_ADC_SQ3 AO_ADC_TEMP
162 * Voltage divider on ADC battery sampler
164 #define AO_BATTERY_DIV_PLUS 56 /* 5.6k */
165 #define AO_BATTERY_DIV_MINUS 100 /* 10k */
168 * Voltage divider on ADC igniter samplers
170 #define AO_IGNITE_DIV_PLUS 100 /* 100k */
171 #define AO_IGNITE_DIV_MINUS 27 /* 27k */
174 * ADC reference in decivolts
176 #define AO_ADC_REFERENCE_DV 33
182 #define AO_SERIAL_SPEED_UBLOX AO_SERIAL_SPEED_9600
184 #define HAS_SERIAL_1 1
185 #define USE_SERIAL_1_STDIN 0
186 #define SERIAL_1_PA00_PA01 1
188 #define ao_gps_getchar ao_serial1_getchar
189 #define ao_gps_putchar ao_serial1_putchar
190 #define ao_gps_set_speed ao_serial1_set_speed
191 #define ao_gps_fifo (ao_samd21_usart1.rx_fifo)
194 * Pressure sensor settings
198 #define AO_MS5607_PRIVATE_PINS 0
199 #define AO_MS5607_CS_PORT (&samd21_port_a)
200 #define AO_MS5607_CS_PIN 21
201 #define AO_MS5607_MISO_PORT (&samd21_port_a)
202 #define AO_MS5607_MISO_PIN 20
203 #define AO_MS5607_SPI_INDEX AO_SPI_3_PA22_PA23_PA20
209 #define M25_MAX_CHIPS 1
210 #define AO_M25_SPI_CS_PORT (&samd21_port_a)
211 #define AO_M25_SPI_CS_MASK (1 << 27)
212 #define AO_M25_SPI_BUS AO_SPI_5_PB22_PB23_PB03
219 /* gets pretty close to 434.550 */
221 #define AO_RADIO_CAL_DEFAULT 5695733
223 #define AO_CC1200_SPI_CS_PORT (&samd21_port_a)
224 #define AO_CC1200_SPI_CS_PIN 7
225 #define AO_CC1200_SPI_BUS AO_SPI_5_PB22_PB23_PB03
227 #define AO_CC1200_INT_PORT (&samd21_port_b)
228 #define AO_CC1200_INT_PIN (8)
229 #define AO_CC1200_MCU_WAKEUP_PORT (&samd21_port_b)
230 #define AO_CC1200_MCU_WAKEUP_PIN (9)
232 #define AO_CC1200_INT_GPIO 2
233 #define AO_CC1200_INT_GPIO_IOCFG CC1200_IOCFG2
235 #define AO_CC1200_MARC_GPIO 3
236 #define AO_CC1200_MARC_GPIO_IOCFG CC1200_IOCFG3
238 #define HAS_BOOT_RADIO 0
240 #define HAS_HIGHG_ACCEL 1
244 #define HAS_ADXL375 1
245 #define AO_ADXL375_CS_PORT (&samd21_port_a)
246 #define AO_ADXL375_CS_PIN 8
247 #define AO_ADXL375_SPI_INDEX (AO_SPI_0_PA04_PA05_PA06 | AO_SPI_MODE_3)
249 #define AO_ADXL375_AXIS x
250 #define AO_ADXL375_INVERT 1
258 #define AO_COMPANION_CS_PORT (&samd21_port_a)
259 #define AO_COMPANION_CS_PIN (13)
260 #define AO_COMPANION_SPI_BUS AO_SPI_5_PB22_PB23_PB03
266 #define HAS_MONITOR 0
267 #define LEGACY_MONITOR 0
268 #define HAS_MONITOR_PUT 1
269 #define AO_MONITOR_LED 0
273 * Profiling Viterbi decoding
280 #endif /* _AO_PINS_H_ */