EBO-77/Sources/DMK-BC316-77.c

347 lines
7.5 KiB
C
Raw Normal View History

2024-12-23 11:04:44 +08:00
/*
* DMK-S301-77.c
*
* Created on: Apr 21, 2017
* Author: Administrator
*/
#include "DMK-BC316-77.h"
unsigned char Ad_cal_Loop;
unsigned int Bat_power_Data;
unsigned int Bat_Values[4];
unsigned int Bat_power_Error_count;
unsigned char Bat_power_Error_Flag;
unsigned char Sig_LI0_DI_KL_58xs_run;
unsigned char InitButtonCode=0xF0;
//调光信号、15电信号、调光使能信号
unsigned char Sig_LI0_DI_KL_58xs,Sig_LI0_Klemme_15_MFL,Sig_LI0_Dimmung_01_gueltig;
//按键信号
unsigned char Sig_LI0_MFL_Toggle,Sig_LI0_MFL_ButtonRight_err=0,Sig_LI0_MFL_ButtonLeft_err=0;
unsigned char Sig_LI0_MFL_Tastencode_1,Sig_LI0_MFL_Tastencode_2;
unsigned char Sig_LI0_MFL_Eventcode_1,Sig_LI0_MFL_Eventcode_2;
extern unsigned char lin_Signal_HORN;
extern l_u8 MFS_RollingCounter;
unsigned char outputdelay1,outputdelay2;
unsigned char Toggle_start;
unsigned char Toggle_1s;
static unsigned char last1,last2,elast1,elast2;
void Apply_Task(void)
{
if(app_base_2mStick == 1)
{
app_base_2mStick = 0;
AD_Data_Deal();
}
if(app_base_5mStick == 1)
{
app_base_5mStick=0;
if(Sig_LI0_Klemme_15_MFL==1)
{
Button_Scan();
}
else
{
Sig_LI0_MFL_Tastencode_1=0;
Sig_LI0_MFL_Tastencode_2=0;
}
Eventcode_deal(Sig_LI0_MFL_Tastencode_1,Sig_LI0_MFL_Tastencode_2);
if(last1 != Sig_LI0_MFL_Tastencode_1 || last2 != Sig_LI0_MFL_Tastencode_2)
{
if(Toggle_start == 1 && Toggle_1s%20 == 0)
{
}
else
{
Toggle_1s = 0;
Sig_LI0_MFL_Toggle=!Sig_LI0_MFL_Toggle;
Toggle_start=1;
}
last1 = Sig_LI0_MFL_Tastencode_1;
last2 = Sig_LI0_MFL_Tastencode_2;
elast1 = Sig_LI0_MFL_Eventcode_1;
elast2 = Sig_LI0_MFL_Eventcode_2;
}
else if(elast1 != Sig_LI0_MFL_Eventcode_1 || elast2 != Sig_LI0_MFL_Eventcode_2)
{
if(Toggle_start == 1 && Toggle_1s%20 == 0)
{
}
else
{
Toggle_1s = 0;
Sig_LI0_MFL_Toggle=!Sig_LI0_MFL_Toggle;
Toggle_start=1;
}
elast1 = Sig_LI0_MFL_Eventcode_1;
elast2 = Sig_LI0_MFL_Eventcode_2;
last1 = Sig_LI0_MFL_Tastencode_1;
last2 = Sig_LI0_MFL_Tastencode_2;
}
if(Sig_LI0_MFL_Tastencode_1!=0 || Sig_LI0_MFL_Tastencode_2!=0)
{
}
else
{
if(Toggle_start==1)
{
Toggle_start=2;
Toggle_1s=0;
}
last1 = 0;
last2 = 0;
}
}
if(app_base_10mStick == 1)
{
app_base_10mStick=0;
Sleep_Command_Rece();
if(outputdelay1 > 0)
{
outputdelay1--;
}
if(outputdelay2 > 0)
{
outputdelay2--;
}
}
if(app_base_50mStick == 1)
{
app_base_50mStick=0;
Toggle_bit_deal(Sig_LI0_MFL_Tastencode_1,Sig_LI0_MFL_Tastencode_2);
LIN_Short_to_12v_Protect();
if((Sig_LI0_Dimmung_01_gueltig==1) && (Sig_LI0_DI_KL_58xs <= 100) && (Sig_LI0_DI_KL_58xs >= 0))
{
Sig_LI0_DI_KL_58xs_run=Sig_LI0_DI_KL_58xs;
}
//PWM1_SetRatio16(Sig_LI0_DI_KL_58xs_run*65535/100);
}
}
void AD_Data_Deal(void)
{
if(ADC_convert_over_flag == 1)//AD转换完成标志
{
ADC_convert_over_flag=0;//AD转换完成标志位清零
Bat_Values[Ad_cal_Loop]=AD1_OutV[0];
Ad_cal_Loop++;
if(Ad_cal_Loop>=4)
{
Ad_cal_Loop=0;
Bat_power_Data=AD_Average_Calculate(Bat_Values,4);
if(Bat_power_Data>657) //>16.7v
{
Bat_power_Error_count++;
if(Bat_power_Error_count>=500)//125为一秒也就是4秒
{
Bat_power_Error_Flag=1;
Bat_power_Error_count=0;
}
}
else if(Bat_power_Data>342 && Bat_power_Data<638)//>8.7v<16.2v
{
Bat_power_Error_count=0;
Bat_power_Error_Flag=0;
}
else if(Bat_power_Data<323)//<8.2v
{
Bat_power_Error_count++;
if(Bat_power_Error_count>=500)//125为一秒也就是4秒
{
Bat_power_Error_Flag=1;
Bat_power_Error_count=0;
}
}
else
{
}
}
}
}
void Lin_Task(void)
{
l_bool_wr_LI0_void(1);//1-lin_pFrameBuf[0]=0x80 0-lin_pFrameBuf[0]=0x00
l_u8_wr_LI0_MFL_Variante(4);//lin_pFrameBuf[4]=0x40
l_bool_wr_LI0_MFL_Signalhorn(lin_Signal_HORN);//1-lin_pFrameBuf[7]=0x01 0-lin_pFrameBuf[7]=0x00
l_bool_wr_LI0_MFL_Toggle(Sig_LI0_MFL_Toggle);//1-lin_pFrameBuf[0]=0x90 0-lin_pFrameBuf[0]=0x80
l_bool_wr_LI0_MFL_Taste_links_Err(Sig_LI0_MFL_ButtonLeft_err);
l_bool_wr_LI0_MFL_Taste_rechts_Err(Sig_LI0_MFL_ButtonRight_err);
if(InitButtonCode != 0)
{
l_u8_wr_LI0_MFL_Tastencode_1(InitButtonCode);
}
else
{
l_u8_wr_LI0_MFL_Tastencode_1(Sig_LI0_MFL_Tastencode_1);
}
l_u8_wr_LI0_MFL_Tastencode_2(Sig_LI0_MFL_Tastencode_2);
l_u8_wr_LI0_MFL_Eventcode_1(Sig_LI0_MFL_Eventcode_1);//Sig_LI0_MFL_Eventcode_1
l_u8_wr_LI0_MFL_Eventcode_2(Sig_LI0_MFL_Eventcode_2);//Sig_LI0_MFL_Eventcode_2
Sig_LI0_DI_KL_58xs=l_u8_rd_LI0_DI_KL_58xs();
Sig_LI0_Klemme_15_MFL=l_bool_rd_LI0_Klemme_15_MFL();
Sig_LI0_Dimmung_01_gueltig=l_bool_rd_LI0_Dimmung_01_gueltig();
l_u8_wr_LI0_MFL_Zaehler(MFS_RollingCounter);
}
void Sleep_Command_Rece(void)
{
if ((M_ASK_S_Sleep==1 || NO_DATA_Sleep==1) && (Sig_LI0_DI_KL_58xs==0X7e || Sig_LI0_DI_KL_58xs==0X7f || Sig_LI0_DI_KL_58xs==0 || Sig_LI0_DI_KL_58xs==1))
{
V_12_Ctrl=0;
FLAG_GO_TO_Sleep=1;
//关闭中断
SCI0CR2_RE=0;
SCI0CR2_TE=0;
SCI0CR2_RIE=0;
//开启中断
SCI0CR2_RE=1;
SCI0CR2_TE=1;
SCI0CR2_RIE=1;
PWM1_SetRatio16(0);
PTJ_PTJ1=0;
PTP_PTP7=0;
clrReg8Bits(PWME, 0x80U); /* Run counter */
CPU_ENTER_STOP_MODE();
}
}
void Eventcode_deal(unsigned char Sig_LI0_MFL_Tastencode_1_E,unsigned char Sig_LI0_MFL_Tastencode_2_E)
{
// 静态变量,用于记录按键时长计数
static unsigned int Event_code1_count,Event_code2_count;
if(Sig_LI0_MFL_Tastencode_1_E!=0)
{
Sig_LI0_MFL_Eventcode_1=1;
if(Event_code1_count<=600)
{
Event_code1_count++;
}
if(Event_code1_count>=160 && Event_code1_count<400)
{
Sig_LI0_MFL_Eventcode_1=4;
}
else if(Event_code1_count>=400 && Event_code1_count<600)
{
Sig_LI0_MFL_Eventcode_1=5;
}
else if(Event_code1_count>=600)
{
Sig_LI0_MFL_Eventcode_1=6;
}
}
else
{
Sig_LI0_MFL_Eventcode_1=0;
Event_code1_count=0;
}
if(Sig_LI0_MFL_Tastencode_2_E!=0)
{
Sig_LI0_MFL_Eventcode_2=1;
if(Event_code2_count<=600)
{
Event_code2_count++;
}
if(Event_code2_count>=160 && Event_code2_count<400)
{
Sig_LI0_MFL_Eventcode_2=4;
}
else if(Event_code2_count>=400 && Event_code2_count<600)
{
Sig_LI0_MFL_Eventcode_2=5;
}
else if(Event_code2_count>=600)
{
Sig_LI0_MFL_Eventcode_2=6;
}
}
else
{
Sig_LI0_MFL_Eventcode_2=0;
Event_code2_count=0;
}
}
void Toggle_bit_deal(unsigned char Sig_LI0_MFL_Tastencode_1_E,unsigned char Sig_LI0_MFL_Tastencode_2_E)
{
if(Toggle_start==1)
{
Toggle_1s++;
if(Toggle_1s%20==0)
{
Sig_LI0_MFL_Toggle=!Sig_LI0_MFL_Toggle;
if(Toggle_1s==80)
{
Toggle_1s=0;
}
}
}
if(Toggle_start==2)
{
Toggle_1s++;
if(Toggle_1s%20==0)
{
Sig_LI0_MFL_Toggle=!Sig_LI0_MFL_Toggle;
if(Toggle_1s==100)
{
Toggle_1s=0;
Toggle_start=0;
}
}
}
}
void LIN_Short_to_12v_Protect(void)
{
static unsigned char LIN_Short_count,LIN_Short_recover_count;
if(LP0IF_LPOCIF==1)
{
if(LIN_Short_count<=60)
{
LIN_Short_count++;
LP0IF_LPOCIF=1;
}
}
else
{
LIN_Short_recover_count++;
if(LIN_Short_recover_count>=20)
{
LIN_Short_recover_count=0;
LIN_Short_count=0;
}
}
}
//睡眠lin唤醒使能位
void LIN_STANDBY_Mode_wakeup_enable(void)
{
LP0CR_LPWUE=1;//在stop mode下若lin接收到数据则会在LPRXD产生一个上升沿
LP0CR_LPPUE=1;//选择上拉方式
}
//进入停止模式
void CPU_ENTER_STOP_MODE(void)
{
asm ANDCC #0x7F; //clear S bit - enable the stop mode. If the S bit is not
//cleared then STOP instruction has no effect and is
//executed as a dummy instruction NOP.
asm STOP;
}