mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-11-08 13:33:42 +08:00
22a8575199
Keep official openpilot ancestry and dependency licenses. Store resources directly in Git, remove LFS setup requirements, and leave the downloadable big model outside the source tree.
121 lines
3.8 KiB
C
121 lines
3.8 KiB
C
#pragma once
|
|
|
|
#ifdef BOOTSTUB
|
|
void gpio_usb_init(void) {
|
|
#else
|
|
static void gpio_usb_init(void) {
|
|
#endif
|
|
// A11,A12: USB
|
|
set_gpio_alternate(GPIOA, 11, GPIO_AF10_OTG1_FS);
|
|
set_gpio_alternate(GPIOA, 12, GPIO_AF10_OTG1_FS);
|
|
GPIOA->OSPEEDR = GPIO_OSPEEDR_OSPEED11 | GPIO_OSPEEDR_OSPEED12;
|
|
}
|
|
|
|
void gpio_spi_init(void) {
|
|
set_gpio_alternate(GPIOE, 11, GPIO_AF5_SPI4);
|
|
set_gpio_alternate(GPIOE, 12, GPIO_AF5_SPI4);
|
|
set_gpio_alternate(GPIOE, 13, GPIO_AF5_SPI4);
|
|
set_gpio_alternate(GPIOE, 14, GPIO_AF5_SPI4);
|
|
register_set_bits(&(GPIOE->OSPEEDR), GPIO_OSPEEDR_OSPEED11 | GPIO_OSPEEDR_OSPEED12 | GPIO_OSPEEDR_OSPEED13 | GPIO_OSPEEDR_OSPEED14);
|
|
}
|
|
|
|
// Common GPIO initialization
|
|
void common_init_gpio(void) {
|
|
//F11: VOLT_S
|
|
set_gpio_pullup(GPIOF, 11, PULL_NONE);
|
|
set_gpio_mode(GPIOF, 11, MODE_ANALOG);
|
|
|
|
gpio_usb_init();
|
|
|
|
// B8,B9: FDCAN1
|
|
set_gpio_pullup(GPIOB, 8, PULL_NONE);
|
|
set_gpio_alternate(GPIOB, 8, GPIO_AF9_FDCAN1);
|
|
|
|
set_gpio_pullup(GPIOB, 9, PULL_NONE);
|
|
set_gpio_alternate(GPIOB, 9, GPIO_AF9_FDCAN1);
|
|
|
|
// B5,B6 (mplex to B12,B13): FDCAN2
|
|
set_gpio_pullup(GPIOB, 12, PULL_NONE);
|
|
set_gpio_pullup(GPIOB, 13, PULL_NONE);
|
|
|
|
set_gpio_pullup(GPIOB, 5, PULL_NONE);
|
|
set_gpio_alternate(GPIOB, 5, GPIO_AF9_FDCAN2);
|
|
|
|
set_gpio_pullup(GPIOB, 6, PULL_NONE);
|
|
set_gpio_alternate(GPIOB, 6, GPIO_AF9_FDCAN2);
|
|
|
|
// G9,G10: FDCAN3
|
|
set_gpio_pullup(GPIOG, 9, PULL_NONE);
|
|
set_gpio_alternate(GPIOG, 9, GPIO_AF2_FDCAN3);
|
|
|
|
set_gpio_pullup(GPIOG, 10, PULL_NONE);
|
|
set_gpio_alternate(GPIOG, 10, GPIO_AF2_FDCAN3);
|
|
}
|
|
|
|
#ifdef BOOTSTUB
|
|
void flasher_peripherals_init(void) {
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_USB1OTGHSEN;
|
|
|
|
// SPI + DMA
|
|
RCC->APB2ENR |= RCC_APB2ENR_SPI4EN;
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_DMA2EN;
|
|
|
|
// LED PWM
|
|
RCC->APB1LENR |= RCC_APB1LENR_TIM3EN;
|
|
}
|
|
#endif
|
|
|
|
// Peripheral initialization
|
|
void peripherals_init(void) {
|
|
// enable GPIO(A,B,C,D,E,F,G,H)
|
|
RCC->AHB4ENR |= RCC_AHB4ENR_GPIOAEN;
|
|
RCC->AHB4ENR |= RCC_AHB4ENR_GPIOBEN;
|
|
RCC->AHB4ENR |= RCC_AHB4ENR_GPIOCEN;
|
|
RCC->AHB4ENR |= RCC_AHB4ENR_GPIODEN;
|
|
RCC->AHB4ENR |= RCC_AHB4ENR_GPIOEEN;
|
|
RCC->AHB4ENR |= RCC_AHB4ENR_GPIOFEN;
|
|
RCC->AHB4ENR |= RCC_AHB4ENR_GPIOGEN;
|
|
|
|
// Enable CPU access to SRAMs for DMA
|
|
RCC->AHB2ENR |= RCC_AHB2ENR_SRAM1EN | RCC_AHB2ENR_SRAM2EN;
|
|
|
|
// Supplemental
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_DMA1EN; // DAC DMA
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_DMA2EN; // SPI DMA
|
|
RCC->APB4ENR |= RCC_APB4ENR_SYSCFGEN;
|
|
RCC->AHB4ENR |= RCC_AHB4ENR_BDMAEN; // Audio DMA
|
|
RCC->APB4ENR |= RCC_APB4ENR_DTSEN; // Digital Temperature Sensor
|
|
|
|
// Connectivity
|
|
RCC->APB2ENR |= RCC_APB2ENR_SPI4EN; // SPI
|
|
RCC->APB1LENR |= RCC_APB1LENR_I2C5EN; // codec I2C
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_USB1OTGHSEN; // USB
|
|
RCC->AHB1LPENR |= RCC_AHB1LPENR_USB1OTGHSLPEN; // USB LP needed for CSleep state(__WFI())
|
|
RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_USB1OTGHSULPILPEN); // disable USB ULPI
|
|
RCC->APB1HENR |= RCC_APB1HENR_FDCANEN; // FDCAN core enable
|
|
|
|
// Analog
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_ADC12EN; // Enable ADC12 clocks
|
|
RCC->AHB4ENR |= RCC_AHB4ENR_ADC3EN; // Enable ADC3 clocks
|
|
RCC->APB1LENR |= RCC_APB1LENR_DAC12EN; // DAC
|
|
|
|
// Audio
|
|
RCC->APB2ENR |= RCC_APB2ENR_DFSDM1EN; // D/S demodulator for mic
|
|
RCC->APB4ENR |= RCC_APB4ENR_SAI4EN; // SAI4
|
|
|
|
// Timers
|
|
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // clock source timer
|
|
RCC->APB1LENR |= RCC_APB1LENR_TIM2EN; // main counter
|
|
RCC->APB1LENR |= RCC_APB1LENR_TIM3EN; // fan + led pwm
|
|
RCC->APB1LENR |= RCC_APB1LENR_TIM6EN; // interrupt timer
|
|
RCC->APB1LENR |= RCC_APB1LENR_TIM7EN; // DMA trigger timer
|
|
RCC->APB2ENR |= RCC_APB2ENR_TIM8EN; // tick timer
|
|
RCC->APB1LENR |= RCC_APB1LENR_TIM12EN; // slow loop
|
|
RCC->APB1LENR |= RCC_APB1LENR_TIM5EN; // sound trigger timer
|
|
|
|
}
|
|
|
|
void enable_interrupt_timer(void) {
|
|
register_set_bits(&(RCC->APB1LENR), RCC_APB1LENR_TIM6EN); // Enable interrupt timer peripheral
|
|
}
|