347 lines
7.5 KiB
C
347 lines
7.5 KiB
C
|
/*
|
|||
|
* 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;
|
|||
|
}
|