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
183 #define AO_UBLOX_VERSION 10
185 #define HAS_SERIAL_1 1
186 #define USE_SERIAL_1_STDIN 0
187 #define SERIAL_1_PA00_PA01 1
189 #define ao_gps_getchar ao_serial1_getchar
190 #define ao_gps_putchar ao_serial1_putchar
191 #define ao_gps_set_speed ao_serial1_set_speed
192 #define ao_gps_fifo (ao_samd21_usart1.rx_fifo)
195 * Pressure sensor settings
199 #define AO_MS5607_PRIVATE_PINS 0
200 #define AO_MS5607_CS_PORT (&samd21_port_a)
201 #define AO_MS5607_CS_PIN 21
202 #define AO_MS5607_MISO_PORT (&samd21_port_a)
203 #define AO_MS5607_MISO_PIN 20
204 #define AO_MS5607_SPI_INDEX AO_SPI_3_PA22_PA23_PA20
210 #define M25_MAX_CHIPS 1
211 #define AO_M25_SPI_CS_PORT (&samd21_port_a)
212 #define AO_M25_SPI_CS_MASK (1 << 27)
213 #define AO_M25_SPI_BUS AO_SPI_5_PB22_PB23_PB03
220 /* gets pretty close to 434.550 */
222 #define AO_RADIO_CAL_DEFAULT 5695733
224 #define AO_CC1200_SPI_CS_PORT (&samd21_port_a)
225 #define AO_CC1200_SPI_CS_PIN 7
226 #define AO_CC1200_SPI_BUS AO_SPI_5_PB22_PB23_PB03
228 #define AO_CC1200_INT_PORT (&samd21_port_b)
229 #define AO_CC1200_INT_PIN (8)
230 #define AO_CC1200_MCU_WAKEUP_PORT (&samd21_port_b)
231 #define AO_CC1200_MCU_WAKEUP_PIN (9)
233 #define AO_CC1200_INT_GPIO 2
234 #define AO_CC1200_INT_GPIO_IOCFG CC1200_IOCFG2
236 #define AO_CC1200_MARC_GPIO 3
237 #define AO_CC1200_MARC_GPIO_IOCFG CC1200_IOCFG3
239 #define HAS_BOOT_RADIO 0
241 #define HAS_HIGHG_ACCEL 1
245 #define HAS_ADXL375 1
246 #define AO_ADXL375_CS_PORT (&samd21_port_a)
247 #define AO_ADXL375_CS_PIN 8
248 #define AO_ADXL375_SPI_INDEX (AO_SPI_0_PA04_PA05_PA06 | AO_SPI_MODE_3)
250 #define AO_ADXL375_AXIS x
251 #define AO_ADXL375_INVERT 1
259 #define AO_COMPANION_CS_PORT (&samd21_port_a)
260 #define AO_COMPANION_CS_PIN (13)
261 #define AO_COMPANION_SPI_BUS AO_SPI_5_PB22_PB23_PB03
267 #define HAS_MONITOR 0
268 #define LEGACY_MONITOR 0
269 #define HAS_MONITOR_PUT 1
270 #define AO_MONITOR_LED 0
274 * Profiling Viterbi decoding
281 #endif /* _AO_PINS_H_ */