From 14ab6568e654336568c4f116526657ef8a415647 Mon Sep 17 00:00:00 2001 From: zhangbo <zhangbo@qq.com> Date: 星期一, 17 二月 2025 14:58:33 +0800 Subject: [PATCH] 对比更改通讯参数 --- keil/include/drivers/PCA9555.c | 246 +++++++++++++++++++++++++++++++++++------------- 1 files changed, 177 insertions(+), 69 deletions(-) diff --git a/keil/include/drivers/PCA9555.c b/keil/include/drivers/PCA9555.c index 5a0e901..7dd236d 100644 --- a/keil/include/drivers/PCA9555.c +++ b/keil/include/drivers/PCA9555.c @@ -1,23 +1,28 @@ #include "PCA9555.h" +#include "mk_power.h" +#include "lora_3029.h" uint8_t gps_led_output_state,tts_enbale_output_state,wake_up_output_state,air780e_enable_output_state,sos_enable_output_state,gps_backup_output_state,gps_power_output_state,main_ri_output_state;//1组output IO口从左到右1.0~1.7 uint8_t mcu_a_output_state,chg_g_output_state,lora_irq_output_state,lora_nrst_output_state,adc_minius_output_state,input_5v_output_state,pwr_on_output_state,pwr_enable_output_state;//2组output IO口从左到右0.0~0.7 uint8_t pca9555writedata_config[10];//暂存寄存器所有配置的数组 uint8_t pca9555writedata_output[10];//暂存输出高低电平配置的数组 uint8_t pca9555writedata_input[10];//暂存输入寄存器所有配置的数组 uint8_t pca9555writedata_polarity[10];//暂存输入极性反转寄存器所有配置的数组 -void IIC_gpio_pca_init(void) -{ - io_pin_mux_set(SDA_PIN, IO_FUNC0); - io_pin_mux_set(SCL_PIN, IO_FUNC0); +uint8_t pin_flag=0; +//float WAKE_UP_count; +extern float nomove_count; +//void IIC2_Init(void) +//{ +// io_pin_mux_set(SDA_PIN, IO_FUNC0); +// io_pin_mux_set(SCL_PIN, IO_FUNC0); - gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 1); - //io_open_drain_set(SDA_PIN, 1); - io_pull_set(SDA_PIN , IO_PULL_UP, IO_PULL_UP_LEVEL2);//输出高阻态 +// gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 1); +// //io_open_drain_set(SDA_PIN, 1); +// io_pull_set(SDA_PIN , IO_PULL_UP, IO_PULL_UP_LEVEL2);//输出高阻态 - gpio_pin_set_dir(SCL_PIN , GPIO_DIR_OUT, 1); - //io_open_drain_set(SCL_PIN, 1); - io_pull_set(SCL_PIN , IO_HIGH_Z, IO_PULL_UP_NONE); -} +// gpio_pin_set_dir(SCL_PIN , GPIO_DIR_OUT, 1); +// //io_open_drain_set(SCL_PIN, 1);//设置开漏输出 +// io_pull_set(SCL_PIN , IO_HIGH_Z, IO_PULL_UP_NONE); +//} void IIC2_pca_Start(void) { @@ -461,25 +466,25 @@ {PCA9555_readdata(PCA9555_DEVICE_ADDR,pca9555writedata_input);//读输入寄存器的值 uint16_t gpio_state; gpio_state=(uint16_t)pca9555writedata_input[0]<<8|pca9555writedata_input[1]; - if(INPUT_5V_POSITION&gpio_state) - return 1; - else { - return 0; - } +// if(INPUT_5V_POSITION&gpio_state) +// return 1; +// else { +// return 0; +// } } /*读取供电引脚的输入高低电平 返回值 高1 低0 电平 */ -int read_powerkey_input_pca(void) -{PCA9555_readdata(PCA9555_DEVICE_ADDR,pca9555writedata_input);//读输入寄存器的值 - uint16_t gpio_state; - gpio_state=(uint16_t)pca9555writedata_input[0]<<8|pca9555writedata_input[1]; - if(PWR_ON_POSITION&gpio_state) - return 1; - else { - return 0; - } -} +//int read_powerkey_input_pca(void) +//{PCA9555_readdata(PCA9555_DEVICE_ADDR,pca9555writedata_input);//读输入寄存器的值 +// uint16_t gpio_state; +// gpio_state=(uint16_t)pca9555writedata_input[0]<<8|pca9555writedata_input[1]; +// if(PWR_ON_POSITION&gpio_state) +// return 1; +// else { +// return 0; +// } +//} /*读取SOS引脚的输入高低电平 返回值 高1 低0 电平 */ @@ -497,47 +502,84 @@ } } -int read_userkey_input_pca_lora(uint8_t flag) +/*读取LORA_IRQ引脚的输入高低电平 + 返回值 高1 低0 电平 +*/ +int read_userkey_input_pca_lora() { PCA9555_readdata(PCA9555_DEVICE_ADDR,pca9555writedata_input);//读输入寄存器的值 uint16_t gpio_state; gpio_state=(uint16_t)pca9555writedata_input[0]<<8|pca9555writedata_input[1]; - if(SOS_ENBALE_POSITION&gpio_state) + if(LORA_IRQ_POSITION&gpio_state) { - return flag=1; + return 1; } else { - return flag=0; + return 0; } } void PCA9555_init() { -//IIC_gpio_pca_init();//配置IIC管脚 +// IIC_gpio_pca_init();//配置IIC管脚 + PCA9555_Set_One_Value_Config(LORA_LED,0); //设置LORALED为输出 + PCA9555_Set_One_Value_Config(UWB_LED,0); //设置UWBLED为输出 + PCA9555_Set_One_Value_Config(BT_LED,0); //设置BT_LED为输出 + PCA9555_Set_One_Value_Config(RED_LED,0); //设置RED_LED为输出 + PCA9555_Set_One_Value_Config(GREEN_LED,0); //设置GREEN_LED为输出 + //管脚 + PCA9555_Set_One_Value_Config(LORA_NRST,0); //设置LORA_NRST为输出 + PCA9555_Set_One_Value_Config(BT_EN,0); //设置BT_EN为输出 + PCA9555_Set_One_Value_Config(MOTO,0); //设置MOTO为输出 - //PCA9555_write_config_port_data(PCA9555_DEVICE_ADDR,PCA_OUTPUT_CONFIG_MASK,PCA_OUTPUT_CONFIG_MASK);//全配置为输出 - //PCA9555_Set_One_Value_Polarity_input(PWR_ON,0); - //PCA9555_write_config_port_data(PCA9555_DEVICE_ADDR,PCA_INPUT_CONFIG_MASK,PCA_INPUT_CONFIG_MASK);//全配置为输入 - //PCA9555_write_polarity_port_data(PCA9555_DEVICE_ADDR,0x00,0x00);//翻转 - //PCA9555_Set_One_Value_Config(WAKE_UP,1); - //PCA9555_Set_All_Output(1); - - PCA9555_Set_One_Value_Config(GPS_POWER,0);//设置GPS为输出 - PCA9555_Set_One_Value_Output(GPS_POWER,1);//拉高GPS - PCA9555_Set_One_Value_Config(ADC_MINIUS,0);//设置ADC输出 - PCA9555_Set_One_Value_Output(ADC_MINIUS,1);//默认拉高 - PCA9555_Set_One_Value_Config(MCU_A,0);//设置串口复用芯片切换 - PCA9555_Set_One_Value_Output(MCU_A,1);//输出高电平为uart通讯 - PCA9555_Set_One_Value_Config(INPUT_5V,1);//设置5V输入检测 - PCA9555_Set_One_Value_Config(GPS_LED,0);//设置LED灯输出 - PCA9555_Set_One_Value_Output(GPS_LED,1);//输出高电平开启LED通闪烁 - PCA9555_Set_One_Value_Config(PWR_ENABLE,0);//设置电池上电是否给单片机供电 - PCA9555_Set_One_Value_Output(PWR_ENABLE,1);//高电平默认导通单片机供电 - PCA9555_Set_One_Value_Config(PWR_ON,1);//设置开关机按键输入 - - PCA9555_Set_One_Value_Config(SOS_ENBALE,1);//设置SOS按钮输入 -// PCA9555_Set_One_Value_Output(PWR_ON,0);//拉低 + //PCA9555_Set_One_Value_Config(LORA_IRQ,1); //设置LORAIRQ为输入 + PCA9555_Set_One_Value_Config(BT_IRQ,1); //设置BT_IRQ为输入 + PCA9555_Set_One_Value_Config(WK_UP,1); //设置WK_UP为输入 + PCA9555_Set_One_Value_Config(SOS_ENBALE,1); //设置SOS为输入 + PCA9555_Set_One_Value_Config(IN_5V,1); //设置IN_5V为输入 + PCA9555_Set_One_Value_Config(CHGN,1); //设置CHGN为输入 //充电芯片输入芯片IIC输入脚 + +// PCA9555_Set_One_Value_Output(BT_LED,0); +// PCA9555_Set_One_Value_Output(UWB_LED,0); +// PCA9555_Set_One_Value_Config(GPS_POWER,0);//设置GPS为输出 +// PCA9555_Set_One_Value_Output(GPS_POWER,1);//拉高GPS +// PCA9555_Set_One_Value_Config(ADC_MINIUS,0);//设置ADC输出 +// PCA9555_Set_One_Value_Output(ADC_MINIUS,1);//默认拉高 +// PCA9555_Set_One_Value_Config(MCU_A,0);//设置串口复用芯片切换 +// PCA9555_Set_One_Value_Output(MCU_A,1);//输出高电平为uart通讯 +// PCA9555_Set_One_Value_Config(INPUT_5V,1);//设置5V输入检测 +// PCA9555_Set_One_Value_Config(GPS_LED,0);//设置LED灯输出 +// PCA9555_Set_One_Value_Output(GPS_LED,1);//输出高电平开启LED通闪烁 +// PCA9555_Set_One_Value_Config(PWR_ENABLE,0);//设置电池上电是否给单片机供电 +// PCA9555_Set_One_Value_Output(PWR_ENABLE,1);//高电平默认导通单片机供电 +// PCA9555_Set_One_Value_Config(PWR_ON,1);//设置开关机按键输入 +// +// PCA9555_Set_One_Value_Config(TTS_ENABLE,0); +// PCA9555_Set_One_Value_Config(WAKE_UP,0); + + +// LORA_LED_ON; +// UWB_LED_ON; +// GREEN_LED_ON; +// RED_LED_ON; +// BT_LED_ON; +//存在复位问题 + +// PCA9555_Set_One_Value_Config(SOS_ENBALE,1);//设置SOS按钮输入 + LORA_NRST_UP; + LORA_LED_OFF; + GREEN_LED_OFF; + UWB_LED_OFF; + RED_LED_OFF; + BT_LED_OFF; +// LORA_NRST_DOWN; +// delay_us(10000); + +// MOTO_OFF; + + + //PCA9555_Set_One_Value_Output(LORA_NRST,1);//拉高 //PCA9555_readdata_from_output_register(PCA9555_DEVICE_ADDR,pca9555writedata_input); //PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0); //PCA9555_Set_One_Value_Output(PWR_ON,0); @@ -547,35 +589,101 @@ //PCA9555_readdata_from_config_register(PCA9555_DEVICE_ADDR,pca9555writedata_config); // PCA9555_Set_All_Output(0);//全部拉低 - + //PCA9555_Set_One_Value_Output(TTS_ENABLE,0); + //PCA9555_Set_One_Value_Output(WAKE_UP,0); //测试 //PCA9555_Set_All_Output(1);//全部拉高 //PCA9555_Set_All_Output(0);//全部拉低 } +uint8_t LORA_IRQ_flag=0; +uint8_t Sos_state; +void SOS_irq_callback() +{ + + Sos_state=!Sos_state; + if(Sos_state) + { + + + UWB_LED_ON; + + } + else + { + + UWB_LED_OFF; + + } + + + + + + +} +//void WAKE_UP_irq_callback() +//{ +// WAKE_UP_count++; +//} +void move_handler() +{ + nomove_count=0; + Sos_state=!Sos_state; + if(Sos_state) + { + LORA_LED_ON; + } + else + { + LORA_LED_OFF; + } + +} void check_input_change(void) { uint16_t gpio_state; gpio_state=(uint16_t)pca9555writedata_input[0]<<8|pca9555writedata_input[1]; - if(LORA_IRQ_POSITION&gpio_state) - { - - } +// if(LORA_IRQ_POSITION&gpio_state) +// { + +// //Lora_irq_callback(); +// } +// else +// { +// +// } + if(BT_IRQ_POSITION&gpio_state) + { + + } + if(!(SOS_ENBALE_POSITION&gpio_state)) + { + SOS_irq_callback(); + } + if(WK_UP_POSITION&gpio_state) + { + move_handler(); + } + //uart_change_check(gpio_state); } -static void pca_handler(enum IO_PIN_T pin) + +//static void pca_input_detect_irq_handler(enum IO_PIN_T pin) +//{ +// +// +//} + + +void pca_input_detection_init(GPIO_IRQ_HANDLER_T irq_handler) { - PCA9555_readdata(PCA9555_DEVICE_ADDR,pca9555writedata_input);//读输入寄存器的值 - check_input_change(); + + gpio_pin_set_dir(PCA_INPUT_DETECT , GPIO_DIR_IN, 0); + io_pull_set(PCA_INPUT_DETECT, IO_PULL_UP, IO_PULL_UP_LEVEL2); + gpio_enable_irq(PCA_INPUT_DETECT, GPIO_IRQ_TYPE_FALLING_EDGE, irq_handler); + power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)PCA_INPUT_DETECT, POWER_WAKEUP_LEVEL_LOW); } -//void pca_input_detection_init(GPIO_IRQ_HANDLER_T irq_handler) -//{ -// pca_input_detect_irq_handler=irq_handler; -// gpio_pin_set_dir(PCA_INPUT_DETECT , GPIO_DIR_IN, 0); -// io_pull_set(PCA_INPUT_DETECT, IO_PULL_UP, IO_PULL_UP_LEVEL2); -// gpio_enable_irq(PCA_INPUT_DETECT, GPIO_IRQ_TYPE_FALLING_EDGE, pca_input_detect_irq_handler); -// power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)PCA_INPUT_DETECT, POWER_WAKEUP_LEVEL_LOW); -//} -- Gitblit v1.9.3