mirror of https://github.com/commaai/panda.git
91 lines
2.7 KiB
C
91 lines
2.7 KiB
C
void gpio_usb_init(void) {
|
|
// A11,A12: USB
|
|
set_gpio_alternate(GPIOA, 11, GPIO_AF10_OTG_FS);
|
|
set_gpio_alternate(GPIOA, 12, GPIO_AF10_OTG_FS);
|
|
GPIOA->OSPEEDR = GPIO_OSPEEDER_OSPEEDR11 | GPIO_OSPEEDER_OSPEEDR12;
|
|
}
|
|
|
|
void gpio_spi_init(void) {
|
|
// A4-A7: SPI
|
|
set_gpio_alternate(GPIOA, 4, GPIO_AF5_SPI1);
|
|
set_gpio_alternate(GPIOA, 5, GPIO_AF5_SPI1);
|
|
set_gpio_alternate(GPIOA, 6, GPIO_AF5_SPI1);
|
|
set_gpio_alternate(GPIOA, 7, GPIO_AF5_SPI1);
|
|
register_set_bits(&(GPIOA->OSPEEDR), GPIO_OSPEEDER_OSPEEDR4 | GPIO_OSPEEDER_OSPEEDR5 | GPIO_OSPEEDER_OSPEEDR6 | GPIO_OSPEEDER_OSPEEDR7);
|
|
}
|
|
|
|
void gpio_usart2_init(void) {
|
|
// A2,A3: USART 2 for debugging
|
|
set_gpio_alternate(GPIOA, 2, GPIO_AF7_USART2);
|
|
set_gpio_alternate(GPIOA, 3, GPIO_AF7_USART2);
|
|
}
|
|
|
|
// Common GPIO initialization
|
|
void common_init_gpio(void) {
|
|
// TODO: Is this block actually doing something???
|
|
// pull low to hold ESP in reset??
|
|
// enable OTG out tied to ground
|
|
GPIOA->ODR = 0;
|
|
GPIOB->ODR = 0;
|
|
GPIOA->PUPDR = 0;
|
|
GPIOB->AFR[0] = 0;
|
|
GPIOB->AFR[1] = 0;
|
|
|
|
// C2: Voltage sense line
|
|
set_gpio_mode(GPIOC, 2, MODE_ANALOG);
|
|
|
|
gpio_usb_init();
|
|
|
|
// B8,B9: CAN 1
|
|
set_gpio_alternate(GPIOB, 8, GPIO_AF8_CAN1);
|
|
set_gpio_alternate(GPIOB, 9, GPIO_AF8_CAN1);
|
|
}
|
|
|
|
void flasher_peripherals_init(void) {
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_DMA2EN;
|
|
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
|
|
RCC->AHB2ENR |= RCC_AHB2ENR_OTGFSEN;
|
|
RCC->APB1ENR |= RCC_APB1ENR_USART2EN;
|
|
}
|
|
|
|
// Peripheral initialization
|
|
void peripherals_init(void) {
|
|
// enable GPIO(A,B,C,D)
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN;
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;
|
|
|
|
// Supplemental
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_DMA2EN;
|
|
RCC->APB1ENR |= RCC_APB1ENR_PWREN; // for RTC config
|
|
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
|
|
|
|
// Connectivity
|
|
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
|
|
RCC->AHB2ENR |= RCC_AHB2ENR_OTGFSEN;
|
|
RCC->APB1ENR |= RCC_APB1ENR_USART2EN;
|
|
RCC->APB1ENR |= RCC_APB1ENR_USART3EN;
|
|
RCC->APB1ENR |= RCC_APB1ENR_UART5EN;
|
|
RCC->APB1ENR |= RCC_APB1ENR_CAN1EN;
|
|
RCC->APB1ENR |= RCC_APB1ENR_CAN2EN;
|
|
RCC->APB1ENR |= RCC_APB1ENR_CAN3EN;
|
|
|
|
// Analog
|
|
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
|
|
RCC->APB1ENR |= RCC_APB1ENR_DACEN;
|
|
|
|
// Timers
|
|
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // clock source timer
|
|
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // main counter
|
|
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; // pedal and fan PWM
|
|
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN; // IR PWM
|
|
RCC->APB1ENR |= RCC_APB1ENR_TIM5EN; // k-line init
|
|
RCC->APB1ENR |= RCC_APB1ENR_TIM6EN; // interrupt timer
|
|
RCC->APB2ENR |= RCC_APB2ENR_TIM9EN; // slow loop
|
|
}
|
|
|
|
void enable_interrupt_timer(void) {
|
|
register_set_bits(&(RCC->APB1ENR), RCC_APB1ENR_TIM6EN); // Enable interrupt timer peripheral
|
|
}
|