#include "b6x.h" #include "drvs.h" #include "dbg.h" #include "sftmr.h" #include "app_uart.h" #include "app_speed_governor.h" #include "app_control_out.h" // 使能电平 bool app_control_en[PA_MAX]={ [IN_GPS] =OE_LOW, // GPS超距 /L:超出活动区域(同) [IN_EXTI0_Custom0] =OE_LOW, // 管理员模式 [OUT_Door_lock] =OE_HIGH, // 开锁 /H:开锁(同) [OUT_Push_key] =OE_HIGH, // 开启推车 /L:开启推车(反) [OUT_Switch_gear] =OE_LOW, // 限速/H:限速(反) [OUT_High_speed] =OE_LOW, // 使能高速档位 /H:高使能(反) [OUT_Low_speed] =OE_HIGH, // 使能低速档位 /L:低使能(反) [OUT_Back_car] =OE_HIGH, // 使能倒车 /L:低使能倒车(反) [OUT_Low_brake] =OE_HIGH, // 使能低制动 /L:低使能(反) [OUT_High_brake] =OE_LOW // 使能高制动 /H:高使能(反) }; //中控控制IO初始化 void app_control_init(void){ // out gpio_dir_output(OUT_Door_lock,OE_LOW);// 默认锁车 gpio_dir_output(OUT_Push_key,OE_LOW);// 默认关闭推车模式 gpio_dir_output(OUT_Switch_gear,OE_LOW);// 默认转把调速模式 gpio_dir_output(OUT_High_speed,OE_LOW);// 高速档位,默认失能 gpio_dir_output(OUT_Low_speed,OE_LOW);// 低速档位,默认失能 gpio_dir_output(OUT_Back_car,OE_LOW);// 默认前进模式 gpio_dir_output(OUT_Low_brake,OE_LOW);// 默认关低制动 gpio_dir_output(OUT_High_brake,OE_HIGH);// 默认关高制动 //in gpio_dir_input(OUT_Door_lock,IE_DOWN);// 默认锁车 gpio_dir_input(OUT_Push_key,IE_DOWN);// 默认关闭推车模式 gpio_dir_input(OUT_Switch_gear,IE_DOWN);// 默认转把调速模式 gpio_dir_input(OUT_High_speed,IE_DOWN);// 高速档位,默认失能 gpio_dir_input(OUT_Low_speed,IE_DOWN);// 低速档位,默认失能 gpio_dir_input(OUT_Back_car,IE_DOWN);// 默认前进模式 gpio_dir_input(OUT_Low_brake,IE_DOWN);// 默认关低制动 gpio_dir_input(OUT_High_brake,IE_UP);// 默认关高制动 //默认都失能 Set_Status(OUT_Door_lock,0); Set_Status(OUT_Push_key,0); Set_Status(OUT_Switch_gear,0); Set_Status(OUT_High_speed,0); Set_Status(OUT_Low_speed,0); Set_Status(OUT_Back_car,0); //失能倒车 Set_Status(OUT_Low_brake,0); Set_Status(OUT_High_brake,0); // app_set_Door_lock_status(0);// 默认锁车 // app_set_Push_status(0);// 默认关闭推车模式 // app_set_gears_status(0);// 默认转把调速模式 // app_set_brake_status(0);// 默认关制动 // app_set_Back_car_status(0);// 默认前进模式 // in gpio_dir_input(IN_EXTI0_Custom0, IE_UP); // Input enable, pull-up // gpio_dir_input(IN_EXTI1_Custom1, IE_UP); gpio_dir_input(IN_GPS, IE_UP); // EXTI config exti_init(EXTI_DBC(15, 4)); exti_set(EXTI_FTS, EXTI_SRC(IN_EXTI0_Custom0) | EXTI_SRC(IN_GPS)); // falling exti_set(EXTI_DBE, EXTI_SRC(IN_EXTI0_Custom0) | EXTI_SRC(IN_GPS)); exti_set(EXTI_IER, EXTI_SRC(IN_EXTI0_Custom0) | EXTI_SRC(IN_GPS)); // IRQ enable NVIC_EnableIRQ(EXTI_IRQn); __enable_irq(); } //获取档位状态/0:管理员模式速度无限制/1:游客模式油门限速/2:低速档/3:高速档 uint8_t app_get_gears_status(void){ uint8_t ret=0; if(0 ==Get_Status(OUT_Switch_gear) && 1 ==Get_Status(OUT_High_speed) && 0 ==Get_Status(OUT_Low_speed)){ ret =0; }else if(0 ==Get_Status(OUT_Switch_gear) && 0 ==Get_Status(OUT_High_speed) && 1 ==Get_Status(OUT_Low_speed)){ ret =1; }else if(1 ==Get_Status(OUT_Switch_gear) && 0 ==Get_Status(OUT_High_speed) && 0 ==Get_Status(OUT_Low_speed)){ ret =2; }else if(0 ==Get_Status(OUT_Switch_gear) && 0 ==Get_Status(OUT_High_speed) && 0 ==Get_Status(OUT_Low_speed)){ ret =3; } return ret; } //设置档位状态/0:管理员模式速度无限制/1:游客模式油门限速/2:低速档/3:高速档 uint8_t app_set_gears_status(uint8_t val){ if(0 ==val){ //管理员模式速度无限制 Set_Status(OUT_Switch_gear,0); Set_Status(OUT_High_speed,1); Set_Status(OUT_Low_speed,0); }else if(1 ==val){//游客模式油门限速 Set_Status(OUT_Switch_gear,0); Set_Status(OUT_High_speed,0); Set_Status(OUT_Low_speed,1); }else if(2 ==val){//低速模式 Set_Status(OUT_Switch_gear,1); Set_Status(OUT_High_speed,0); Set_Status(OUT_Low_speed,0); }else if(3 ==val){//高速模式 Set_Status(OUT_Switch_gear,0); Set_Status(OUT_High_speed,0); Set_Status(OUT_Low_speed,0); } return app_get_gears_status(); } //获取刹车状态/0:取消刹车/1:低刹/2:高刹 uint8_t app_get_brake_status(void){ uint8_t ret=0; if(0 ==Get_Status(OUT_Low_brake) && 0 ==Get_Status(OUT_High_brake)){ ret =0; }else if(1 ==Get_Status(OUT_Low_brake) && 0 ==Get_Status(OUT_High_brake)){ ret =1; }else if(0 ==Get_Status(OUT_Low_brake) && 1 ==Get_Status(OUT_High_brake)){ ret =2; } return ret; } //设置刹车状态/0:取消刹车/1:低刹/2:高刹 uint8_t app_set_brake_status(uint8_t val){ if(1 ==val){//低刹 Set_Status(OUT_Low_brake,1); Set_Status(OUT_High_brake,0); }else if(2 ==val){//高刹 Set_Status(OUT_Low_brake,0); Set_Status(OUT_High_brake,1); }else{ //无刹 Set_Status(OUT_Low_brake,0); Set_Status(OUT_High_brake,0); } return app_get_brake_status(); } //获取电门锁状态设置/0:锁车状态/1:开锁状态 uint8_t app_get_Door_lock_status(void){ return Get_Status(OUT_Door_lock); } //电门锁状态设置/0:锁车/1:开锁 uint8_t app_set_Door_lock_status(bool val){ Set_Status(OUT_Door_lock,val); return Get_Status(OUT_Door_lock); } //推车模式设置/0:退出推车状态/1:推车状态 uint8_t app_set_Push_status(bool val){ Set_Status(OUT_Push_key,val); return Get_Status(OUT_Push_key); } //设置行驶方向/0:前进;1:倒车 uint8_t app_set_Back_car_status(bool val){ Set_Status(OUT_Back_car,val); return Get_Status(OUT_Back_car); } // GPIO外部中端处理 void EXTI_IRQHandler(void) { uint32_t irq_sta = EXTI->RIF.Word; if (irq_sta & EXTI_SRC(IN_GPS))// { EXTI->ICR.Word = EXTI_SRC(IN_GPS); if(1==Get_Status(IN_GPS)){ Set_Status(OUT_Door_lock,0);//GPS超出范围,直接锁车 } } if (irq_sta & EXTI_SRC(IN_EXTI0_Custom0)) { EXTI->ICR.Word = EXTI_SRC(IN_EXTI0_Custom0); if(1==Get_Status(IN_EXTI0_Custom0)){ //进入管理员模式 Set_Status(OUT_High_speed,1);//开启高速模式 } } if (irq_sta & EXTI_SRC(IN_EXTI1_Custom1)) { EXTI->ICR.Word = EXTI_SRC(IN_EXTI1_Custom1); } }