#define SPI_1_PA5_PA6_PA7 0
#define SPI_1_PB3_PB4_PB5 0
#define SPI_1_PE13_PE14_PE15 1 /* */
+#define SPI_1_OSPEEDR STM_OSPEEDR_10MHz
-#define HAS_SPI_2 0
+#define HAS_SPI_2 1
#define SPI_2_PB13_PB14_PB15 1 /* */
#define SPI_2_PD1_PD3_PD4 0
+#define SPI_2_OSPEEDR STM_OSPEEDR_10MHz
+#define HAS_STORAGE_DEBUG 1
#define SPI_2_PORT (&stm_gpiob)
#define SPI_2_SCK_PIN 13
* ADC
*/
#define AO_DATA_RING 32
-#define AO_ADC_NUM_SENSE 6
struct ao_adc {
int16_t tx_pa_current; /* 0 ADC_IN0 */
- int16_t tx_pa_temp; /* 1 ADC_IN1 */
- int16_t tx_xo_temp; /* 2 ADC_IN2 */
- int16_t rx_xo_temp; /* 3 ADC_IN3 */
- int16_t ihu_current; /* 4 ADC_IN8 */
- int16_t rx_cd; /* 5 ADC_IN9 */
- int16_t ant_sense_1; /* 6 ADC_IN10 */
- int16_t ant_sense_2; /* 7 ADC_IN11 */
- int16_t gyro_x_1; /* 8 ADC_IN12 */
- int16_t gyro_z_1; /* 9 ADC_IN13 */
- int16_t gyro_x_2; /* 10 ADC_IN14 */
- int16_t gyro_z_2; /* 11 ADC_IN15 */
+ int16_t tx_temp; /* 1 ADC_IN1 */
+ int16_t exp4_temp; /* 2 ADC_IN2 */
+ int16_t rx_temp; /* 3 ADC_IN3 */
+ int16_t tx_analog_1; /* 4 ADC_IN4 */
+ int16_t sense_batt; /* 5 ADC_IN5 */
+ int16_t rx_analog_1; /* 6 ADC_IN6 */
+ int16_t rx_rssi; /* 7 ADC_IN8 */
+ int16_t rx_cd; /* 8 ADC_IN9 */
+ int16_t ant_sense_1; /* 9 ADC_IN10 */
+ int16_t ant_sense_2; /* 10 ADC_IN11 */
+ int16_t gyro_x_1; /* 11 ADC_IN12 */
+ int16_t gyro_z_1; /* 12 ADC_IN13 */
+ int16_t gyro_vref_1; /* 13 ADC_IN24 */
+ int16_t gyro_x_2; /* 14 ADC_IN14 */
+ int16_t gyro_z_2; /* 15 ADC_IN15 */
+ int16_t gyro_vref_2; /* 16 ADC_IN25 */
};
#define AO_ADC_TX_PA_CURRENT 0
#define AO_ADC_TX_PA_CURRENT_PORT (&stm_gpioa)
#define AO_ADC_TX_PA_CURRENT_PIN 0
-#define AO_ADC_TX_PA_TEMP 1
-#define AO_ADC_TX_PA_TEMP_PORT (&stm_gpioa)
-#define AO_ADC_TX_PA_TEMP_PIN 1
+#define AO_ADC_TX_TEMP 1
+#define AO_ADC_TX_TEMP_PORT (&stm_gpioa)
+#define AO_ADC_TX_TEMP_PIN 1
-#define AO_ADC_TX_XO_TEMP 2
-#define AO_ADC_TX_XO_TEMP_PORT (&stm_gpioa)
-#define AO_ADC_TX_XO_TEMP_PIN 2
+#define AO_ADC_EXP4_TEMP 2
+#define AO_ADC_EXP4_TEMP_PORT (&stm_gpioa)
+#define AO_ADC_EXP4_TEMP_PIN 2
-#define AO_ADC_RX_XO_TEMP 3
-#define AO_ADC_RX_XO_TEMP_PORT (&stm_gpioa)
-#define AO_ADC_RX_XO_TEMP_PIN 3
+#define AO_ADC_RX_TEMP 3
+#define AO_ADC_RX_TEMP_PORT (&stm_gpioa)
+#define AO_ADC_RX_TEMP_PIN 3
-#define AO_ADC_IHU_CURRENT 8
-#define AO_ADC_IHU_CURRENT_PORT (&stm_gpiob)
-#define AO_ADC_IHU_CURRENT_PIN 0
+#define AO_ADC_TX_ANALOG_1 4
+#define AO_ADC_TX_ANALOG_1_PORT (&stm_gpioa)
+#define AO_ADC_TX_ANALOG_1_PIN 4
+
+#define AO_ADC_SENSE_BATT 5
+#define AO_ADC_SENSE_BATT_PORT (&stm_gpioa)
+#define AO_ADC_SENSE_BATT_PIN 5
+
+#define AO_ADC_RX_ANALOG_1 6
+#define AO_ADC_RX_ANALOG_1_PORT (&stm_gpioa)
+#define AO_ADC_RX_ANALOG_1_PIN 6
+
+#define AO_ADC_RX_RSSI 8
+#define AO_ADC_RX_RSSI_PORT (&stm_gpiob)
+#define AO_ADC_RX_RSSI_PIN 0
#define AO_ADC_RX_CD 9
#define AO_ADC_RX_CD_PORT (&stm_gpiob)
#define AO_ADC_GYRO_Z_1_PORT (&stm_gpioc)
#define AO_ADC_GYRO_Z_1_PIN 3
+#define AO_ADC_GYRO_VREF_1 24
+#define AO_ADC_GYRO_VREF_1_PORT (&stm_gpioe)
+#define AO_ADC_GYRO_VREF_1_PIN 9
+
#define AO_ADC_GYRO_X_2 14
#define AO_ADC_GYRO_X_2_PORT (&stm_gpioc)
#define AO_ADC_GYRO_X_2_PIN 4
#define AO_ADC_GYRO_Z_2_PORT (&stm_gpioc)
#define AO_ADC_GYRO_Z_2_PIN 5
+#define AO_ADC_GYRO_VREF_2 25
+#define AO_ADC_GYRO_VREF_2_PORT (&stm_gpioe)
+#define AO_ADC_GYRO_VREF_2_PIN 10
+
#define AO_ADC_TEMP 16
#define AO_ADC_RCC_AHBENR ((1 << STM_RCC_AHBENR_GPIOAEN) | \
(1 << STM_RCC_AHBENR_GPIOBEN) | \
- (1 << STM_RCC_AHBENR_GPIOCEN))
+ (1 << STM_RCC_AHBENR_GPIOCEN) | \
+ (1 << STM_RCC_AHBENR_GPIOEEN))
-#define AO_NUM_ADC_PIN (12)
+#define AO_NUM_ADC_PIN (17)
#define AO_ADC_PIN0_PORT AO_ADC_TX_PA_CURRENT_PORT
#define AO_ADC_PIN0_PIN AO_ADC_TX_PA_CURRENT_PIN
-#define AO_ADC_PIN1_PORT AO_ADC_TX_PA_TEMP_PORT
-#define AO_ADC_PIN1_PIN AO_ADC_TX_PA_TEMP_PIN
-#define AO_ADC_PIN2_PORT AO_ADC_TX_XO_TEMP_PORT
-#define AO_ADC_PIN2_PIN AO_ADC_TX_XO_TEMP_PIN
-#define AO_ADC_PIN3_PORT AO_ADC_RX_XO_TEMP_PORT
-#define AO_ADC_PIN3_PIN AO_ADC_RX_XO_TEMP_PIN
-#define AO_ADC_PIN4_PORT AO_ADC_IHU_CURRENT_PORT
-#define AO_ADC_PIN4_PIN AO_ADC_IHU_CURRENT_PIN
-#define AO_ADC_PIN5_PORT AO_ADC_RX_CD_PORT
-#define AO_ADC_PIN5_PIN AO_ADC_RX_CD_PIN
-#define AO_ADC_PIN6_PORT AO_ADC_ANT_SENSE_1_PORT
-#define AO_ADC_PIN6_PIN AO_ADC_ANT_SENSE_1_PIN
-#define AO_ADC_PIN7_PORT AO_ADC_ANT_SENSE_2_PORT
-#define AO_ADC_PIN7_PIN AO_ADC_ANT_SENSE_2_PIN
-#define AO_ADC_PIN8_PORT AO_ADC_GYRO_X_1_PORT
-#define AO_ADC_PIN8_PIN AO_ADC_GYRO_X_1_PIN
-#define AO_ADC_PIN9_PORT AO_ADC_GYRO_Z_1_PORT
-#define AO_ADC_PIN9_PIN AO_ADC_GYRO_Z_1_PIN
-#define AO_ADC_PIN10_PORT AO_ADC_GYRO_X_2_PORT
-#define AO_ADC_PIN10_PIN AO_ADC_GYRO_X_2_PIN
-#define AO_ADC_PIN11_PORT AO_ADC_GYRO_Z_2_PORT
-#define AO_ADC_PIN11_PIN AO_ADC_GYRO_Z_2_PIN
+#define AO_ADC_PIN1_PORT AO_ADC_TX_TEMP_PORT
+#define AO_ADC_PIN1_PIN AO_ADC_TX_TEMP_PIN
+#define AO_ADC_PIN2_PORT AO_ADC_EXP4_TEMP_PORT
+#define AO_ADC_PIN2_PIN AO_ADC_EXP4_TEMP_PIN
+#define AO_ADC_PIN3_PORT AO_ADC_RX_TEMP_PORT
+#define AO_ADC_PIN3_PIN AO_ADC_RX_TEMP_PIN
+#define AO_ADC_PIN4_PORT AO_ADC_TX_ANALOG_1_PORT
+#define AO_ADC_PIN4_PIN AO_ADC_TX_ANALOG_1_PIN
+#define AO_ADC_PIN5_PORT AO_ADC_SENSE_BATT_PORT
+#define AO_ADC_PIN5_PIN AO_ADC_SENSE_BATT_PIN
+#define AO_ADC_PIN6_PORT AO_ADC_RX_ANALOG_1_PORT
+#define AO_ADC_PIN6_PIN AO_ADC_RX_ANALOG_1_PIN
+#define AO_ADC_PIN7_PORT AO_ADC_RX_RSSI_PORT
+#define AO_ADC_PIN7_PIN AO_ADC_RX_RSSI_PIN
+#define AO_ADC_PIN8_PORT AO_ADC_RX_CD_PORT
+#define AO_ADC_PIN8_PIN AO_ADC_RX_CD_PIN
+#define AO_ADC_PIN9_PORT AO_ADC_ANT_SENSE_1_PORT
+#define AO_ADC_PIN9_PIN AO_ADC_ANT_SENSE_1_PIN
+#define AO_ADC_PIN10_PORT AO_ADC_ANT_SENSE_2_PORT
+#define AO_ADC_PIN10_PIN AO_ADC_ANT_SENSE_2_PIN
+#define AO_ADC_PIN11_PORT AO_ADC_GYRO_X_1_PORT
+#define AO_ADC_PIN11_PIN AO_ADC_GYRO_X_1_PIN
+#define AO_ADC_PIN12_PORT AO_ADC_GYRO_Z_1_PORT
+#define AO_ADC_PIN12_PIN AO_ADC_GYRO_Z_1_PIN
+#define AO_ADC_PIN13_PORT AO_ADC_GYRO_VREF_1_PORT
+#define AO_ADC_PIN13_PIN AO_ADC_GYRO_VREF_1_PIN
+#define AO_ADC_PIN14_PORT AO_ADC_GYRO_X_2_PORT
+#define AO_ADC_PIN14_PIN AO_ADC_GYRO_X_2_PIN
+#define AO_ADC_PIN15_PORT AO_ADC_GYRO_Z_2_PORT
+#define AO_ADC_PIN15_PIN AO_ADC_GYRO_Z_2_PIN
+#define AO_ADC_PIN16_PORT AO_ADC_GYRO_VREF_2_PORT
+#define AO_ADC_PIN16_PIN AO_ADC_GYRO_VREF_2_PIN
#define AO_NUM_ADC (AO_NUM_ADC_PIN + 1) /* Add internal temp sensor */
#define AO_ADC_SQ1 AO_ADC_TX_PA_CURRENT
-#define AO_ADC_SQ2 AO_ADC_TX_PA_TEMP
-#define AO_ADC_SQ3 AO_ADC_TX_XO_TEMP
-#define AO_ADC_SQ4 AO_ADC_RX_XO_TEMP
-#define AO_ADC_SQ5 AO_ADC_IHU_CURRENT
-#define AO_ADC_SQ6 AO_ADC_RX_CD
-#define AO_ADC_SQ7 AO_ADC_ANT_SENSE_1
-#define AO_ADC_SQ8 AO_ADC_ANT_SENSE_2
-#define AO_ADC_SQ9 AO_ADC_GYRO_X_1
-#define AO_ADC_SQ10 AO_ADC_GYRO_Z_1
-#define AO_ADC_SQ11 AO_ADC_GYRO_X_2
-#define AO_ADC_SQ12 AO_ADC_GYRO_Z_2
-#define AO_ADC_SQ13 AO_ADC_TEMP
+#define AO_ADC_SQ1_NAME "tx_pa_current"
+#define AO_ADC_SQ2 AO_ADC_TX_TEMP
+#define AO_ADC_SQ2_NAME "tx_temp"
+#define AO_ADC_SQ3 AO_ADC_EXP4_TEMP
+#define AO_ADC_SQ3_NAME "expr_temp"
+#define AO_ADC_SQ4 AO_ADC_RX_TEMP
+#define AO_ADC_SQ4_NAME "rx_temp"
+#define AO_ADC_SQ5 AO_ADC_TX_ANALOG_1
+#define AO_ADC_SQ5_NAME "tx_analog_1"
+#define AO_ADC_SQ6 AO_ADC_SENSE_BATT
+#define AO_ADC_SQ6_NAME "sense_batt"
+#define AO_ADC_SQ7 AO_ADC_RX_ANALOG_1
+#define AO_ADC_SQ7_NAME "rx_analog_1"
+#define AO_ADC_SQ8 AO_ADC_RX_RSSI
+#define AO_ADC_SQ8_NAME "rx_rssi"
+#define AO_ADC_SQ9 AO_ADC_RX_CD
+#define AO_ADC_SQ9_NAME "rx_cd"
+#define AO_ADC_SQ10 AO_ADC_ANT_SENSE_1
+#define AO_ADC_SQ10_NAME "ant_sense_1"
+#define AO_ADC_SQ11 AO_ADC_ANT_SENSE_2
+#define AO_ADC_SQ11_NAME "ant_sense_2"
+#define AO_ADC_SQ12 AO_ADC_GYRO_X_1
+#define AO_ADC_SQ12_NAME "gyro_x_1"
+#define AO_ADC_SQ13 AO_ADC_GYRO_Z_1
+#define AO_ADC_SQ13_NAME "gyro_z_1"
+#define AO_ADC_SQ14 AO_ADC_GYRO_VREF_1
+#define AO_ADC_SQ14_NAME "gyro_vref_1"
+#define AO_ADC_SQ15 AO_ADC_GYRO_X_2
+#define AO_ADC_SQ15_NAME "gyro_x_2"
+#define AO_ADC_SQ16 AO_ADC_GYRO_Z_2
+#define AO_ADC_SQ16_NAME "gyro_z_2"
+#define AO_ADC_SQ17 AO_ADC_GYRO_VREF_2
+#define AO_ADC_SQ17_NAME "gyro_vref_2"
+#define AO_ADC_SQ18 AO_ADC_TEMP
+#define AO_ADC_SQ18_NAME "temp"
+
+/* Watchdog timer */
+
+#define AO_WATCHDOG_INTERVAL AO_MS_TO_TICKS(40)
+#define AO_WATCHDOG_PORT (&stm_gpiod)
+#define AO_WATCHDOG_BIT 3
+
+/* MRAM device */
+
+#define AO_MR25_SPI_CS_PORT (&stm_gpiod)
+#define AO_MR25_SPI_CS_PIN 0
+#define AO_MR25_SPI_BUS AO_SPI_2_PB13_PB14_PB15
+
+/* SD card */
+
+#define AO_SDCARD_SPI_CS_PORT (&stm_gpiod)
+#define AO_SDCARD_SPI_CS_PIN 1
+#define AO_SDCARD_SPI_BUS AO_SPI_2_PB13_PB14_PB15
+#define AO_SDCARD_SPI_PORT (&stm_gpiob)
+#define AO_SDCARD_SPI_SCK_PIN 13
+#define AO_SDCARD_SPI_MISO_PIN 14
+#define AO_SDCARD_SPI_MOSI_PIN 15
#endif /* _AO_PINS_H_ */