CELIS/HARDWARE/DEV_HAL/KC.c

512 lines
12 KiB
C
Raw Permalink Normal View History

#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
};
/************<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),
};
/************<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(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));
}