#include "bsp/gpio.h" #include "libs/utils.h" #ifdef GD32_FOC_DEMO #define IR2136S_Enable_pin 0 #define LED1_Enable_pin 1 #define LED2_Enable_pin 2 #define LED3_Enable_pin 3 #define KEY_Start_pin 4 #define KEY_Stop_pin 5 #define KEY_Func_pin 6 #endif /* * gpio.c * all pins used as gpio(in/out/irq) must be init&accessed here */ const static gpio_pin_config_t _pins[] = { #ifdef GD32_FOC_DEMO [IR2136S_Enable_pin] = {GPIOA, GPIO_PIN_12, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, 0}, [LED1_Enable_pin] = {GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, 0}, [LED2_Enable_pin] = {0, GPIO_PIN_9, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, 0}, [LED3_Enable_pin] = {GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, 0}, [KEY_Start_pin] = {GPIOB, GPIO_PIN_5, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, 0}, [KEY_Stop_pin] = {GPIOB, GPIO_PIN_11, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, 0}, #endif }; void gpio_pin_init(void){ rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_GPIOB); rcu_periph_clock_enable(RCU_GPIOC); rcu_periph_clock_enable(RCU_GPIOD); rcu_periph_clock_enable(RCU_GPIOF); rcu_periph_clock_enable(RCU_AF); for (int i = 0; i < ARRAY_SIZE(_pins); i++){ if (_pins[i].init_value != -1){ gpio_bit_write(_pins[i].group, _pins[i].pin, (bit_status)_pins[i].init_value); } if (_pins[i].group != 0) { gpio_init(_pins[i].group, _pins[i].mode, _pins[i].speed, _pins[i].pin); } } #ifdef CONFIG_BEEP gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2); gpio_beep(500); #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_phase_u_detect(bool enable) { if (enable) { gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_14); gpio_pin_remap_config(GPIO_SWJ_DISABLE_REMAP, ENABLE); gpio_bit_write(GPIOA, GPIO_PIN_14, SET); }else { gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_14); gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE); } } bool gpio_get_brake(void) { return 0; } void gpio_ir2136_enable(bool enable) { #ifdef GD32_FOC_DEMO gpio_bit_write(_pins[IR2136S_Enable_pin].group, _pins[IR2136S_Enable_pin].pin, (enable)?SET:RESET); #endif } void gpio_led1_enable(bool enable) { #ifdef GD32_FOC_DEMO gpio_bit_write(_pins[LED1_Enable_pin].group, _pins[LED1_Enable_pin].pin, (enable)?SET:RESET); #endif } void gpio_led2_enable(bool enable) { #ifdef GD32_FOC_DEMO //gpio_bit_write(_pins[LED2_Enable_pin].group, _pins[LED2_Enable_pin].pin, (enable)?SET:RESET); #endif } void gpio_led3_enable(bool enable) { #ifdef GD32_FOC_DEMO gpio_bit_write(_pins[LED3_Enable_pin].group, _pins[LED3_Enable_pin].pin, (enable)?SET:RESET); #endif } int gpio_startkey_value(void) { #ifdef GD32_FOC_DEMO return gpio_input_bit_get(_pins[KEY_Start_pin].group, _pins[KEY_Start_pin].pin)==SET?1:0; #else return 1; #endif } int gpio_stopkey_value(void) { #ifdef GD32_FOC_DEMO return gpio_input_bit_get(_pins[KEY_Stop_pin].group, _pins[KEY_Stop_pin].pin)==SET?1:0; #else return 1; #endif } int gpio_funckey_value(void) { return 0; }