13EventGroupHandle_t xTaskEnableGroup;
14EventGroupHandle_t xSystemStatusGroup;
15EventGroupHandle_t xMsgReadyGroup;
18MessageBufferHandle_t xLoRaTxBuff;
19MessageBufferHandle_t xUsbTxBuff;
21StreamBufferHandle_t xUsbRxBuff;
22StreamBufferHandle_t xGpsRxBuff;
25SemaphoreHandle_t xUsbMutex;
49 configure_MISC_GPIO();
50 configure_UART3_GPS();
51 configure_SPI1_Sensor_Suite();
52 configure_SPI3_LoRa();
53 configure_SPI4_Flash();
62 CAN_Peripheral_config();
70 unsigned int CANHigh = 0;
71 unsigned int CANLow = 0;
72 unsigned int id = 0x603;
73 CAN_TX(CAN_AB, 8, CANHigh, CANLow,
id);
76 TaskHandle_t xSystemInitHandle;
77 xTaskCreate(
vSystemInit,
"SystemInit", 16192, NULL, configMAX_PRIORITIES, &xSystemInitHandle);
78 vTaskStartScheduler();
98 static DeviceHandle_t flashHandle __attribute__((section(
".device_flash"), unused));
100 &flash,
"Flash", FLASH_PORT, FLASH_CS, FLASH_PAGE_SIZE, FLASH_PAGE_COUNT
107 static DeviceHandle_t usbHandle __attribute__((section(
".device_usb"), unused));
109 &usb,
"USB", USB_INTERFACE, USB_PORT, USB_PINS, USB_BAUD, OVER8
114 static DeviceHandle_t loraHandle __attribute__((section(
".device_lora"), unused));
116 &lora,
"LoRa", LORA_PORT, LORA_CS, BW500, SF9, CR5
125 static DeviceHandle_t lAccelHandle __attribute__((section(
".device_lAccel"), unused));
127 &lAccel,
"LAccel", ACCEL_PORT_1, ACCEL_CS_1, ACCEL_SCALE_LOW, ACCEL_AXES_1, ACCEL_SIGN_1
132 static DeviceHandle_t hAccelHandle __attribute__((section(
".device_hAccel"), unused));
134 &hAccel,
"HAccel", ACCEL_PORT_2, ACCEL_CS_2, ACCEL_SCALE_HIGH, ACCEL_AXES_2, ACCEL_SIGN_2
138 static DeviceHandle_t accelHandle __attribute__((section(
".device_Accel"), unused));
139 memcpy(accelHandle.name,
"Accel", DEVICE_NAME_LENGTH);
140 accelHandle.device = &lAccel;
146 static DeviceHandle_t gyroHandle __attribute__((section(
".device_gyro"), unused));
148 &gyro,
"Gyro", GYRO_PORT, GYRO_CS, A3G4250D_SENSITIVITY, GYRO_AXES, GYRO_SIGN
155 static DeviceHandle_t baroHandle __attribute__((section(
".device_baro"), unused));
157 &baro,
"Baro", BARO_PORT, BARO_CS, BMP581_TEMP_SENSITIVITY, BMP581_PRESS_SENSITIVITY
164 static DeviceHandle_t gpsHandle __attribute__((section(
".device_gps"), unused));
165 gpsHandle = GPS_init(
166 &gps,
"GPS", GPS_INTERFACE, GPS_PORT, GPS_PINS, GPS_BAUD
188 vTaskDelay(pdMS_TO_TICKS(500));
193 xTaskEnableGroup = xEventGroupCreate();
194 xMsgReadyGroup = xEventGroupCreate();
195 xSystemStatusGroup = xEventGroupCreate();
196 xEventGroupSetBits(xSystemStatusGroup, GROUP_SYSTEM_STATUS_PAYLOAD | GROUP_SYSTEM_STATUS_AEROBRAKES);
198 xEventGroupSetBits(xMsgReadyGroup, GROUP_MESSAGE_READY_LORA);
201 xUsbTxBuff = xMessageBufferCreate(USB_TX_SIZE);
202 xUsbRxBuff = xStreamBufferCreate(USB_RX_SIZE, 1);
203 xGpsRxBuff = xStreamBufferCreate(GPS_RX_SIZE, 1);
205 xUsbMutex = xSemaphoreCreateMutex();
208 xLoRaTxBuff = xMessageBufferCreate(LORA_BUFF_SIZE);
216 static StateHandle_t __attribute__((section(
".state_mem"), unused)) mem;
218 memcpy(mem.name,
"Memory", STATE_NAME_LENGTH);
220 uint8_t buff[MEM_BUFF_SIZE];
221 MemBuff_init(&_mem, buff, MEM_BUFF_SIZE, FLASH_PAGE_SIZE);
230 static StateHandle_t __attribute__((section(
".state_tilt"), unused)) tilt;
231 static float _tilt = 0.0f;
233 memcpy(tilt.name,
"Tilt", STATE_NAME_LENGTH);
236 static StateHandle_t __attribute__((section(
".state_cosine"), unused)) cosine;
237 static float _cosine = 0.0f;
238 cosine.state = &_cosine;
239 memcpy(cosine.name,
"Cosine", STATE_NAME_LENGTH);
242 static StateHandle_t __attribute__((section(
".state_altitude"), unused)) altitude;
243 static float _altitude = 0.0f;
244 altitude.state = &_altitude;
245 memcpy(altitude.name,
"Altitude", STATE_NAME_LENGTH);
248 static StateHandle_t __attribute__((section(
".state_velocity"), unused)) velocity;
249 static float _velocity = 0.0f;
250 velocity.state = &_velocity;
251 memcpy(velocity.name,
"Velocity", STATE_NAME_LENGTH);
254 static StateHandle_t __attribute__((section(
".state_flightState"), unused)) flightState;
255 static enum State _flightState = PRELAUNCH;
256 flightState.state = &_flightState;
257 memcpy(flightState.name,
"FlightState", STATE_NAME_LENGTH);
260 static StateHandle_t __attribute__((section(
".state_qRot"), unused)) qRot;
261 static Quaternion _qRot;
262 Quaternion_init(&_qRot);
264 memcpy(qRot.name,
"RotationQuaternion", STATE_NAME_LENGTH);
267 static StateHandle_t __attribute__((section(
".state_vAttitude"), unused)) vAttitude;
268 static float _vAttitude[3] = {0, 0, 1};
269 vAttitude.state = _vAttitude;
270 memcpy(vAttitude.name,
"AttitudeVector", STATE_NAME_LENGTH);
273 static StateHandle_t __attribute__((section(
".state_vLaunch"), unused)) vLaunch;
274 static float _vLaunch[3] = {0, 0, 1};
275 vLaunch.state = _vLaunch;
276 memcpy(vLaunch.name,
"LaunchVector", STATE_NAME_LENGTH);
279 static StateHandle_t __attribute__((section(
".state_avgVel"), unused)) avgVel;
280 static SlidingWindow _avgVel = {};
281 avgVel.state = &_avgVel;
282 memcpy(avgVel.name,
"AvgVelBuffer", STATE_NAME_LENGTH);
285 static StateHandle_t __attribute__((section(
".state_avgPress"), unused)) avgPress;
286 static SlidingWindow _avgPress = {};
287 avgPress.state = &_avgPress;
288 memcpy(avgPress.name,
"AvgPressBuffer", STATE_NAME_LENGTH);
291 float avgPressBuff[AVG_BUFF_SIZE];
292 SlidingWindow_init(avgPress.state, avgPressBuff, AVG_BUFF_SIZE);
295 float avgVelBuff[AVG_BUFF_SIZE];
296 SlidingWindow_init(avgVel.state, avgVelBuff, AVG_BUFF_SIZE);
305 xTaskCreate(vHDataAcquisition,
"HDataAcq", 512, &_mem, configMAX_PRIORITIES - 2, &handles.xHDataAcquisitionHandle);
306 xTaskCreate(vLDataAcquisition,
"LDataAcq", 512, &_mem, configMAX_PRIORITIES - 3, &handles.xLDataAcquisitionHandle);
307 xTaskCreate(vStateUpdate,
"StateUpdate", 512, &handles, configMAX_PRIORITIES - 4, &handles.xStateUpdateHandle);
308 xTaskCreate(vFlashBuffer,
"FlashData", 512, &_mem, configMAX_PRIORITIES - 1, &handles.xFlashBufferHandle);
309 xTaskCreate(vLoRaSample,
"LoRaSample", 256, NULL, configMAX_PRIORITIES - 6, &handles.xLoRaSampleHandle);
310 xTaskCreate(vLoRaTransmit,
"LoRaTx", 256, NULL, configMAX_PRIORITIES - 5, &handles.xLoRaTransmitHandle);
311 xTaskCreate(vUsbTransmit,
"UsbTx", 256, NULL, configMAX_PRIORITIES - 6, &handles.xUsbTransmitHandle);
312 xTaskCreate(vUsbReceive,
"UsbRx", 256, &shell, configMAX_PRIORITIES - 6, &handles.xUsbReceiveHandle);
313 xTaskCreate(vIdle,
"Idle", 256, &_mem, tskIDLE_PRIORITY, &handles.xIdleHandle);
314 xTaskCreate(vPayloadTransmit,
"PayloadTx", 512, NULL, configMAX_PRIORITIES - 6, &handles.xPayloadTransmitHandle);
315 xTaskCreate(vGpsTransmit,
"GpsRead", 512, NULL, configMAX_PRIORITIES - 6, &handles.xGpsTransmitHandle);
321 xTraceEnable(TRC_START);
333 NVIC_SetPriority(EXTI1_IRQn, 9);
334 NVIC_EnableIRQ(EXTI1_IRQn);
335 NVIC_SetPriority(USART6_IRQn, 10);
336 NVIC_EnableIRQ(USART6_IRQn);
337 NVIC_SetPriority(USART3_IRQn, 10);
338 NVIC_EnableIRQ(USART3_IRQn);
339 EXTI->RTSR |= (0x02 | 0x04);
340 EXTI->IMR |= (0x02 | 0x04);
341 SYSCFG->EXTICR[0] &= (~(0XF0));
342 SYSCFG->EXTICR[0] = 0x230;
DeviceHandle_t A3G4250D_init(A3G4250D *, char[DEVICE_NAME_LENGTH], GPIO_TypeDef *, unsigned long, const float, const uint8_t *, const int8_t *)
Initialiser for a A3G4250D gyroscope.
DeviceHandle_t BMP581_init(BMP581 *, char[DEVICE_NAME_LENGTH], GPIO_TypeDef *, unsigned long, const float, const float)
Initialiser for a BMP581 barometer.
DeviceHandle_t Flash_init(Flash *, char[DEVICE_NAME_LENGTH], GPIO_TypeDef *, unsigned long, int, long)
Initialise flash struct.
DeviceHandle_t KX134_1211_init(KX134_1211 *, char[DEVICE_NAME_LENGTH], GPIO_TypeDef *, unsigned long, const uint8_t, const uint8_t *, const int8_t *)
Initialiser for a KX134-1211 accelerometer.
DeviceHandle_t LoRa_init(LoRa *, char[DEVICE_NAME_LENGTH], GPIO_TypeDef *, unsigned long, Bandwidth, SpreadingFactor, CodingRate)
Initializes the LoRa module with specified configuration parameters.
DeviceHandle_t UART_init(UART *, char[DEVICE_NAME_LENGTH], USART_TypeDef *, GPIO_TypeDef *, UART_Pins, uint32_t, OversampleMode)
Initialiser for a UART device interface.
Struct definition for UART interface.
void vSystemInit(void *pvParameters)
Initialisation of RTOS tasks.
void configure_interrupts()
int Shell_init(Shell *)
Initializes the shell, registering programs from shell vector.