| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- #include "gpio.h"
- /* all pins used as gpio(input/output/irq) must be defined here */
- void gpio_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);
- //GPIO_CTL(GPIOA) = 0xFFFFFFFF;
- GPIO_CTL(GPIOB) = 0xFFFFFFFF;
- GPIO_CTL(GPIOC) = 0xFFFFFFFF;
- GPIO_CTL(GPIOD) = 0xFFFFFFFF;
- GPIO_CTL(GPIOF) = 0xFFFFFFFF;
- #if (CONFIG_BOARD_TYPE==SHARK_BOARD_SP700)
- //hall 2 detect
- gpio_mode_input(GPIOC, GPIO_PUPD_PULLUP, GPIO_PIN_13);
- //hall 1 detect
- gpio_mode_input(GPIOC, GPIO_PUPD_PULLUP, GPIO_PIN_15);
-
- //IR uart0 enable
- gpio_mode_output(GPIOC, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_14);
- //IR uart2 enable
- gpio_mode_output(GPIOF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_0);
- //cs1180 power enable
- gpio_mode_output(GPIOB, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_12);
- //detect cs1180 ready
- gpio_mode_input(GPIOA, GPIO_PUPD_NONE, GPIO_PIN_0);
- //CS1180 cs
- gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
- cs1180_cs(1);
- #ifdef SHARK_BOARD_SP700_OLD_CS1180
- //老的sp700+cs1180上,GPIOA8和GPIOB15连在一起,为了不影响B15 pin的spi 功能,A8pin需要设置为输入
- gpio_mode_analog_input(GPIOA, GPIO_PIN_8);
- #endif
- //disnoctic led
- gpio_mode_output(GPIOF, GPIO_PUPD_PULLUP, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_6);
- #elif (CONFIG_BOARD_TYPE==SHARK_BOARD_SP600)
- //key
- gpio_mode_input(GPIOA, GPIO_PUPD_NONE, GPIO_PIN_0);
- //rs485 INT ,this can be used detect rs485 in/out, then open rs485 power, and then detect GPIOF0
- gpio_mode_input(GPIOC, GPIO_PUPD_NONE, GPIO_PIN_13);
- //rs485 pwr enable
- gpio_mode_output(GPIOC, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_14);
- //rs485 in/out detect, only works when rs485 pwr on
- gpio_mode_input(GPIOF, GPIO_PUPD_NONE, GPIO_PIN_0);
- //cs1180 pwr enable
- gpio_mode_output(GPIOC, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_15);
- //detect cs1180 ready
- gpio_mode_input(GPIOB, GPIO_PUPD_NONE, GPIO_PIN_12);
- //CS1180 cs
- gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8);
- cs1180_cs(1);
- //LED 0,1,2
- gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_2|GPIO_PIN_3);
- gpio_mode_output(GPIOF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_6);
- //LED3,4
- gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_10|GPIO_PIN_9);
- #endif
- //temp senser enable
- gpio_mode_output(GPIOF, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_1);
- //charger detect
- gpio_mode_input(GPIOB, GPIO_PUPD_NONE, GPIO_PIN_10);
- //aux power enable
- gpio_mode_output(GPIOB, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_2);
- //aux power lock detect
- gpio_mode_input(GPIOB, GPIO_PUPD_NONE, GPIO_PIN_11);
- //DC-DC power good indicat
- gpio_mode_input(GPIOF, GPIO_PUPD_NONE, GPIO_PIN_7);
- //ms5238 irq, This pin is a NMOS open drain output pin and output is “L” level if interrupted
- gpio_mode_input(GPIOA, GPIO_PUPD_NONE, GPIO_PIN_12);
- //ML5238 cs
- gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
- }
- void enable_mcu_power(void){
- //DC-DC enable
- rcu_periph_clock_enable(RCU_GPIOA);
- gpio_mode_output(GPIOA, GPIO_PUPD_NONE, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_11);
- gpio_bit_write(GPIOA,GPIO_PIN_11,SET);
- //DC-DC power good indicat
- rcu_periph_clock_enable(RCU_GPIOF);
- gpio_mode_input(GPIOF, GPIO_PUPD_NONE, GPIO_PIN_7);
- while(!IS_DCDC_POWER_GOOD());
- }
- void enable_gpio_key_irq(int enable){
- #if (CONFIG_BOARD_TYPE==SHARK_BOARD_SP600)
- if (enable){
- nvic_irq_enable(EXTI0_1_IRQn, 4U, 0U);
- syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN0);
- exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
- exti_flag_clear(EXTI_0);
- }else {
- exti_interrupt_disable(EXTI_0);
- exti_flag_clear(EXTI_0);
- }
- #endif
- }
- static void enable_exti4_15_irq(int enable){
- if (enable){
- nvic_irq_enable(EXTI4_15_IRQn, 4U, 0U);
- }else { //many pins share the EXTI4_15_IRQn, do'nt stop it really
- //nvic_irq_disable(EXTI4_15_IRQn);
- }
- }
- void charger_detect_irq_enable(int enable){
- if (enable){
- syscfg_exti_line_config(EXTI_SOURCE_GPIOB, EXTI_SOURCE_PIN10);
- exti_init(EXTI_10, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
- exti_flag_clear(EXTI_10);
- enable_exti4_15_irq(1);
- }else {
- enable_exti4_15_irq(0);
- exti_interrupt_disable(EXTI_10);
- exti_flag_clear(EXTI_10);
- }
- }
- void ml5238_irq_enable(int enable){
- if (enable){
- syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN12);
- exti_init(EXTI_12, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
- exti_flag_clear(EXTI_12);
- enable_exti4_15_irq(1);
- }else {
- enable_exti4_15_irq(0);
- exti_interrupt_disable(EXTI_12);
- exti_flag_clear(EXTI_12);
- }
- }
- #if (CONFIG_BOARD_TYPE==SHARK_BOARD_SP700)
- void hall_1_detect_irq_enable(int enable){
- if (enable){
- syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN15);
- exti_flag_clear(EXTI_15);
- exti_init(EXTI_15, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
- enable_exti4_15_irq(1);
- }else {
- enable_exti4_15_irq(0);
- exti_interrupt_disable(EXTI_15);
- exti_flag_clear(EXTI_15);
- }
- }
- #else
- void hall_1_detect_irq_enable(int enable){
- }
- #endif
- void hall_2_detect_irq_enable(int enable){
- if (enable){
- syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN13);
- exti_flag_clear(EXTI_13);
- exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
- enable_exti4_15_irq(1);
- }else {
- enable_exti4_15_irq(0);
- exti_interrupt_disable(EXTI_13);
- exti_flag_clear(EXTI_13);
- }
- }
- void small_current_short_irq_enable(int enable){
- if (enable){
- syscfg_exti_line_config(EXTI_SOURCE_GPIOB, EXTI_SOURCE_PIN11);
- exti_flag_clear(EXTI_11);
- exti_init(EXTI_11, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
- enable_exti4_15_irq(1);
- }else {
- enable_exti4_15_irq(0);
- exti_interrupt_disable(EXTI_11);
- exti_flag_clear(EXTI_11);
- }
- }
- void dcdc_pwr_detect_irq_enable(int enable){
- if (enable){
- syscfg_exti_line_config(EXTI_SOURCE_GPIOF, EXTI_SOURCE_PIN7);
- exti_init(EXTI_7, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
- exti_flag_clear(EXTI_7);
- enable_exti4_15_irq(1);
- }else {
- enable_exti4_15_irq(0);
- exti_interrupt_disable(EXTI_7);
- exti_flag_clear(EXTI_7);
- }
- }
|