mirror of
https://github.com/infiniteCable2/panda.git
synced 2026-02-18 17:23:52 +08:00
* H7 drivers * Include H7 into the code * fix flash write for H7 * get serial from flasher.h from F4 and H7 * flash.sh and recover.sh for gen3 * add set_data_speed for BRS CAN FD * build all fws * gen3 to panda lib * gen3 name in scons project * disable fd can and brs * gen3 to CI tests * jenkins fix for new tests and build_all * fix pedal test * pedal in panda tests again... * cleanup llfdcan.h * cleanup clock.h * Add LDORDY bit check instead of delay * missing define in stm32h735xx.h lib * board_id helper * enable debug detection again * clean gpio inits * fix board_id helper, make cleaner * comment MCUs in stm lib for faster misra * target MCU * misra-5.5 * improve headers and misra speed * cleanup CI tests * change naming from gen3 to h7 * readable if statement * cleanup llusb.h * only cycle one transceifer in bus-off * move unused funcs to common header * bus_off_err reset * misra 10.4 fdcan * extern to can_data_speed variable * limit can_data_speed array size to 3 * reinit fd can on data speed change * Improve test with ELM327 and extaddr check * bugfix for fdcan * panda python config naming * abstracted init request in llfdcan * misra fdcan * Improve llusb.h for H7
90 lines
2.7 KiB
C
90 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_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();
|
|
|
|
// A9,A10: USART 1 for talking to the GPS
|
|
set_gpio_alternate(GPIOA, 9, GPIO_AF7_USART1);
|
|
set_gpio_alternate(GPIOA, 10, GPIO_AF7_USART1);
|
|
|
|
// B8,B9: CAN 1
|
|
#ifdef STM32F4
|
|
set_gpio_alternate(GPIOB, 8, GPIO_AF8_CAN1);
|
|
set_gpio_alternate(GPIOB, 9, GPIO_AF8_CAN1);
|
|
#else
|
|
set_gpio_alternate(GPIOB, 8, GPIO_AF9_CAN1);
|
|
set_gpio_alternate(GPIOB, 9, GPIO_AF9_CAN1);
|
|
#endif
|
|
}
|
|
|
|
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 GPIOB, UART2, CAN, USB clock
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN;
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;
|
|
|
|
RCC->AHB1ENR |= RCC_AHB1ENR_DMA2EN;
|
|
RCC->APB1ENR |= RCC_APB1ENR_USART2EN;
|
|
RCC->APB1ENR |= RCC_APB1ENR_USART3EN;
|
|
#ifdef PANDA
|
|
RCC->APB1ENR |= RCC_APB1ENR_UART5EN;
|
|
#endif
|
|
RCC->APB1ENR |= RCC_APB1ENR_CAN1EN;
|
|
RCC->APB1ENR |= RCC_APB1ENR_CAN2EN;
|
|
#ifdef CAN3
|
|
RCC->APB1ENR |= RCC_APB1ENR_CAN3EN;
|
|
#endif
|
|
RCC->APB1ENR |= RCC_APB1ENR_DACEN;
|
|
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->APB1ENR |= RCC_APB1ENR_TIM12EN; // gmlan_alt
|
|
RCC->APB1ENR |= RCC_APB1ENR_PWREN; // for RTC config
|
|
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
|
|
RCC->AHB2ENR |= RCC_AHB2ENR_OTGFSEN;
|
|
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // clock source timer
|
|
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
|
|
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
|
|
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
|
|
RCC->APB2ENR |= RCC_APB2ENR_TIM9EN; // slow loop
|
|
}
|
|
|
|
void enable_interrupt_timer(void) {
|
|
register_set_bits(&(RCC->APB1ENR), RCC_APB1ENR_TIM6EN); // Enable interrupt timer peripheral
|
|
}
|