| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- #include "bsp/bsp_driver.h"
- #include "libs/utils.h"
- /*
- * gpio.c
- * all pins used as gpio(in/out/irq) must be init&accessed here
- */
- void gpio_pin_init(void){
- rcu_apb2_periph_clock_enable(RCU_GPIOA);
- rcu_apb2_periph_clock_enable(RCU_GPIOB);
- rcu_apb2_periph_clock_enable(RCU_GPIOC);
- rcu_apb2_periph_clock_enable(RCU_GPIOD);
- rcu_apb2_periph_clock_enable(RCU_AF);
- #ifdef CONFIG_BEEP
- gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
- gpio_beep(50);
- #endif
- }
- void gpio_beep(u32 ms) {
- #ifdef CONFIG_BEEP
- gpio_bit_write(GPIOB, GPIO_PIN_2, SET);
- delay_ms(ms);
- gpio_bit_write(GPIOB, GPIO_PIN_2, RESET);
- #endif
- }
- void gpio_mc_brk_init(void) {
- #ifdef GPIO_BRAKE_IN_GROUP
- rcu_apb2_periph_clock_enable(GPIO_BRAKE_IN_RCU);
- #ifdef GPIO_BRAKE_PIN_REMAP
- gpio_pin_remap_config(GPIO_BRAKE_PIN_REMAP, ENABLE);
- #endif
- gpio_init(GPIO_BRAKE_IN_GROUP, GPIO_BRAKE_IN_MODE, GPIO_OSPEED_50MHZ, GPIO_BRAKE_IN_PIN);
-
- gpio_exti_source_select(GPIO_BRAKE_EXIT_SRC_GROUP, GPIO_BRAKE_EXIT_SRC_PIN);
- exti_init(GPIO_BRAKE_EXTI, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
- nvic_irq_enable(GPIO_BRAKE_IRQ, EBREAK_IRQ_PRIORITY, 0U);
- exti_interrupt_flag_clear(GPIO_BRAKE_EXTI);
- exti_interrupt_enable(GPIO_BRAKE_EXTI);
- #endif
- #ifdef GPIO_BRAKE1_IN_GROUP
- rcu_periph_clock_enable(GPIO_BRAKE1_IN_RCU);
- gpio_init(GPIO_BRAKE1_IN_GROUP, GPIO_BRAKE1_IN_MODE, GPIO_OSPEED_50MHZ, GPIO_BRAKE1_IN_PIN);
- gpio_exti_source_select(GPIO_BRAKE1_EXIT_SRC_GROUP, GPIO_BRAKE1_EXIT_SRC_PIN);
- exti_init(GPIO_BRAKE1_EXTI, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
- nvic_irq_enable(GPIO_BRAKE1_IRQ, EBREAK_IRQ_PRIORITY, 0U);
- exti_interrupt_flag_clear(GPIO_BRAKE1_EXTI);
- exti_interrupt_enable(GPIO_BRAKE1_EXTI);
- #endif
- }
- void gpio_mlock_init(void) {
- #ifdef GPIO_MLOCK_IN_GROUP
- rcu_apb2_periph_clock_enable(GPIO_MLOCK_IN_RCU);
- gpio_init(GPIO_MLOCK_IN_GROUP, GPIO_MLOCK_IN_MODE, GPIO_OSPEED_50MHZ, GPIO_MLOCK_IN_PIN);
- #endif
- }
- void gpio_fan_det_init(void) {
- #ifdef GPIO_FAN1_IN_GROUP
- rcu_apb2_periph_clock_enable(GPIO_FAN1_IN_RCU);
- gpio_init(GPIO_FAN1_IN_GROUP, GPIO_FAN1_IN_MODE, GPIO_OSPEED_50MHZ, GPIO_FAN1_IN_PIN);
- gpio_exti_source_select(GPIO_FAN1_EXIT_SRC_GROUP, GPIO_FAN1_EXIT_SRC_PIN);
- exti_init(GPIO_FAN1_EXTI, EXTI_INTERRUPT, EXTI_TRIG_RISING);
- nvic_irq_enable(GPIO_FAN1_IRQ, ENC_OTHER_IRQ_PRIORITY, 0U);
- exti_interrupt_flag_clear(GPIO_FAN1_EXTI);
- exti_interrupt_enable(GPIO_FAN1_EXTI);
- #endif
- #ifdef GPIO_FAN2_IN_GROUP
- rcu_periph_clock_enable(GPIO_FAN2_IN_RCU);
- gpio_init(GPIO_FAN2_IN_GROUP, GPIO_FAN2_IN_MODE, GPIO_OSPEED_50MHZ, GPIO_FAN2_IN_PIN);
- gpio_exti_source_select(GPIO_FAN2_EXIT_SRC_GROUP, GPIO_FAN2_EXIT_SRC_PIN);
- exti_init(GPIO_FAN2_EXTI, EXTI_INTERRUPT, EXTI_TRIG_RISING);
- nvic_irq_enable(GPIO_FAN2_IRQ, ENC_OTHER_IRQ_PRIORITY, 0U);
- exti_interrupt_flag_clear(GPIO_FAN2_EXTI);
- exti_interrupt_enable(GPIO_FAN2_EXTI);
- #endif
- }
- void gpio_phase_u_detect(bool enable) {
- #ifdef GPIO_UDEC_OUT_GROUP
- if (enable) {
- gpio_init(GPIO_UDEC_OUT_GROUP, GPIO_UDEC_OUT_MODE, GPIO_OSPEED_50MHZ, GPIO_UDEC_OUT_PIN);
- #ifdef GPIO_UDEC_OUT_REMAP_DISABLE
- gpio_pin_remap_config(GPIO_UDEC_OUT_REMAP_DISABLE, ENABLE);
- #endif
- gpio_bit_write(GPIO_UDEC_OUT_GROUP, GPIO_UDEC_OUT_PIN, SET);
- }else {
- gpio_init(GPIO_UDEC_OUT_GROUP, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_UDEC_OUT_PIN);
- #ifdef GPIO_UDEC_OUT_REMAP_ENABLE
- gpio_pin_remap_config(GPIO_UDEC_OUT_REMAP_ENABLE, ENABLE);
- #endif
- }
- #endif
- }
- void gpio_led_init(void) {
- #ifdef GPIO_LED_OUT_GROUP
- rcu_apb2_periph_clock_enable(GPIO_LED_OUT_RCU);
- gpio_init(GPIO_LED_OUT_GROUP, GPIO_LED_OUT_MODE, GPIO_OSPEED_50MHZ, GPIO_LED_OUT_PIN);
- gpio_bit_reset(GPIO_LED_OUT_GROUP, GPIO_LED_OUT_PIN);
- #endif
- }
- void gpio_brk_light_init(void) {
- #ifdef GPIO_BRAKE_LIGHT_OUT_GROUP
- rcu_apb2_periph_clock_enable(GPIO_BRAKE_LIGHT_OUT_RCU);
- gpio_init(GPIO_BRAKE_LIGHT_OUT_GROUP, GPIO_BRAKE_LIGHT_OUT_MODE, GPIO_OSPEED_50MHZ, GPIO_BRAKE_LIGHT_OUT_PIN);
- gpio_bit_reset(GPIO_BRAKE_LIGHT_OUT_GROUP, GPIO_BRAKE_LIGHT_OUT_PIN);
- #endif
- }
- void mc_gpio_init(void) {
- gpio_mlock_init();
- gpio_mc_brk_init();
- gpio_fan_det_init();
- gpio_led_init();
- gpio_brk_light_init();
- }
- void gpio_led_enable(bool enable) {
- #ifdef GPIO_LED_OUT_GROUP
- gpio_bit_write(GPIO_BRAKE_LIGHT_OUT_GROUP, GPIO_BRAKE_LIGHT_OUT_PIN, enable?SET:RESET);
- #endif
- }
- void gpio_brk_light_enable(bool enable) {
- #ifdef GPIO_BRAKE_LIGHT_OUT_GROUP
- gpio_bit_write(GPIO_BRAKE_LIGHT_OUT_GROUP, GPIO_BRAKE_LIGHT_OUT_PIN, enable?SET:RESET);
- #endif
- }
- bool mc_get_gpio_brake(void) {
- return gpio_input_bit_get(GPIO_BRAKE_IN_GROUP, GPIO_BRAKE_IN_PIN) == SET;
- }
- bool mc_get_gpio_brake1(void) {
- #ifdef GPIO_BRAKE1_IN_GROUP
- return gpio_input_bit_get(GPIO_BRAKE1_IN_GROUP, GPIO_BRAKE1_IN_PIN) == SET;
- #else
- return mc_get_gpio_brake();
- #endif
- }
- bool gpio_motor_locked(void) {
- #ifdef GPIO_MLOCK_IN_GROUP
- return gpio_input_bit_get(GPIO_MLOCK_IN_GROUP, GPIO_MLOCK_IN_PIN) == RESET;
- #else
- return false;
- #endif
- }
|