EBO-77/Sources/DMK-BC316-77.c
2024-12-23 11:04:44 +08:00

347 lines
7.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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;
}