2024-08-09 06:24:48 +00:00
|
|
|
|
#include "KC.h"
|
|
|
|
|
#include "de_dev.h"
|
|
|
|
|
#include "de_demo.h"
|
|
|
|
|
|
|
|
|
|
static bool KC_SetGPIO(struct KC_pdata* self);
|
|
|
|
|
static bool KC_ReSetGPIO(struct KC_pdata* self);
|
|
|
|
|
static enum KC_state KC_ReadState(struct KC_pdata* self);
|
|
|
|
|
|
|
|
|
|
void KC12_GPIO_INIT(struct driver *self);
|
|
|
|
|
void KC_GPIO_INIT(struct driver *self);
|
|
|
|
|
void KC_GPIO_INIT_High(struct driver *self);
|
|
|
|
|
void KC_UP_input(struct driver *self);
|
|
|
|
|
void KC_FLOATING_input(struct driver *self);
|
|
|
|
|
struct KC_OPS KC_type1 = {
|
|
|
|
|
.Set_GPIO = KC_SetGPIO,
|
|
|
|
|
.Reset_GPIO = KC_ReSetGPIO,
|
|
|
|
|
.Read_KC_State = KC_ReadState,
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct KC_pdata KC_array[KC_MaxNum] ={
|
|
|
|
|
|
|
|
|
|
{.GPIO_Group = GPIOB,.GPIO_NUM = GPIO_Pin_3, .KC_This_State = KC_Close},//KC1
|
|
|
|
|
{.GPIO_Group = GPIOB,.GPIO_NUM = GPIO_Pin_0, .KC_This_State = KC_Close},//KC2
|
|
|
|
|
{.GPIO_Group = GPIOB,.GPIO_NUM = GPIO_Pin_1, .KC_This_State = KC_Close},//KC3
|
|
|
|
|
{.GPIO_Group = GPIOB,.GPIO_NUM = GPIO_Pin_15, .KC_This_State = KC_Close},//KC5
|
|
|
|
|
{.GPIO_Group = GPIOA,.GPIO_NUM = GPIO_Pin_6, .KC_This_State = KC_Close},//KC8
|
|
|
|
|
{.GPIO_Group = GPIOB,.GPIO_NUM = GPIO_Pin_14, .KC_This_State = KC_Close},//KC9
|
|
|
|
|
|
|
|
|
|
{.GPIO_Group = GPIOA,.GPIO_NUM = GPIO_Pin_10, .KC_This_State = KC_Close},//5V<35><56>Դ<EFBFBD><D4B4>
|
|
|
|
|
{.GPIO_Group = GPIOA,.GPIO_NUM = GPIO_Pin_9, .KC_This_State = KC_Close},//<2F><><EFBFBD><EFBFBD>ָʾ<D6B8><CABE>
|
|
|
|
|
{.GPIO_Group = GPIOC,.GPIO_NUM = GPIO_Pin_15, .KC_This_State = Floating_input},//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|
|
|
|
{.GPIO_Group = GPIOC,.GPIO_NUM = GPIO_Pin_14, .KC_This_State = Floating_input},//ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|
|
|
|
|
|
|
|
|
{.GPIO_Group = GPIOB,.GPIO_NUM = GPIO_Pin_9, .KC_This_State = KC_Close},//<2F><><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>pwr3.3V<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{.GPIO_Group = GPIOB,.GPIO_NUM = GPIO_Pin_4, .KC_This_State = KC_Open},//CAN2 1043 STB
|
|
|
|
|
{.GPIO_Group = GPIOC,.GPIO_NUM = GPIO_Pin_8, .KC_This_State = KC_Open},//CAN2 1043 EN
|
|
|
|
|
{.GPIO_Group = GPIOC,.GPIO_NUM = GPIO_Pin_9, .KC_This_State = KC_Close},//ELS-ON
|
|
|
|
|
{.GPIO_Group = GPIOA,.GPIO_NUM = GPIO_Pin_8, .KC_This_State = KC_Close},//ELS-OFF
|
|
|
|
|
{.GPIO_Group = GPIOB,.GPIO_NUM = GPIO_Pin_5, .KC_This_State = KC_Close},//CAN_STB
|
|
|
|
|
|
|
|
|
|
{.GPIO_Group = GPIOC,.GPIO_NUM = GPIO_Pin_2, .KC_This_State = Floating_input},//<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|
|
|
|
{.GPIO_Group = GPIOC,.GPIO_NUM = GPIO_Pin_6, .KC_This_State = Floating_input},//<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|
|
|
|
{.GPIO_Group = GPIOD,.GPIO_NUM = GPIO_Pin_2, .KC_This_State = KC_Close},//CONG_RX 18
|
|
|
|
|
{.GPIO_Group = GPIOC,.GPIO_NUM = GPIO_Pin_12, .KC_This_State = KC_Close},//CONG_TX 19
|
|
|
|
|
|
|
|
|
|
{.GPIO_Group = GPIOC,.GPIO_NUM = GPIO_Pin_1, .KC_This_State = KC_Close},//KC4
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/************<2A><><EFBFBD><EFBFBD><EFBFBD>↑ʼ<EFBFAA><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>***********/
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(KC1) = {
|
|
|
|
|
.pdata = (void*)&KC_array[0],
|
|
|
|
|
.Init = KC12_GPIO_INIT,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(KC1) = {
|
|
|
|
|
.name = "KC1",
|
|
|
|
|
.driver = &GetDRIVER_Name(KC1),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(KC2) = {
|
|
|
|
|
.pdata = (void*)&KC_array[1],
|
|
|
|
|
.Init = KC_GPIO_INIT,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(KC2) = {
|
|
|
|
|
.name = "KC2",
|
|
|
|
|
.driver = &GetDRIVER_Name(KC2),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(KC3) = {
|
|
|
|
|
.pdata = (void*)&KC_array[2],
|
|
|
|
|
.Init = KC_GPIO_INIT,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(KC3) = {
|
|
|
|
|
.name = "KC3",
|
|
|
|
|
.driver = &GetDRIVER_Name(KC3),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(KC5) = {
|
|
|
|
|
.pdata = (void*)&KC_array[3],
|
|
|
|
|
.Init = KC_GPIO_INIT,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(KC5) = {
|
|
|
|
|
.name = "KC5",
|
|
|
|
|
.driver = &GetDRIVER_Name(KC5),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(KC8) = {
|
|
|
|
|
.pdata = (void*)&KC_array[4],
|
|
|
|
|
.Init = KC_GPIO_INIT,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(KC8) = {
|
|
|
|
|
.name = "KC8",
|
|
|
|
|
.driver = &GetDRIVER_Name(KC8),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(KC9) = {
|
|
|
|
|
.pdata = (void*)&KC_array[5],
|
|
|
|
|
.Init = KC_GPIO_INIT,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(KC9) = {
|
|
|
|
|
.name = "KC9",
|
|
|
|
|
.driver = &GetDRIVER_Name(KC9),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(PW5V) = {
|
|
|
|
|
.pdata = (void*)&KC_array[6],
|
|
|
|
|
.Init = KC_GPIO_INIT,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(PW5V) = {
|
|
|
|
|
.name = "PW5V",
|
|
|
|
|
.driver = &GetDRIVER_Name(PW5V),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(MCU_RUN) = {
|
|
|
|
|
.pdata = (void*)&KC_array[7],
|
|
|
|
|
.Init = KC_GPIO_INIT_High,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(MCU_RUN) = {
|
|
|
|
|
.name = "MCU_RUN",
|
|
|
|
|
.driver = &GetDRIVER_Name(MCU_RUN),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(YX1) = {
|
|
|
|
|
.pdata = (void*)&KC_array[8],
|
|
|
|
|
.Init = KC_UP_input,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(YX1) = {
|
|
|
|
|
.name = "YX1",
|
|
|
|
|
.driver = &GetDRIVER_Name(YX1),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(YX2) = {
|
|
|
|
|
.pdata = (void*)&KC_array[9],
|
|
|
|
|
.Init = KC_UP_input,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(YX2) = {
|
|
|
|
|
.name = "YX2",
|
|
|
|
|
.driver = &GetDRIVER_Name(YX2),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(PW3_3V) = {
|
|
|
|
|
.pdata = (void*)&KC_array[10],
|
|
|
|
|
.Init = KC_GPIO_INIT,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(PW3_3V) = {
|
|
|
|
|
.name = "PW3_3V",
|
|
|
|
|
.driver = &GetDRIVER_Name(PW3_3V),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(CAN2_STB) = {
|
|
|
|
|
.pdata = (void*)&KC_array[11],
|
|
|
|
|
.Init = KC_GPIO_INIT,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(CAN2_STB) = {
|
|
|
|
|
.name = "CAN2_STB",
|
|
|
|
|
.driver = &GetDRIVER_Name(CAN2_STB),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(CAN2_EN) = {
|
|
|
|
|
.pdata = (void*)&KC_array[12],
|
|
|
|
|
.Init = KC_GPIO_INIT,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(CAN2_EN) = {
|
|
|
|
|
.name = "CAN2_EN",
|
|
|
|
|
.driver = &GetDRIVER_Name(CAN2_EN),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(ELS_ON) = {
|
|
|
|
|
.pdata = (void*)&KC_array[13],
|
|
|
|
|
.Init = KC_GPIO_INIT,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(ELS_ON) = {
|
|
|
|
|
.name = "ELS_ON",
|
|
|
|
|
.driver = &GetDRIVER_Name(ELS_ON),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(ELS_OFF) = {
|
|
|
|
|
.pdata = (void*)&KC_array[14],
|
|
|
|
|
.Init = KC_GPIO_INIT,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(ELS_OFF) = {
|
|
|
|
|
.name = "ELS_OFF",
|
|
|
|
|
.driver = &GetDRIVER_Name(ELS_OFF),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(CAN_STB) = {
|
|
|
|
|
.pdata = (void*)&KC_array[15],
|
|
|
|
|
.Init = KC_GPIO_INIT,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(CAN_STB) = {
|
|
|
|
|
.name = "CAN1_STB",
|
|
|
|
|
.driver = &GetDRIVER_Name(CAN_STB),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(HV_DSG_CHECJ) = {
|
|
|
|
|
.pdata = (void*)&KC_array[16],
|
|
|
|
|
.Init = KC_FLOATING_input,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(HV_DSG_CHECJ) = {
|
|
|
|
|
.name = "HV_DSG_CHECJ",
|
|
|
|
|
.driver = &GetDRIVER_Name(HV_DSG_CHECJ),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(HV_DSG_CHECJ_2) = {
|
|
|
|
|
.pdata = (void*)&KC_array[17],
|
|
|
|
|
.Init = KC_FLOATING_input,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(HV_DSG_CHECJ_2) = {
|
|
|
|
|
.name = "HV_DSG_CHECJ_2",
|
|
|
|
|
.driver = &GetDRIVER_Name(HV_DSG_CHECJ_2),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(CONG_RX) = {
|
|
|
|
|
.pdata = (void*)&KC_array[18],
|
|
|
|
|
.Init = KC_GPIO_INIT,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(CONG_RX) = {
|
|
|
|
|
.name = "CONG_RX",
|
|
|
|
|
.driver = &GetDRIVER_Name(CONG_RX),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(CONG_TX) = {
|
|
|
|
|
.pdata = (void*)&KC_array[19],
|
|
|
|
|
.Init = KC_GPIO_INIT,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(CONG_TX) = {
|
|
|
|
|
.name = "CONG_TX",
|
|
|
|
|
.driver = &GetDRIVER_Name(CONG_TX),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
U_BOOT_DRIVER(KC4) = {
|
|
|
|
|
.pdata = (void*)&KC_array[20],
|
|
|
|
|
.Init = KC_GPIO_INIT,
|
|
|
|
|
.ops = &KC_type1
|
|
|
|
|
};
|
|
|
|
|
U_BOOT_DEVICE(KC4) = {
|
|
|
|
|
.name = "KC4",
|
|
|
|
|
.driver = &GetDRIVER_Name(KC4),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/************<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> END****************/
|
|
|
|
|
|
|
|
|
|
void KC12_GPIO_INIT(struct driver *self)
|
|
|
|
|
{
|
|
|
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE); //ʹ<><CAB9>PB,PE,PD<50>˿<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//<2F><><EFBFBD><EFBFBD>JTAGD<47><44><EFBFBD><EFBFBD>SWD<57><44>PB3,PB4,PA15<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨIO
|
|
|
|
|
|
|
|
|
|
struct KC_pdata *ops = PDATA_Name(self);
|
|
|
|
|
|
|
|
|
|
if (!ops)
|
|
|
|
|
{
|
|
|
|
|
/*<2A><>ָ<EFBFBD><D6B8>*/
|
|
|
|
|
printf("OPS is NULL\r\n");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
|
|
|
|
|
|
|
|
GPIO_InitStructure.GPIO_Pin = ops->GPIO_NUM;
|
|
|
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
|
|
|
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
|
|
|
|
|
|
|
|
|
|
GPIO_Init(ops->GPIO_Group,&GPIO_InitStructure);
|
|
|
|
|
|
|
|
|
|
if(ops->KC_This_State == KC_Open)
|
|
|
|
|
{
|
|
|
|
|
GPIO_SetBits(ops->GPIO_Group,ops->GPIO_NUM);
|
|
|
|
|
}
|
|
|
|
|
else if(ops->KC_This_State == KC_Close)
|
|
|
|
|
{
|
|
|
|
|
GPIO_ResetBits(ops->GPIO_Group,ops->GPIO_NUM);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void KC_GPIO_INIT(struct driver *self)
|
|
|
|
|
{
|
|
|
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE); //ʹ<><CAB9>PB,PE,PD<50>˿<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
|
|
|
|
struct KC_pdata *ops = PDATA_Name(self);
|
|
|
|
|
|
|
|
|
|
if (!ops)
|
|
|
|
|
{
|
|
|
|
|
/*<2A><>ָ<EFBFBD><D6B8>*/
|
|
|
|
|
printf("OPS is NULL\r\n");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
|
|
|
|
|
|
|
|
GPIO_InitStructure.GPIO_Pin = ops->GPIO_NUM;
|
|
|
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
|
|
|
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
|
|
|
|
|
|
|
|
|
|
GPIO_Init(ops->GPIO_Group,&GPIO_InitStructure);
|
|
|
|
|
|
|
|
|
|
if(ops->KC_This_State == KC_Open)
|
|
|
|
|
{
|
|
|
|
|
GPIO_SetBits(ops->GPIO_Group,ops->GPIO_NUM);
|
|
|
|
|
}
|
|
|
|
|
else if(ops->KC_This_State == KC_Close)
|
|
|
|
|
{
|
|
|
|
|
GPIO_ResetBits(ops->GPIO_Group,ops->GPIO_NUM);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void KC_GPIO_INIT_High(struct driver *self)
|
|
|
|
|
{
|
|
|
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
|
|
|
|
|
struct KC_pdata *ops = PDATA_Name(self);
|
|
|
|
|
|
|
|
|
|
if (!ops)
|
|
|
|
|
{
|
|
|
|
|
/*<2A><>ָ<EFBFBD><D6B8>*/
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
|
|
|
|
|
|
|
|
GPIO_InitStructure.GPIO_Pin = ops->GPIO_NUM;
|
|
|
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
|
|
|
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
|
|
|
|
|
|
|
|
GPIO_Init(ops->GPIO_Group,&GPIO_InitStructure);
|
|
|
|
|
|
|
|
|
|
if(ops->KC_This_State == KC_Open)
|
|
|
|
|
{
|
|
|
|
|
GPIO_SetBits(ops->GPIO_Group,ops->GPIO_NUM);
|
|
|
|
|
}
|
|
|
|
|
else if(ops->KC_This_State == KC_Close)
|
|
|
|
|
{
|
|
|
|
|
GPIO_ResetBits(ops->GPIO_Group,ops->GPIO_NUM);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void KC_UP_input(struct driver *self)
|
|
|
|
|
{
|
|
|
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
|
|
|
|
|
struct KC_pdata *ops = PDATA_Name(self);
|
|
|
|
|
|
|
|
|
|
if (!ops)
|
|
|
|
|
{
|
|
|
|
|
/*<2A><>ָ<EFBFBD><D6B8>*/
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
|
|
|
|
|
|
|
|
GPIO_InitStructure.GPIO_Pin = ops->GPIO_NUM;
|
|
|
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
|
|
|
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
|
|
|
|
|
|
|
|
GPIO_Init(ops->GPIO_Group,&GPIO_InitStructure);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void KC_FLOATING_input(struct driver *self)
|
|
|
|
|
{
|
|
|
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
|
|
|
|
|
struct KC_pdata *ops = PDATA_Name(self);
|
|
|
|
|
|
|
|
|
|
if (!ops)
|
|
|
|
|
{
|
|
|
|
|
/*<2A><>ָ<EFBFBD><D6B8>*/
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
|
|
|
|
|
|
|
|
GPIO_InitStructure.GPIO_Pin = ops->GPIO_NUM;
|
|
|
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
|
|
|
|
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
|
|
|
|
|
|
|
|
GPIO_Init(ops->GPIO_Group,&GPIO_InitStructure);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void KC_GPIO_DEVICE_INIT(struct udevice* self)
|
|
|
|
|
{
|
|
|
|
|
struct driver* Init_ops = (struct driver*)self->driver;
|
|
|
|
|
|
|
|
|
|
if(!Init_ops->Init)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
Init_ops->Init(Init_ops);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool KC_Set_GPIO(struct udevice* dev)
|
|
|
|
|
{
|
|
|
|
|
struct KC_OPS* USERops = (struct KC_OPS*)device_get_ops(dev);
|
|
|
|
|
|
|
|
|
|
if(!USERops->Set_GPIO)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
USERops->Set_GPIO((struct KC_pdata*)dev->driver->pdata);
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
bool KC_ReSet_GPIO(struct udevice* dev)
|
|
|
|
|
{
|
|
|
|
|
struct KC_OPS* USERops = (struct KC_OPS*)device_get_ops(dev);
|
|
|
|
|
if(!USERops->Reset_GPIO)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
USERops->Reset_GPIO((struct KC_pdata*)dev->driver->pdata);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
enum KC_state KC_Read_GPIO(struct udevice* dev)
|
|
|
|
|
{
|
|
|
|
|
struct KC_OPS* USERops = (struct KC_OPS*)device_get_ops(dev);
|
|
|
|
|
if(!USERops->Read_KC_State)
|
|
|
|
|
return ERR;
|
|
|
|
|
|
|
|
|
|
return USERops->Read_KC_State((struct KC_pdata*)(dev->driver->pdata));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static bool KC_SetGPIO(struct KC_pdata* self)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
GPIO_SetBits(self->GPIO_Group,self->GPIO_NUM);
|
|
|
|
|
|
|
|
|
|
self->KC_This_State = KC_Open;
|
|
|
|
|
// printf("self->KC_This_State OPEN is %d\r\n",self->KC_This_State);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static bool KC_ReSetGPIO(struct KC_pdata* self)
|
|
|
|
|
{
|
|
|
|
|
GPIO_ResetBits(self->GPIO_Group,self->GPIO_NUM);
|
|
|
|
|
|
|
|
|
|
self->KC_This_State = KC_Close;
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static enum KC_state KC_ReadState(struct KC_pdata* self)
|
|
|
|
|
{
|
|
|
|
|
// printf("self->KC_This_State is %d\r\n",self->KC_This_State);
|
|
|
|
|
return GPIO_ReadInputDataBit(self->GPIO_Group,self->GPIO_NUM);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Init_KC_GPIO(void)
|
|
|
|
|
{
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(KC1));
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(KC2));
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(KC3));
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(KC4));
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(KC5));
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(KC8));
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(KC9));
|
|
|
|
|
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(PW5V));
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(MCU_RUN));
|
|
|
|
|
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(YX1));
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(YX2));
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(PW3_3V));
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(CAN2_STB));
|
|
|
|
|
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(CAN2_EN));
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(ELS_ON));
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(ELS_OFF));
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(CAN_STB));
|
|
|
|
|
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(HV_DSG_CHECJ));
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(HV_DSG_CHECJ_2));
|
|
|
|
|
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(CONG_RX));
|
|
|
|
|
KC_GPIO_DEVICE_INIT(&GetDEVICE_Name(CONG_TX));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|