Commit af874ddf authored by 高士达's avatar 高士达

Merge branch 'lgh_from_dev' into 'dev'

Lgh from dev

See merge request !21
parents e5472f5d 1083e73f
...@@ -275,7 +275,7 @@ ...@@ -275,7 +275,7 @@
</OCR_RVCT3> </OCR_RVCT3>
<OCR_RVCT4> <OCR_RVCT4>
<Type>1</Type> <Type>1</Type>
<StartAddress>0x8000</StartAddress> <StartAddress>0x0</StartAddress>
<Size>0x40000</Size> <Size>0x40000</Size>
</OCR_RVCT4> </OCR_RVCT4>
<OCR_RVCT5> <OCR_RVCT5>
...@@ -361,7 +361,7 @@ ...@@ -361,7 +361,7 @@
</VariousControls> </VariousControls>
</Aads> </Aads>
<LDads> <LDads>
<umfTarg>1</umfTarg> <umfTarg>0</umfTarg>
<Ropi>0</Ropi> <Ropi>0</Ropi>
<Rwpi>0</Rwpi> <Rwpi>0</Rwpi>
<noStLib>0</noStLib> <noStLib>0</noStLib>
...@@ -370,7 +370,7 @@ ...@@ -370,7 +370,7 @@
<TextAddressRange>0x00000000</TextAddressRange> <TextAddressRange>0x00000000</TextAddressRange>
<DataAddressRange>0x20000000</DataAddressRange> <DataAddressRange>0x20000000</DataAddressRange>
<pXoBase></pXoBase> <pXoBase></pXoBase>
<ScatterFile></ScatterFile> <ScatterFile>.\Objects\RMR42E.sct</ScatterFile>
<IncludeLibs></IncludeLibs> <IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath> <IncludeLibsPath></IncludeLibsPath>
<Misc></Misc> <Misc></Misc>
...@@ -478,6 +478,86 @@ ...@@ -478,6 +478,86 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\..\..\..\Source\Application\CAN_User\Can_RX_User.c</FilePath> <FilePath>..\..\..\..\Source\Application\CAN_User\Can_RX_User.c</FilePath>
</File> </File>
<File>
<FileName>Data_Soc.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\Source\Application\Data_Soc\Data_Soc.c</FilePath>
</File>
<File>
<FileName>Data_Soc.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Application\Data_Soc\Data_Soc.h</FilePath>
</File>
<File>
<FileName>Data_Fuel.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\Source\Application\Data_Fuel\Data_Fuel.c</FilePath>
</File>
<File>
<FileName>Data_Fuel.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Application\Data_Fuel\Data_Fuel.h</FilePath>
</File>
<File>
<FileName>Data_Time.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\Source\Application\Driving_Information\Data_Time.c</FilePath>
</File>
<File>
<FileName>Data_Time.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Application\Driving_Information\Data_Time.h</FilePath>
</File>
<File>
<FileName>Data_Gear.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\Source\Application\Driving_Information\Data_Gear.c</FilePath>
</File>
<File>
<FileName>Data_Gear.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Application\Driving_Information\Data_Gear.h</FilePath>
</File>
<File>
<FileName>BackLight_User.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\Source\Application\BackLight\BackLight_User.c</FilePath>
</File>
<File>
<FileName>BackLight_User.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Application\BackLight\BackLight_User.h</FilePath>
</File>
<File>
<FileName>Fault_Code.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\Source\Application\Driving_Information\Fault_Code.c</FilePath>
</File>
<File>
<FileName>Fault_Code.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Application\Driving_Information\Fault_Code.h</FilePath>
</File>
<File>
<FileName>Buzzer.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\Source\Application\Buzzer\Buzzer.c</FilePath>
</File>
<File>
<FileName>Buzzer.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Application\Buzzer\Buzzer.h</FilePath>
</File>
<File>
<FileName>BU98B10_User.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\Source\Application\BU98B10_User\BU98B10_User.c</FilePath>
</File>
<File>
<FileName>BU98B10_User.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Application\BU98B10_User\BU98B10_User.h</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
...@@ -608,11 +688,6 @@ ...@@ -608,11 +688,6 @@
<FileType>5</FileType> <FileType>5</FileType>
<FilePath>..\..\..\..\Source\Component\Telltales\Telltales_Lib.h</FilePath> <FilePath>..\..\..\..\Source\Component\Telltales\Telltales_Lib.h</FilePath>
</File> </File>
<File>
<FileName>Telltales_Lib.lib</FileName>
<FileType>4</FileType>
<FilePath>..\..\..\..\Source\Component\Telltales\Telltales_Lib.lib</FilePath>
</File>
<File> <File>
<FileName>Telltales_user.h</FileName> <FileName>Telltales_user.h</FileName>
<FileType>5</FileType> <FileType>5</FileType>
...@@ -673,6 +748,11 @@ ...@@ -673,6 +748,11 @@
<FileType>4</FileType> <FileType>4</FileType>
<FilePath>..\..\..\..\Source\Component\Eeprom\eepromManage_20240305.lib</FilePath> <FilePath>..\..\..\..\Source\Component\Eeprom\eepromManage_20240305.lib</FilePath>
</File> </File>
<File>
<FileName>Telltales_Lib.lib</FileName>
<FileType>4</FileType>
<FilePath>..\..\..\..\Source\Component\Telltales\Telltales_Lib.lib</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
...@@ -718,16 +798,6 @@ ...@@ -718,16 +798,6 @@
<FileType>5</FileType> <FileType>5</FileType>
<FilePath>..\..\..\..\Source\Device\Cmsemicon\BAT32A239\RTE\GPIO\RTE_GPIO_BAT32A239.h</FilePath> <FilePath>..\..\..\..\Source\Device\Cmsemicon\BAT32A239\RTE\GPIO\RTE_GPIO_BAT32A239.h</FilePath>
</File> </File>
<File>
<FileName>UART.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\Source\Device\Cmsemicon\BAT32A239\RTE\UART\UART.c</FilePath>
</File>
<File>
<FileName>UART.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Device\Cmsemicon\BAT32A239\RTE\UART\UART.h</FilePath>
</File>
<File> <File>
<FileName>DeepSleep.c</FileName> <FileName>DeepSleep.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
...@@ -788,6 +858,16 @@ ...@@ -788,6 +858,16 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\..\..\..\Source\Device\Cmsemicon\BAT32A239\RTE\CLOCK_Select\RTE_CLOCK_Select_BAT32A239.c</FilePath> <FilePath>..\..\..\..\Source\Device\Cmsemicon\BAT32A239\RTE\CLOCK_Select\RTE_CLOCK_Select_BAT32A239.c</FilePath>
</File> </File>
<File>
<FileName>UART_DEMO.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\Source\Device\Cmsemicon\BAT32A239\RTE\UART\UART_DEMO.c</FilePath>
</File>
<File>
<FileName>UART_DEMO.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Device\Cmsemicon\BAT32A239\RTE\UART\UART_DEMO.h</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
......
...@@ -11,9 +11,13 @@ ...@@ -11,9 +11,13 @@
#include "Can_User/Can_User.h" #include "Can_User/Can_User.h"
#include "Can_User/Can_App.h" #include "Can_User/Can_App.h"
#include "Can_User/Can_RX_User.h" #include "Can_User/Can_RX_User.h"
#include "Data_Soc\Data_Soc.h"
#include "Data_Fuel\Data_Fuel.h"
#include "Driving_Information\Data_Time.h"
#include "Driving_Information\Data_Gear.h"
#include "BackLight\BackLight_User.h"
#include "Driving_Information\Fault_Code.h"
#include "Buzzer\Buzzer.h"
#include "BU98B10_User\BU98B10_User.h"
#endif #endif
This diff is collapsed.
#ifndef _BU98B10_USER_H_
#define _BU98B10_USER_H_
#include "Components.h"
#define BU98B10SEGMAX 180 /* 段码段码最大值 */
// #define BU98B10NUMBERMAX 7 /* 数字段数最大值 */
typedef enum
{
BU98B10_NUMBER_SEG_7 = 0,
BU98B10_NUMBER_SEG_27,
BU98B10_NUMBER_SEG_25,
BU98B10_NUMBER_SEG_23,
BU98B10_NUMBER_SEG_16,
BU98B10_NUMBER_SEG_MAX,
} BU98B10_Number_SEG_en_t; /* 段码段 */
typedef enum
{
BU98B10_CHANNEL_0 = 0,
BU98B10_CHANNEL_1,
BU98B10_CHANNEL_MAX,
} BU98B10_Channel_en_t; /* 段码通道 */
typedef enum
{
BU98B10_OFF = 0,
BU98B10_GRAY_LEVEL1,
BU98B10_GRAY_LEVEL2,
BU98B10_GRAY_LEVEL3,
BU98B10_GRAY_LEVEL4,
BU98B10_GRAY_LEVEL5,
BU98B10_GRAY_LEVEL6,
BU98B10_ON,
} BU98B10_Color_en_t; /* 段码点亮等级 */
typedef enum
{
BU98B10_Disable = 0,
BU98B10_Enable,
} BU98B10_Enable_en_t; /* 段码点亮等级 */
typedef enum
{
BU98B10DIS_NUMBLE_0 = 0,
BU98B10DIS_NUMBLE_1,
BU98B10DIS_NUMBLE_2,
BU98B10DIS_NUMBLE_3,
BU98B10DIS_NUMBLE_4,
BU98B10DIS_NUMBLE_5,
BU98B10DIS_NUMBLE_6,
BU98B10DIS_NUMBLE_7,
BU98B10DIS_NUMBLE_8,
BU98B10DIS_NUMBLE_9,
BU98B10DIS_ALPHABET_A,
BU98B10DIS_ALPHABET_B,
BU98B10DIS_ALPHABET_C,
BU98B10DIS_ALPHABET_D,
BU98B10DIS_ALPHABET_E,
BU98B10DIS_ALPHABET_F,
BU98B10DIS_ALPHABET_U,
BU98B10DIS_ALPHABET_P,
BU98B10DIS_ALPHABET_L,
BU98B10DIS_ALPHABET_H,
BU98B10DIS_NUMBLE_LINE,
BU98B10DIS_NUMBLE_NULL,
BU98B10DIS_MAX_7,
} BU98B10_Numble7_Mask_en_t; /* 段码掩码(7段适用) */
typedef enum
{
BU98B10DIS16_NUMBLE_0 = 0,
BU98B10DIS16_NUMBLE_1,
BU98B10DIS16_NUMBLE_2,
BU98B10DIS16_NUMBLE_3,
BU98B10DIS16_NUMBLE_4,
BU98B10DIS16_NUMBLE_5,
BU98B10DIS16_NUMBLE_6,
BU98B10DIS16_NUMBLE_7,
BU98B10DIS16_NUMBLE_8,
BU98B10DIS16_NUMBLE_9,
BU98B10DIS16_ALPHABET_A,
BU98B10DIS16_ALPHABET_B,
BU98B10DIS16_ALPHABET_C,
BU98B10DIS16_ALPHABET_D,
BU98B10DIS16_ALPHABET_E,
BU98B10DIS16_ALPHABET_F,
BU98B10DIS16_ALPHABET_G,
BU98B10DIS16_ALPHABET_H,
BU98B10DIS16_ALPHABET_I,
BU98B10DIS16_ALPHABET_J,
BU98B10DIS16_ALPHABET_K,
BU98B10DIS16_ALPHABET_L,
BU98B10DIS16_ALPHABET_M,
BU98B10DIS16_ALPHABET_N,
BU98B10DIS16_ALPHABET_O,
BU98B10DIS16_ALPHABET_P,
BU98B10DIS16_ALPHABET_Q,
BU98B10DIS16_ALPHABET_R,
BU98B10DIS16_ALPHABET_S,
BU98B10DIS16_ALPHABET_T,
BU98B10DIS16_ALPHABET_U,
BU98B10DIS16_ALPHABET_V,
BU98B10DIS16_ALPHABET_W,
BU98B10DIS16_ALPHABET_X,
BU98B10DIS16_ALPHABET_Y,
BU98B10DIS16_ALPHABET_Z,
BU98B10DIS16_NUMBLE_mul,//乘 x
BU98B10DIS16_NUMBLE_add,//加 +
BU98B10DIS16_NUMBLE_sub,//减 -
BU98B10DIS16_NUMBLE_exc,//除 /
BU98B10DIS16_NUMBLE_LMPar,//左中括号 [
BU98B10DIS16_NUMBLE_RMPar,//右中括号 ]
BU98B10DIS16_NUMBLE_LSPar,//左小括号 (
BU98B10DIS16_NUMBLE_RSPar,//右小括号 )
BU98B10DIS16_NUMBLE_equal,//等于 =
BU98B10DIS16_NUMBLE_degrees,//度 °
BU98B10DIS16_NUMBLE_NULL,//空
BU98B10DIS16_MAX_16,
} BU98B10_Numble16_Mask_en_t; /* 段码掩码(16段适用) */
typedef enum
{
BU98B10DIS27_NUMBLE_ = 0,
BU98B10DIS27_NUMBLE_1,
BU98B10DIS27_NUMBLE_2,
BU98B10DIS27_NUMBLE_3,
BU98B10DIS27_NUMBLE_4,
BU98B10DIS27_NUMBLE_5,
BU98B10DIS27_NUMBLE_6,
BU98B10DIS27_NUMBLE_7,
BU98B10DIS27_NUMBLE_8,
BU98B10DIS27_NUMBLE_9,
BU98B10DIS27_NUMBLE_NULL,
BU98B10DIS27_MAX_27,
} BU98B10_Numble27_Mask_en_t; /* 段码掩码(27段适用) */
typedef enum
{
BU98B10DIS25_NUMBLE_0 = 0,
BU98B10DIS25_NUMBLE_1,
BU98B10DIS25_NUMBLE_2,
BU98B10DIS25_NUMBLE_3,
BU98B10DIS25_NUMBLE_4,
BU98B10DIS25_NUMBLE_5,
BU98B10DIS25_NUMBLE_6,
BU98B10DIS25_NUMBLE_7,
BU98B10DIS25_NUMBLE_8,
BU98B10DIS25_NUMBLE_9,
BU98B10DIS25_NUMBLE_NULL,
BU98B10DIS25_MAX_25,
} BU98B10_Numble25_Mask_en_t; /* 段码掩码(25段适用) */
typedef enum
{
BU98B10DIS23_NUMBLE_P = 0,
BU98B10DIS23_NUMBLE_R,
BU98B10DIS23_NUMBLE_N,
BU98B10DIS23_NUMBLE_H,
BU98B10DIS23_NUMBLE_L,
BU98B10DIS23_NUMBLE_NULL,
BU98B10DIS23_MAX_23,
} BU98B10_Numble23_Mask_en_t; /* 段码掩码(23段适用) */
typedef struct
{
BU98B10_Channel_en_t enBU98B10Channel; /* 选择第几片段码 */
uint8_t u8BU98B10_Seg; /* 需显示的SEG值 */
} BU98B10_USER_st_t;
/**
* @brief 设置段码显示数字或字母显示
* @param pBU98B10User 传入BU98B10_USER_st_t指针
* @param enBU98B10Value 需要显示的内容 数字或者字母详见BU98B10_Numble7_Mask_en_t BU98B10_Numble27_Mask_en_t BU98B10_Numble25_Mask_en_t BU98B10_Numble23_Mask_en_t
* @param enBU98B10SEGNum 需要显示的段码段数 详见 BU98B10_Number_SEG_en_t 以及示例图 若没有可以联系作者补上掩码
* @param Enable 是否点亮
* @return 0:正确 1 传入关闭等级错误 2 传入空指针 3 传入SEG错误或设置段码通道错误 或传入enBU98B10Value错误
*/
uint8_t BU98B10_Set_Numble(const BU98B10_USER_st_t* pBU98B10User, uint8_t enBU98B10Value, BU98B10_Number_SEG_en_t enBU98B10SEGNum, uint8_t Enable);
/**
* @brief 设置段码SEG等级
* @param enBU98B10Channel 传入要设置的段码通道
* @param u8Seg 传入要设置的段码
* @param enColor 传入要设置的等级
* @return 0:设置成功,1:传入的通道错误,2:传入的段码错误,3:传入的等级错误
*/
extern uint8_t BU98B10_Set_Seg_Level(BU98B10_Channel_en_t enBU98B10Channel, uint8_t u8Seg, BU98B10_Color_en_t enColor);
/**
* @brief 设置段码全开 默认等级 7
* @param enBU98B10Channel 选择第几片段码
*/
extern uint8_t BU98B10_ALL_OPEN(BU98B10_Channel_en_t enBU98B10Channel);
/**
* @brief 设置段码全关 默认等级 7
* @param enBU98B10Channel 选择第几片段码
*/
extern uint8_t BU98B10_ALL_CLOSE(BU98B10_Channel_en_t enBU98B10Channel);
#endif
#ifndef _BACKLIGHT_H_ #ifndef _BACKLIGHT_H_
#define _BACKLIGHT_H_ #define _BACKLIGHT_H_
#include "common.h"
extern uint8_t interact_PWM_Low_Duty; #ifdef Platform_16Bit
void BackLight_Process(void); #define Light_uint8_t unsigned char
void Interact_Light_Process(void); #define Light_uint16_t unsigned int
void BackLight_Clock_All_Process(void); #define Light_uint32_t unsigned long
extern uint8_t Get_Interact_Light_State(void);
#else
#define Light_uint8_t unsigned char
#define Light_uint16_t unsigned short
#define Light_uint32_t unsigned int
#define Light_uint64_t unsigned long long
#endif #endif
#define Backlight_NTC_Max 10 /* 背光NTC阻值表格元素最大值 */
#define BacklightLevel_Max 10 /* 背光等级表格元素最大值 */
#define BackLight_Up_Timer 400 /* 背光精度上升1%的时间 单位 10ms */
#define BackLight_Down_Timer 200 /* 背光精度下降1%的时间 单位 10ms */
typedef struct //__attribute__((aligned(4)))
{
Light_uint16_t Temperature; /* 温度 */
Light_uint16_t Resistance; /* 阻值 */
} _st_Backlight_NtcTable;
typedef struct //__attribute__((aligned(4)))
{
Light_uint16_t BacklightLevel; /* 背光等级 */
Light_uint16_t BacklightDuty; /* 背光占空比 */
} _st_BacklightLevel;
typedef void (*SetPwm)(Light_uint16_t Pwm);
typedef Light_uint8_t (*SetPwmEnable)(void);
typedef Light_uint8_t (*SetPwmLevel)(void);
typedef Light_uint16_t (*GetNtcRes)(void);
typedef struct //__attribute__((aligned(4)))
{
SetPwm SetPwmCbk; /* 设置PWM回调函数 */
SetPwmEnable SetPwmEnCbk; /* 设置PWM使能回调函数 */
SetPwmLevel SetPwmLevelCbk; /* 背光等级回调函数 */
GetNtcRes NtcResCbk; /* 获取NTC电阻值回调函数 如无NTC传入空 */
_st_Backlight_NtcTable *BacklightNTCTable; /* NTC 数据表 */
_st_BacklightLevel *BacklightLevelTable; /* 背光等级数据表 */
} _st_BackLight_Init;
/**
* @brief 初始化背光模块,KL30/唤醒初始化调用一次即可
* @param backlightInit 背光初始化配置结构体指针,包含所需的回调函数和数据表。
* @note 调用此初始化前需先初始化硬件相关
*/
extern void Backlight_KL30_WakeUp_Init(_st_BackLight_Init *backlightInit);
/**
* @brief 初始化背光模块,休眠初始化调用一次即可
* @note 调用此初始化前需先初始化硬件相关
*/
extern void BackLight_Sleep_Init(void);
/**
* @brief 背光服务函数 必须10ms调用
*/
extern void BackLight_Service(void);
#endif
#include "BackLight_User.h"
#include "BackLight.h"
#include "TrmerM\TrmerM.h"
#define BACK_LIGHT_DAY 200
#define openLED_flag ((Get_CAN_Power_State() != PKEY_ON) && (Get_CAN_Power_State() != KEY_OFF) && (Get_CAN_Power_State() != POWER_CHECK_NULL))
uint8_t interact_PWM_Low_Duty = 0;
Backlight_User_OPT3004_st_t opt3004;
uint8_t g_u8BacklightUserDayTimecount = 0;
uint16_t u16Backlightcount = 0U;
uint8_t u8BacklightLevel = 0U;
/* 填写NTC阻值温度对应表*/
_st_Backlight_NtcTable BacklightNTCTable[Backlight_NTC_Max] =
{
/*温度 阻值 */
{ 550, 2709},
{ 600, 2224},
{ 650, 1832},
{ 700, 1518},
{ 750, 1263},
{ 800, 1056},
{ 850, 887},
{ 900, 748},
{ 950, 633},
{1000, 538},
};
/* 填写背光等级及占空比对应表 */
_st_BacklightLevel BacklightLevelTable[BacklightLevel_Max] =
{
/*背光等级 背光占空比 */
{1, 50}, /*夜间背光1级*/
{2, 100}, /*夜间背光2级*/
{3, 150}, /*夜间背光3级*/
{4, 200}, /*夜间背光4级*/
{5, 250}, /*夜间背光5级*/
{6, 100}, /*白天背光1级*/
{7, 200}, /*白天背光2级*/
{8, 300}, /*白天背光3级*/
{9, 400}, /*白天背光4级*/
{10, 500}, /*白天背光5级*/
};
/**
* @brief 获取背光使能回调函数
* 用于控制背光开启关闭
*/
uint8_t Get_BackLight_En(void)
{
if ((Common_Get_IG_Sts() == COMMON_POWER_ON) && (openLED_flag))
{
return 1;
}
else
{
return 0;
}
}
/**
* @brief 设置PWM回调函数
*/
void Set_Pwm_Cbk(uint16_t PWM)
{
TimerM_PWM_set_duty(TIMERM_COUNTER1, TIMERM_CHB, PWM);
}
/**
* @brief 获取当前背光等级回调函数
*/
uint8_t Get_BackLight_Level(void)
{
// uint16_t u8PositionStatus = 0U;
// // u8PositionStatus = (Line_In_Get_Status(LINE_IN_PositionLight));
// if (u8PositionStatus == 1U)
// {
// return u8BacklightLevel;
// }
// else
// {
// return u8BacklightLevel + 5U;
// }
return 5;
}
/**
* @brief 获取当前显示背光等级函数
*/
uint8_t Get_BackLight_Level_Display(void)
{
return u8BacklightLevel;
}
// /**
// * @brief 获取当前NTC阻值 ,本项目没有NTC热敏电阻采集
// */
// uint16_t Get_NTC_Rec(void)
// {
// // uint16_t u16NTCresistance = 0U;
// // u16NTCresistance = ADC_Read_Signal(ADC_CH_NTC_R);
// // return u16NTCresistance;
// }
void BackLight_User_Init(void)
{
_st_BackLight_Init BackLightInit;
BackLightInit.SetPwmCbk = Set_Pwm_Cbk;
BackLightInit.SetPwmEnCbk = Get_BackLight_En;
BackLightInit.SetPwmLevelCbk = Get_BackLight_Level;
BackLightInit.NtcResCbk = ((void *)0);
BackLightInit.BacklightNTCTable = &BacklightNTCTable[0];
BackLightInit.BacklightLevelTable = &BacklightLevelTable[0];
Backlight_KL30_WakeUp_Init(&BackLightInit);
// opt3004.u8DayandNightSts = DAY_SCREEN;
// opt3004.u32Result = 0;
u8BacklightLevel = 3U;
}
void BackLight_Process(void)
{
if (openLED_flag)
{
//电量
if ((Get_EleDial_AllSOC_lenth() == 2) || (checkself_seg_Flag == 1))
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT03_PIN00, RTE_GPIO_LEVEL_HIGH);//百位
RTE_GPIO_Set_Level(RTE_GPIO_PORT02_PIN04, RTE_GPIO_LEVEL_HIGH);
}
else if(Get_EleDial_AllSOC_lenth() == 1)
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT03_PIN00, RTE_GPIO_LEVEL_LOW);
RTE_GPIO_Set_Level(RTE_GPIO_PORT02_PIN04, RTE_GPIO_LEVEL_HIGH);
}
else
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT03_PIN00, RTE_GPIO_LEVEL_LOW);
RTE_GPIO_Set_Level(RTE_GPIO_PORT02_PIN04, RTE_GPIO_LEVEL_LOW);
}
}
else
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT03_PIN00, RTE_GPIO_LEVEL_LOW);
RTE_GPIO_Set_Level(RTE_GPIO_PORT02_PIN04, RTE_GPIO_LEVEL_LOW);
}
}
void BackLight_Clock_All_Process(void)
{
if (openLED_flag && (Charge_OFF_Flag == 0))
{
//总计时间
if ((Get_Clock_All_lenth() == 2)|| (checkself_seg_Flag == 1))
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT01_PIN05, RTE_GPIO_LEVEL_HIGH); //总计工作时长统计千位_MCU_OUT
RTE_GPIO_Set_Level(RTE_GPIO_PORT01_PIN06, RTE_GPIO_LEVEL_HIGH); //总计工作时长统计百十位_MCU_OUT
}
else if(Get_Clock_All_lenth() == 1)
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT01_PIN05, RTE_GPIO_LEVEL_LOW); //总计工作时长统计千位_MCU_OUT
RTE_GPIO_Set_Level(RTE_GPIO_PORT01_PIN06, RTE_GPIO_LEVEL_HIGH); //总计工作时长统计百十位_MCU_OUT
}
else
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT01_PIN05, RTE_GPIO_LEVEL_LOW); //总计工作时长统计千位_MCU_OUT
RTE_GPIO_Set_Level(RTE_GPIO_PORT01_PIN06, RTE_GPIO_LEVEL_LOW); //总计工作时长统计百十位_MCU_OUT
}
}
else
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT01_PIN05, RTE_GPIO_LEVEL_LOW); //总计工作时长统计千位_MCU_OUT
RTE_GPIO_Set_Level(RTE_GPIO_PORT01_PIN06, RTE_GPIO_LEVEL_LOW); //总计工作时长统计百十位_MCU_OUT
}
}
void Interact_Light_Process(void)
{
#if (PART_NUMBER == RMR42E_60)
if ((Get_CAN_Power_State() != KEY_OFF) && (Get_CAN_Power_State() != POWER_CHECK_NULL) && (Charge_OFF_Flag == 0))
{
TimerM_PWM_set_duty(TIMERM_COUNTER0, TIMERM_CHD, interact_PWM_Low_Duty * 10);
}
else
{
TimerM_PWM_set_duty(TIMERM_COUNTER0, TIMERM_CHD, 1000);
}
#endif
}
uint8_t Get_Interact_Light_State(void)
{
uint8_t stata = 0x0;
if(interact_PWM_Low_Duty == 0)
{
stata = 0x1;
}
else if(interact_PWM_Low_Duty == 30)
{
stata = 0x2;
}
else if(interact_PWM_Low_Duty == 50)
{
stata = 0x3;
}
return stata;
}
#ifndef BACKLIGHT_USER_H__
#define BACKLIGHT_USER_H__
#include "Application.h"
#include "Components.h"
/*NTC 降背光策略采用BYD策略
L超过60℃需要有背光策略,背光策略优先依据BYD策略
L温度要设计≥2℃的温度回差
注:BYD策略,如下:
采集温度达到60度  输出背光=当前背光等级亮度*95%
采集温度达到65度  输出背光=当前背光等级亮度*90%
采集温度达到70度  输出背光=当前背光等级亮度*85%
采集温度达到75度  输出背光=当前背光等级亮度*80%
采集温度达到80度  输出背光=当前背光等级亮度*75%
采集温度达到85度  输出背光=当前背光等级亮度*70%
采集温度达到88度  输出背光=当前背光等级亮度*20%
采集温度达到90度  输出背光=当前背光等级亮度*10
温度上升
2S下降1%
温度下降
4S上升1%
*/
#define BACKLIGHT_DELAY_NUM 15U /*背光延迟点亮等待时长 = (BACKLIGHT_DELAY_NUM * 10ms) */
#define BLACK_TO_WHITE_LUMINOUS_VALUE 2000U /*从黑背景切换到白背景时的临界光感值*/
#define WHITE_TO_BLACK_LUMINOUS_VALUE 900U /*从白背景切换到黑背景时的临界光感值*/
#define SCREEN_SWITCHOVER_DELAY_NUM 15U /*白天夜间模式切换光感滤波时间 = SCREEN_SWITCHOVER_HOLD_NUM * 100ms) */
typedef enum{
DAY_SCREEN = 0, /*白天模式、白背景*/
NIGHT_SCREEN, /*夜间模式、黑背景*/
}BackLight_Screen_Status_en_t;
/*光感数据存储结构体*/
typedef struct __attribute__((aligned(4)))
{
uint32_t u32Result;
uint8_t u8DayandNightSts;
}Backlight_User_OPT3004_st_t;
extern Backlight_User_OPT3004_st_t opt3004;
extern uint16_t u16Backlightcount;
extern uint8_t u8BacklightLevel;
extern void BackLight_User_Init(void);
extern uint8_t Get_BackLight_Level_Display(void);
extern uint8_t interact_PWM_Low_Duty;
void BackLight_Process(void);
void Interact_Light_Process(void);
void BackLight_Clock_All_Process(void);
extern uint8_t Get_Interact_Light_State(void);
#endif
#include "Components.h"
#include "Buzzer\Buzzer.h"
uint8_t BUZZER_ON = 0;
uint16_t Buzzer_time = 0;
uint8_t BuzzerReadyCount = 0U;
void Buzzer_KL30_Init(void)
{
BUZZER_ON = 0;
Buzzer_time = 0;
BuzzerReadyCount = 0U;
}
void Buzzer_KL15_Init(void)
{
}
void BUZZER_Init(void)
{
#if (PART_NUMBER == RMR42E_60)
Buzzer_time = 0;
BUZZER_ON = 0;
RTE_GPIO_Set_Level(RTE_GPIO_PORT04_PIN01, RTE_GPIO_LEVEL_LOW); // OUT_EN_1
#endif
}
void Buzzer_Service(void)
{
#if (PART_NUMBER == RMR42E_60)
if ((Get_CAN_Power_State() != PKEY_ON) && (Get_CAN_Power_State() != KEY_OFF) && (Get_CAN_Power_State() != POWER_CHECK_NULL))
{
if (g_u8TYWClearEepromFlag >= 1)
{
;
}
else
{
BUZZER_Init();
}
}
else if (Get_CAN_Power_State() == PKEY_ON)
{
if (Buzzer_time == 0)
{
;
}
if (FLASH_SYNC_05Hz)
{
if (Buzzer_time <= 6000)
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT04_PIN01, RTE_GPIO_LEVEL_HIGH); // OUT_EN_1
BUZZER_ON = 1;
}
else
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT04_PIN01, RTE_GPIO_LEVEL_LOW); // OUT_EN_1
BUZZER_ON = 0;
}
}
else
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT04_PIN01, RTE_GPIO_LEVEL_LOW); // OUT_EN_1
BUZZER_ON = 0;
}
if (Buzzer_time < 0xFFFF)
{
Buzzer_time++;
}
}
else
{
BUZZER_Init();
}
#else
if (Get_TelltalesLedSts(em_LED_Grass_Full_R) == 1U)
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT04_PIN01, RTE_GPIO_LEVEL_HIGH);
BUZZER_ON = 1U;
}
else if (Get_TelltalesLedSts(em_LED_READY_G) == 1U)
{
if (BuzzerReadyCount < 20U)
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT04_PIN01, RTE_GPIO_LEVEL_HIGH);
BUZZER_ON = 1U;
BuzzerReadyCount ++;
}
else
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT04_PIN01, RTE_GPIO_LEVEL_LOW);
BUZZER_ON = 0U;
}
}
else
{
RTE_GPIO_Set_Level(RTE_GPIO_PORT04_PIN01, RTE_GPIO_LEVEL_LOW);
BUZZER_ON = 0U;
BuzzerReadyCount = 0U;
}
#endif
}
/******************************************************************************
函数名:Get_Buzzer_Status
功 能:获取显示燃油格数函数
参 数:无
返回值:Fuel.FuelSeg 显示的电量值 x1
******************************************************************************
注 意:该函数必须每 ms被调用一次
******************************************************************************/
uint8_t Get_Buzzer_Status(void)
{
return BUZZER_ON;
}
#ifndef BUZZER_H__
#define BUZZER_H__
#include "Application.h"
#include "Components.h"
extern uint16_t Buzzer_time;
extern uint8_t BUZZER_ON;
extern void Buzzer_KL30_Init(void);
extern void Buzzer_KL15_Init(void);
extern void Buzzer_Service(void);
extern void BUZZER_Init(void);
extern uint8_t Get_Buzzer_Status(void);
#endif
...@@ -12,6 +12,7 @@ void Can_Set_Buff_3A2(canlib_uint8_t CopyData[]) ...@@ -12,6 +12,7 @@ void Can_Set_Buff_3A2(canlib_uint8_t CopyData[])
p3A2 = (CANMsg3A2Union *)CopyData; p3A2 = (CANMsg3A2Union *)CopyData;
if (p3A2 != (void *)0) if (p3A2 != (void *)0)
{ {
#if (PART_NUMBER == RMR42E_60)
p3A2->Sig.ICU_POWERStateFB = Get_CAN_Power_State(); p3A2->Sig.ICU_POWERStateFB = Get_CAN_Power_State();
p3A2->Sig.ICU_KL15State = (Get_CAN_Power_State() != KEY_OFF); p3A2->Sig.ICU_KL15State = (Get_CAN_Power_State() != KEY_OFF);
p3A2->Sig.ICU_LEDLightState = Get_LINE_IN_BigLED(); p3A2->Sig.ICU_LEDLightState = Get_LINE_IN_BigLED();
...@@ -39,10 +40,29 @@ void Can_Set_Buff_3A2(canlib_uint8_t CopyData[]) ...@@ -39,10 +40,29 @@ void Can_Set_Buff_3A2(canlib_uint8_t CopyData[])
// p3A2->Sig.Res5 = 0x00; // p3A2->Sig.Res5 = 0x00;
// p3A2->Sig.Res6 = 0x00; // p3A2->Sig.Res6 = 0x00;
// p3A2->Sig.Res7 = 0x00; // p3A2->Sig.Res7 = 0x00;
#else
if (Get_CAN_Power_State() == KEY_ACC)
{
p3A2->Sig.ICU_PowerEnable = 0x1U;
}
else
{
p3A2->Sig.ICU_PowerEnable = 0x0U;
}
p3A2->Sig.ICU_LEDLightState = Get_TelltalesLedSts(em_LED_LED_Open_W);
p3A2->Sig.ICU_BuzzerState = Get_Buzzer_Status();
p3A2->Sig.ICU_GrassFullState = Get_TelltalesLedSts(em_LED_Grass_Full_R);
#endif
} }
} }
void Can_Set_Buff_3A7(canlib_uint8_t CopyData[]) void Can_Set_Buff_3A7(canlib_uint8_t CopyData[])
{ {
#if (PART_NUMBER == RMR42E_60)
CANMsg3A7Union *p3A7; CANMsg3A7Union *p3A7;
uint8_t i = 0; uint8_t i = 0;
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
...@@ -65,10 +85,12 @@ void Can_Set_Buff_3A7(canlib_uint8_t CopyData[]) ...@@ -65,10 +85,12 @@ void Can_Set_Buff_3A7(canlib_uint8_t CopyData[])
p3A7->Sig.Res6 = 0x00; p3A7->Sig.Res6 = 0x00;
p3A7->Sig.Res7 = 0x00; p3A7->Sig.Res7 = 0x00;
} }
#endif
} }
void Can_Set_Buff_393(canlib_uint8_t CopyData[]) void Can_Set_Buff_393(canlib_uint8_t CopyData[])
{ {
#if (PART_NUMBER == RMR42E_60)
CANMsg393Union *p393; CANMsg393Union *p393;
uint8_t i = 0; uint8_t i = 0;
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
...@@ -88,4 +110,33 @@ void Can_Set_Buff_393(canlib_uint8_t CopyData[]) ...@@ -88,4 +110,33 @@ void Can_Set_Buff_393(canlib_uint8_t CopyData[])
p393->Sig.ICU_ProtoSubVer = 7; p393->Sig.ICU_ProtoSubVer = 7;
p393->Sig.Res1 = 0x00; p393->Sig.Res1 = 0x00;
} }
#endif
}
void Can_Set_Buff_3D4(canlib_uint8_t CopyData[])
{
#if (PART_NUMBER == G54_A01)
CANMsg3D4Union *p3D4;
uint8_t i = 0;
for (i = 0; i < 8; i++)
{
CopyData[i] = 0xFFU;
}
p3D4 = (CANMsg3D4Union *)CopyData;
if (p3D4 != (void *)0)
{
p3D4->Sig.ICU_MasterBMSCommunicatlost = 0;
p3D4->Sig.ICU_SlaveBMSCommunicatlost = 0;
p3D4->Sig.ICU_MCUCommunicatlost = 0;
p3D4->Sig.ICU_VCUCommunicatlost = 0;
p3D4->Sig.Res0 = 0x0;
p3D4->Sig.Res1 = 0x00;
p3D4->Sig.Res2 = 0x00;
p3D4->Sig.Res3 = 0x00;
p3D4->Sig.Res4 = 0x00;
p3D4->Sig.Res5 = 0x00;
p3D4->Sig.Res6 = 0x00;
p3D4->Sig.Res7 = 0x00;
}
#endif
} }
...@@ -8,12 +8,14 @@ ...@@ -8,12 +8,14 @@
void Can_Set_Buff_3A2(canlib_uint8_t CopyData[]); void Can_Set_Buff_3A2(canlib_uint8_t CopyData[]);
void Can_Set_Buff_3A7(canlib_uint8_t CopyData[]); void Can_Set_Buff_3A7(canlib_uint8_t CopyData[]);
void Can_Set_Buff_393(canlib_uint8_t CopyData[]); void Can_Set_Buff_393(canlib_uint8_t CopyData[]);
void Can_Set_Buff_3D4(canlib_uint8_t CopyData[]);
typedef union typedef union
{ {
uint8_t Msg [ 8 ]; uint8_t Msg [ 8 ];
struct struct
{ {
#if (PART_NUMBER == RMR42E_60)
uint8_t ICU_POWERStateFB : 4; uint8_t ICU_POWERStateFB : 4;
uint8_t ICU_KL15State : 1; uint8_t ICU_KL15State : 1;
uint8_t ICU_LEDLightState : 1; uint8_t ICU_LEDLightState : 1;
...@@ -43,6 +45,30 @@ typedef union ...@@ -43,6 +45,30 @@ typedef union
// uint8_t Res5: 8; // uint8_t Res5: 8;
// uint8_t Res6 : 8; // uint8_t Res6 : 8;
// uint8_t Res7 : 8; // uint8_t Res7 : 8;
#else
uint8_t Res0 : 4;
uint8_t ICU_PowerEnable : 1;
uint8_t ICU_LEDLightState : 1;
uint8_t ICU_BuzzerState : 1;
uint8_t Res1 : 1;
uint8_t Res2 : 4;
uint8_t ICU_GrassFullState : 1;
uint8_t Res3 : 3;
uint8_t Res4 : 8;
uint8_t Res5 : 8;
uint8_t Res6 : 8;
uint8_t Res7 : 8;
uint8_t Res8 : 8;
uint8_t Res9 : 8;
#endif
} Sig; } Sig;
} CANMsg3A2Union; } CANMsg3A2Union;
...@@ -84,5 +110,27 @@ typedef union ...@@ -84,5 +110,27 @@ typedef union
} Sig; } Sig;
} CANMsg393Union; } CANMsg393Union;
typedef union
{
uint8_t Msg [ 8 ];
struct
{
uint8_t ICU_MasterBMSCommunicatlost : 1;
uint8_t ICU_SlaveBMSCommunicatlost : 1;
uint8_t ICU_MCUCommunicatlost : 1;
uint8_t ICU_VCUCommunicatlost : 1;
uint8_t Res0: 4;
uint8_t Res1: 8;
uint8_t Res2: 8;
uint8_t Res3: 8;
uint8_t Res4: 8;
uint8_t Res5: 8;
uint8_t Res6 : 8;
uint8_t Res7 : 8;
} Sig;
} CANMsg3D4Union;
#endif #endif
...@@ -37,6 +37,13 @@ extern uint8_t Get_CAN_Num_SBMS_Soc(void); ...@@ -37,6 +37,13 @@ extern uint8_t Get_CAN_Num_SBMS_Soc(void);
extern uint8_t Get_CAN_Num_SMCU_ErrorGrage(void); extern uint8_t Get_CAN_Num_SMCU_ErrorGrage(void);
extern uint8_t Get_CAN_Power_State(void); extern uint8_t Get_CAN_Power_State(void);
extern void Set_CAN_ALL_Signal(void); extern void Set_CAN_ALL_Signal(void);
extern void CAN_0x18E_Receive(uint8_t CopyData []);
extern void CAN_0x225_Receive(uint8_t CopyData []);
extern void CAN_0x234_Receive(uint8_t CopyData []);
extern void CAN_0x38E_Receive(uint8_t CopyData []);
extern void CAN_0x220_Receive(uint8_t CopyData []);
extern void CAN_0x16B_Receive(uint8_t CopyData []);
extern void CAN_0x22F_Receive(uint8_t CopyData []);
extern void CAN_0x170_Receive(uint8_t CopyData []);
#endif #endif
...@@ -15,11 +15,18 @@ void Can_Init(void) ...@@ -15,11 +15,18 @@ void Can_Init(void)
can_config_st_t Can_Config; can_config_st_t Can_Config;
Can_Config.ch = CAN_CH_0; Can_Config.ch = CAN_CH_0;
Can_Config.freq = CAN_500Kbps; Can_Config.freq = CAN_500Kbps;
#if (PART_NUMBER == RMR42E_60)
Can_Config.MASK[0] = 0x001fffffU; Can_Config.MASK[0] = 0x001fffffU;
Can_Config.MASK[1] = 0x000fffffU; Can_Config.MASK[1] = 0x000fffffU;
Can_Config.MASK[2] = 0x1fffffffU; Can_Config.MASK[2] = 0x1fffffffU;
Can_Config.MASK[3] = 0x1fffffffU; Can_Config.MASK[3] = 0x1fffffffU;
Can_Config.rx_callback = Can_Rx_Cak; #else
Can_Config.MASK[0] = 0x1FFU;
Can_Config.MASK[1] = 0x2FFU;
Can_Config.MASK[2] = 0x3FFU;
Can_Config.MASK[3] = 0x7FFU;
#endif
Can_Config.rx_callback = Read_RingBuff;//Can_Rx_Cak;
COM_CAN_Init(); COM_CAN_Init();
rte_can_init(&Can_Config); rte_can_init(&Can_Config);
...@@ -36,6 +43,18 @@ void Can_Init(void) ...@@ -36,6 +43,18 @@ void Can_Init(void)
*/ */
void Can_RX_Apply_Buff(void) void Can_RX_Apply_Buff(void)
{ {
CAN_RecvMsg.DLC = 8;
CAN_RecvMsg.Data[0] = 0;
CAN_RecvMsg.Data[1] = 0;
CAN_RecvMsg.Data[2] = 0;
CAN_RecvMsg.Data[3] = 0;
CAN_RecvMsg.Data[4] = 0;
CAN_RecvMsg.Data[5] = 0;
CAN_RecvMsg.Data[6] = 0;
CAN_RecvMsg.Data[7] = 0;
CAN_RecvMsg.OverWriteConfig = 0;
#if (PART_NUMBER == RMR42E_60)
CAN_RecvMsg.Id = 0x125; CAN_RecvMsg.Id = 0x125;
CAN_RecvMsg.IDE = CAN_Id_Standard; CAN_RecvMsg.IDE = CAN_Id_Standard;
CAN_RecvMsg.CacheType = CAN_CacheType_Rx_NoMask; CAN_RecvMsg.CacheType = CAN_CacheType_Rx_NoMask;
...@@ -126,6 +145,45 @@ void Can_RX_Apply_Buff(void) ...@@ -126,6 +145,45 @@ void Can_RX_Apply_Buff(void)
CAN_MessageCache_Init(CAN0MSG09, &CAN_RecvMsg); CAN_MessageCache_Init(CAN0MSG09, &CAN_RecvMsg);
CAN_MessageCache_OverWriteConfig(CAN0MSG09, ENABLE); CAN_MessageCache_OverWriteConfig(CAN0MSG09, ENABLE);
#else
CAN_RecvMsg.Id = 0x1FF;
CAN_RecvMsg.IDE = CAN_Id_Standard;
CAN_RecvMsg.CacheType = CAN_CacheType_Rx_Mask1;
CAN_RecvMsg.RTR = CAN_RTR_Data;
CAN_RecvMsg.Interrupt = ENABLE;
CAN_MessageCache_DeInit(CAN0MSG00);
CAN_MessageCache_Init(CAN0MSG00, &CAN_RecvMsg);
CAN_MessageCache_OverWriteConfig(CAN0MSG00, ENABLE);
CAN_RecvMsg.Id = 0x2FF;
CAN_RecvMsg.IDE = CAN_Id_Standard;
CAN_RecvMsg.CacheType = CAN_CacheType_Rx_Mask2;
CAN_RecvMsg.RTR = CAN_RTR_Data;
CAN_RecvMsg.Interrupt = ENABLE;
CAN_MessageCache_DeInit(CAN0MSG01);
CAN_MessageCache_Init(CAN0MSG01, &CAN_RecvMsg);
CAN_MessageCache_OverWriteConfig(CAN0MSG01, ENABLE);
CAN_RecvMsg.Id = 0x3FF;
CAN_RecvMsg.IDE = CAN_Id_Standard;
CAN_RecvMsg.CacheType = CAN_CacheType_Rx_Mask3;
CAN_RecvMsg.RTR = CAN_RTR_Data;
CAN_RecvMsg.Interrupt = ENABLE;
CAN_MessageCache_DeInit(CAN0MSG02);
CAN_MessageCache_Init(CAN0MSG02, &CAN_RecvMsg);
CAN_MessageCache_OverWriteConfig(CAN0MSG02, ENABLE);
CAN_RecvMsg.Id = 0x7FF;
CAN_RecvMsg.IDE = CAN_Id_Standard;
CAN_RecvMsg.CacheType = CAN_CacheType_Rx_Mask4;
CAN_RecvMsg.RTR = CAN_RTR_Data;
CAN_RecvMsg.Interrupt = ENABLE;
CAN_MessageCache_DeInit(CAN0MSG03);
CAN_MessageCache_Init(CAN0MSG03, &CAN_RecvMsg);
CAN_MessageCache_OverWriteConfig(CAN0MSG03, ENABLE);
#endif
CAN_RecvMsg.Id = DIAG_ID_Rx_PHY; CAN_RecvMsg.Id = DIAG_ID_Rx_PHY;
CAN_RecvMsg.IDE = CAN_Id_Standard; CAN_RecvMsg.IDE = CAN_Id_Standard;
CAN_RecvMsg.CacheType = CAN_CacheType_Rx_NoMask; CAN_RecvMsg.CacheType = CAN_CacheType_Rx_NoMask;
...@@ -153,11 +211,13 @@ void Can_Tx_Apply_Buff(void) ...@@ -153,11 +211,13 @@ void Can_Tx_Apply_Buff(void)
{ {
CanTxRxMsg CAN_SendMsg; CanTxRxMsg CAN_SendMsg;
CanTxRxMsg CAN_SendMsg_Diag_Tx; CanTxRxMsg CAN_SendMsg_Diag_Tx;
#if (PART_NUMBER == RMR42E_60)
CAN_SendMsg.Id = 0x3A2; CAN_SendMsg.Id = 0x3A2;
CAN_SendMsg.IDE = CAN_Id_Standard; CAN_SendMsg.IDE = CAN_Id_Standard;
CAN_SendMsg.CacheType = CAN_CacheType_Tx; CAN_SendMsg.CacheType = CAN_CacheType_Tx;
CAN_SendMsg.RTR = CAN_RTR_Data; CAN_SendMsg.RTR = CAN_RTR_Data;
CAN_RecvMsg.Interrupt = DISABLE; CAN_SendMsg.Interrupt = DISABLE;
CAN_SendMsg.DLC = 8; CAN_SendMsg.DLC = 8;
for (uint8_t i = 0; i < CAN_SendMsg.DLC; i++) for (uint8_t i = 0; i < CAN_SendMsg.DLC; i++)
{ {
...@@ -171,7 +231,7 @@ void Can_Tx_Apply_Buff(void) ...@@ -171,7 +231,7 @@ void Can_Tx_Apply_Buff(void)
CAN_SendMsg.IDE = CAN_Id_Standard; CAN_SendMsg.IDE = CAN_Id_Standard;
CAN_SendMsg.CacheType = CAN_CacheType_Tx; CAN_SendMsg.CacheType = CAN_CacheType_Tx;
CAN_SendMsg.RTR = CAN_RTR_Data; CAN_SendMsg.RTR = CAN_RTR_Data;
CAN_RecvMsg.Interrupt = DISABLE; CAN_SendMsg.Interrupt = DISABLE;
CAN_SendMsg.DLC = 8; CAN_SendMsg.DLC = 8;
for (uint8_t i = 0; i < CAN_SendMsg.DLC; i++) for (uint8_t i = 0; i < CAN_SendMsg.DLC; i++)
{ {
...@@ -185,7 +245,7 @@ void Can_Tx_Apply_Buff(void) ...@@ -185,7 +245,7 @@ void Can_Tx_Apply_Buff(void)
CAN_SendMsg.IDE = CAN_Id_Standard; CAN_SendMsg.IDE = CAN_Id_Standard;
CAN_SendMsg.CacheType = CAN_CacheType_Tx; CAN_SendMsg.CacheType = CAN_CacheType_Tx;
CAN_SendMsg.RTR = CAN_RTR_Data; CAN_SendMsg.RTR = CAN_RTR_Data;
CAN_RecvMsg.Interrupt = DISABLE; CAN_SendMsg.Interrupt = DISABLE;
CAN_SendMsg.DLC = 8; CAN_SendMsg.DLC = 8;
for (uint8_t i = 0; i < CAN_SendMsg.DLC; i++) for (uint8_t i = 0; i < CAN_SendMsg.DLC; i++)
{ {
...@@ -194,7 +254,35 @@ void Can_Tx_Apply_Buff(void) ...@@ -194,7 +254,35 @@ void Can_Tx_Apply_Buff(void)
CAN_MessageCache_DeInit(CAN0MSG14); CAN_MessageCache_DeInit(CAN0MSG14);
CAN_MessageCache_Init(CAN0MSG14, &CAN_SendMsg); CAN_MessageCache_Init(CAN0MSG14, &CAN_SendMsg);
#else
CAN_SendMsg.Id = 0x3A2;
CAN_SendMsg.IDE = CAN_Id_Standard;
CAN_SendMsg.CacheType = CAN_CacheType_Tx;
CAN_SendMsg.RTR = CAN_RTR_Data;
CAN_SendMsg.Interrupt = DISABLE;
CAN_SendMsg.DLC = 8;
for (uint8_t i = 0; i < CAN_SendMsg.DLC; i++)
{
CAN_SendMsg.Data[i] = 0;
}
CAN_MessageCache_DeInit(CAN0MSG12);
CAN_MessageCache_Init(CAN0MSG12, &CAN_SendMsg);
CAN_SendMsg.Id = 0x3D4;
CAN_SendMsg.IDE = CAN_Id_Standard;
CAN_SendMsg.CacheType = CAN_CacheType_Tx;
CAN_SendMsg.RTR = CAN_RTR_Data;
CAN_SendMsg.Interrupt = DISABLE;
CAN_SendMsg.DLC = 8;
for (uint8_t i = 0; i < CAN_SendMsg.DLC; i++)
{
CAN_SendMsg.Data[i] = 0;
}
CAN_MessageCache_DeInit(CAN0MSG13);
CAN_MessageCache_Init(CAN0MSG13, &CAN_SendMsg);
#endif
CAN_SendMsg_Diag_Tx.Id = DIAG_ID_Tx; CAN_SendMsg_Diag_Tx.Id = DIAG_ID_Tx;
...@@ -237,22 +325,42 @@ void COM_CAN_Init(void) ...@@ -237,22 +325,42 @@ void COM_CAN_Init(void)
CAN_CH0_CanMsgOp.u8CAN_RX_ENABLE = CAN_N_RX_Enable; CAN_CH0_CanMsgOp.u8CAN_RX_ENABLE = CAN_N_RX_Enable;
Can_RX_BuffInit(&CAN_CH0_CanMsgOp, CAN_CH0_CAN_MSG_CONST_ARRAY, CAN_CH0_ID_TOTAL_MAX); Can_RX_BuffInit(&CAN_CH0_CanMsgOp, CAN_CH0_CAN_MSG_CONST_ARRAY, CAN_CH0_ID_TOTAL_MAX);
CAN_RX_SetEnable(&CAN_CH0_CanMsgOp, CAN_N_RX_Enable); CAN_RX_SetEnable(&CAN_CH0_CanMsgOp, CAN_N_RX_Enable);
}
void CAN_TX_Init(void)
{
memset(pTXBuff, 0, sizeof(pTXBuff)); memset(pTXBuff, 0, sizeof(pTXBuff));
CAN_CH0_CanMsgTxOp.CanMsg = (st_CAN_SendOperation *)pTXBuff; CAN_CH0_CanMsgTxOp.CanMsg = (st_CAN_SendOperation *)pTXBuff;
CAN_CH0_CanMsgTxOp.pCAN_SendAttribute = CAN_CH0_CANSendAttr;
CAN_CH0_CanMsgTxOp.Total_Msg = CAN_CH0_ID_SEND_TOTAL;
CAN_CH0_CanMsgTxOp.Can_Write = COM_APP_Process;
CAN_CH0_CanMsgTxOp.u8CAN_TX_ENABLE = CAN_N_TX_Disable;
Can_TX_BuffInit(&CAN_CH0_CanMsgTxOp, CAN_CH0_CANSendAttr, CAN_CH0_ID_SEND_TOTAL, COM_APP_Process); Can_TX_BuffInit(&CAN_CH0_CanMsgTxOp, CAN_CH0_CANSendAttr, CAN_CH0_ID_SEND_TOTAL, COM_APP_Process);
CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Enable); CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Enable);
} }
void Can_QuickTimer_Init(void)
{
uint32_t i = 0u;
for (i = 0u; i < CAN_CH0_ID_SEND_TOTAL; i++)
{
Can_Msg_TX_FastInitCycle(&CAN_CH0_CanMsgTxOp, i, CAN_CH0_CANSendAttr[i].u32MsgCycleOffset);
}
}
/** /**
* @brief Buff恢复函数 * @brief Buff恢复函数
* @param deltaTime 调用时间 单位ms 10MS调用 * @param deltaTime 调用时间 单位ms 10MS调用
*/ */
uint16_t CanRxInitflag = 0;
void Can_BusOff_Recover(uint8_t deltaTime) void Can_BusOff_Recover(uint8_t deltaTime)
{ {
if (get_can_busoff(CAN_CH_0) == 2) if (get_can_busoff(CAN_CH_0) == 2)
{ {
CanRxInitflag = 1;
if (RSCAN0Busoff.Status == RSCAN0_BUS_STABLE) if (RSCAN0Busoff.Status == RSCAN0_BUS_STABLE)
{ {
RSCAN0Busoff.Status = RSCAN0_BUS_OFF_LV1; RSCAN0Busoff.Status = RSCAN0_BUS_OFF_LV1;
...@@ -261,18 +369,20 @@ void Can_BusOff_Recover(uint8_t deltaTime) ...@@ -261,18 +369,20 @@ void Can_BusOff_Recover(uint8_t deltaTime)
if (RSCAN0Busoff.Status == RSCAN0_BUS_OFF_LV1) if (RSCAN0Busoff.Status == RSCAN0_BUS_OFF_LV1)
{ {
RSCAN0Busoff.Timer++; RSCAN0Busoff.Timer++;
if (RSCAN0Busoff.Timer >= RSCAN0_BUS_OFF_LV1_RECOVERY_TIME / deltaTime) if (RSCAN0Busoff.Timer >= RSCAN0_BUS_OFF_LV1_RECOVERY_TIME / deltaTime)/**/
{ {
RSCAN0Busoff.Timer = 0U; RSCAN0Busoff.Timer = 0U;
RSCAN0Busoff.Cnt++; RSCAN0Busoff.Cnt++;
if (RSCAN0Busoff.Cnt >= 10U) if (RSCAN0Busoff.Cnt >= 10U)/**/
{ {
RSCAN0Busoff.Cnt = 0U; RSCAN0Busoff.Cnt = 0U;
RSCAN0Busoff.Status = RSCAN0_BUS_OFF_LV2; RSCAN0Busoff.Status = RSCAN0_BUS_OFF_LV2;
} }
//需调用CAN中止函数,中止所有硬件buf内要发送的数据
Can_QuickTimer_Init();
reset_busoff(CAN_CH_0); reset_busoff(CAN_CH_0);
} }
} }
...@@ -280,9 +390,11 @@ void Can_BusOff_Recover(uint8_t deltaTime) ...@@ -280,9 +390,11 @@ void Can_BusOff_Recover(uint8_t deltaTime)
{ {
RSCAN0Busoff.Timer++; RSCAN0Busoff.Timer++;
if (RSCAN0Busoff.Timer >= RSCAN0_BUS_OFF_LV2_RECOVERY_TIME / deltaTime) if (RSCAN0Busoff.Timer >= RSCAN0_BUS_OFF_LV2_RECOVERY_TIME / deltaTime)/**/
{ {
RSCAN0Busoff.Timer = 0U; RSCAN0Busoff.Timer = 0U;
//需调用CAN中止函数,中止所有硬件buf内要发送的数据
Can_QuickTimer_Init();
reset_busoff(CAN_CH_0); reset_busoff(CAN_CH_0);
} }
} }
...@@ -292,7 +404,20 @@ void Can_BusOff_Recover(uint8_t deltaTime) ...@@ -292,7 +404,20 @@ void Can_BusOff_Recover(uint8_t deltaTime)
} }
else /* 总线正常,没有Bus-off发生*/ else /* 总线正常,没有Bus-off发生*/
{ {
RSCAN0Busoff.RecoverTimer++;
if (RSCAN0Busoff.RecoverTimer >= 4)
{
RSCAN0Busoff.RecoverTimer = 0;
RSCAN0Busoff.Status = RSCAN0_BUS_STABLE;
RSCAN0Busoff.Timer = 0;
RSCAN0Busoff.Cnt = 0;
}
if(CanRxInitflag == 1)
{
CanRxInitflag = 0;
Can_RX_Apply_Buff();
}
} }
} }
...@@ -329,6 +454,7 @@ void Can_Write(st_CAN_Msg *Msg) ...@@ -329,6 +454,7 @@ void Can_Write(st_CAN_Msg *Msg)
CAN_SendMsg.Data[i] = Msg->Msg[i]; CAN_SendMsg.Data[i] = Msg->Msg[i];
} }
#if (PART_NUMBER == RMR42E_60)
switch (CAN_SendMsg.Id) switch (CAN_SendMsg.Id)
{ {
case 0x3A2: case 0x3A2:
...@@ -343,4 +469,17 @@ void Can_Write(st_CAN_Msg *Msg) ...@@ -343,4 +469,17 @@ void Can_Write(st_CAN_Msg *Msg)
default: default:
break; break;
} }
#else
switch (CAN_SendMsg.Id)
{
case 0x3A2:
CAN_Transmit(CAN0MSG12, &CAN_SendMsg);
break;
case 0x3D4:
CAN_Transmit(CAN0MSG13, &CAN_SendMsg);
break;
default:
break;
}
#endif
} }
...@@ -27,18 +27,18 @@ typedef struct ...@@ -27,18 +27,18 @@ typedef struct
uint8_t Status; uint8_t Status;
uint8_t Timer; uint8_t Timer;
uint8_t Cnt; uint8_t Cnt;
uint8_t ReportDTCCnt; uint8_t RecoverTimer;
} RSCAN0BusoffMonitorStruct; } RSCAN0BusoffMonitorStruct;
extern void CAN_TX_Init(void);
extern void Can_Tx_Apply_Buff(void); extern void Can_Tx_Apply_Buff(void);
extern void Can_RX_Apply_Buff(void); extern void Can_RX_Apply_Buff(void);
extern void Can_BusOff_Recover(uint8_t deltaTime); extern void Can_BusOff_Recover(uint8_t deltaTime);
extern void COM_CAN_Init(void); extern void COM_CAN_Init(void);
extern void Can_Init(void); extern void Can_Init(void);
extern void Can_Rx_Cak(CanTxRxMsg *Msg); extern void Can_Rx_Cak(CanTxRxMsg *Msg);
extern void Busoff(void);
extern uint8_t COM_APP_Process(st_CAN_Msg *Msg); extern uint8_t COM_APP_Process(st_CAN_Msg *Msg);
extern void Can_Write(st_CAN_Msg *Msg); extern void Can_Write(st_CAN_Msg *Msg);
......
...@@ -4,6 +4,11 @@ ...@@ -4,6 +4,11 @@
#include "Components.h" #include "Components.h"
#define RMR42E_60 (0U) /*纯电动零件号*/
#define G54_A01 (1U) /*混动零件号*/
#define PART_NUMBER G54_A01 /*当前程序零件号*/
/*COMMON INTERFACE*/ /*COMMON INTERFACE*/
typedef enum typedef enum
...@@ -12,11 +17,6 @@ typedef enum ...@@ -12,11 +17,6 @@ typedef enum
CAN_SIG_LOST = 0x55U, CAN_SIG_LOST = 0x55U,
} CAN_MSG_Status_t; } CAN_MSG_Status_t;
typedef enum
{
EX_OK = 0u,
EX_ERR,
} _Fun_Res;
typedef enum typedef enum
{ {
......
#include "Components.h"
#include "Data_Fuel\Data_Fuel.h"
FuelStruct_st_t Fuel;
void Data_Fuel_KL30_Init(void)
{
Fuel.FuelSeg = 0U;
Fuel.FuelSegDis = 0U;
Fuel.FuelStatusCount = 0U;
Fuel.FuelValid = 0U;
}
void Data_Fuel_KL15_Init(void)
{
}
void Data_Fuel_Service(void)
{
if (CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x18E_Msg)) == CAN_SIG_NORMAL)
{
Fuel.FuelSeg = Get_CAN_CH0_ID_18E_Sig_EMS_FuelRemainLevel();
Fuel.FuelValid = 1U;
if (Fuel.FuelSeg > 8U)
{
Fuel.FuelSeg = 8U;
}
}
else
{
Fuel.FuelValid = 0U;
Fuel.FuelStatusCount = 0U;
}
}
/******************************************************************************
函数名:Get_FuelSeg_Display
功 能:获取显示燃油格数函数
参 数:无
返回值:Fuel.FuelSeg 显示的电量值 x1
******************************************************************************
注 意:该函数必须每 ms被调用一次
******************************************************************************/
uint8_t Get_FuelSeg_Display(void)
{
return Fuel.FuelSegDis;
}
/******************************************************************************
函数名:Get_FuelStatus_Valid
功 能:获取燃油表有效状态函数
参 数:无
返回值:Fuel.FuelValid 0--无效,1--有效
******************************************************************************
注 意:该函数必须每 ms被调用一次
******************************************************************************/
uint8_t Get_FuelStatus_Valid(void)
{
return Fuel.FuelValid;
}
/******************************************************************************
函数名:Get_FuelPilotLamp_Status
功 能:获取燃油指示灯状态函数
参 数:无
返回值:LampStatus 0--熄灭,1--白色,2--黄色,3--黄色闪烁
******************************************************************************
注 意:该函数必须每 ms被调用一次
******************************************************************************/
uint8_t Get_FuelPilotLamp_Status(void)
{
uint8_t LampStatus = 0U;
if((Fuel.FuelValid == 1U) && (Fuel.FuelSegDis == 1U))
{
LampStatus = 2U;
}
else if ((Fuel.FuelValid == 1U) && (Fuel.FuelSegDis == 0U))
{
LampStatus = 3U;
}
else if ((Fuel.FuelValid == 1U) && (Fuel.FuelSegDis > 1U))
{
LampStatus = 1U;
}
else
{
LampStatus = 0U;
}
return LampStatus;
}
#ifndef DATA_FUEL_H__
#define DATA_FUEL_H__
#include "Application.h"
#include "Components.h"
typedef struct //__attribute__((aligned(4)))
{
uint8_t FuelSeg; //燃油格数
uint8_t FuelSegDis; //燃油显示格数
uint8_t FuelValid; //燃油有效状态
uint8_t FuelStatusCount; /*燃油状态计数*/
}FuelStruct_st_t;
extern FuelStruct_st_t Fuel;
extern void Data_Fuel_KL30_Init(void);
extern void Data_Fuel_KL15_Init(void);
extern void Data_Fuel_Service(void);
extern uint8_t Get_FuelSeg_Display(void);
extern uint8_t Get_FuelStatus_Valid(void);
extern uint8_t Get_FuelPilotLamp_Status(void);
#endif
This diff is collapsed.
#ifndef DATA_SOC_H__
#define DATA_SOC_H__
#include "Application.h"
#include "Components.h"
#define SocUpdateTime 10
typedef enum
{
Soc_Blue,
Soc_Red,
Soc_Yellow,
Soc_Max,
}_Soc_Color;
typedef struct //__attribute__((aligned(4)))
{
uint8_t Value1; //电量1实际值
uint8_t Value2; //电量2实际值
uint8_t Valid1; //电量1状态
uint8_t Valid2; //电量2状态
uint8_t Act_Seg1; /*电量1实际格数*/
uint8_t Act_Seg2; /*电量2实际格数*/
uint8_t Dis_Seg1; /*电量1显示格数*/
uint8_t Dis_Seg2; /*电量2显示格数*/
uint8_t Battery1Icon; /*电池1小图标状态*/
uint8_t Battery2Icon; /*电池2小图标状态*/
uint8_t AllSocValue; /*总SOC值*/
uint8_t AllSocValid; /*总SOC状态*/
}SocStruct_st_t;
extern void Data_Soc_KL30_Init(void);
extern void Data_Soc_KL15_Init(void);
extern void Data_Soc_Service(void);
extern uint8_t Get_Soc1Num_Display(void);
extern uint8_t Get_Soc2Num_Display(void);
extern uint8_t Get_Soc1_Valid(void);
extern uint8_t Get_Soc2_Valid(void);
extern uint8_t Get_CAN_Num_MBMS_Soc_1_Grid(void);
extern uint8_t Get_CAN_Num_SBMS_Soc_2_Grid(void);
extern uint8_t Get_Soc1_Battery_Icon(void);
extern uint8_t Get_Soc2_Battery_Icon(void);
extern uint8_t Get_AllSocValue(void);
extern uint8_t Get_AllSocValid(void);
extern uint8_t Get_EleDial_AllSOC_lenth(void);
#endif
#include "Components.h"
#include "Driving_Information\Data_Gear.h"
GearStruct_st_t Gear;
void Data_Gear_KL30_Init(void)
{
Gear.CutterHeadNum = 0U;
Gear.CutterheadValid = 0U;
Gear.GearNum = 0U;
}
void Data_Gear_KL15_Init(void)
{
}
void Data_Gear_Cutterhead_Service(void)
{
#if (PART_NUMBER == RMR42E_60)
uint8_t Signal1 = Get_CAN_Num_BMCU_BladeSpeedGear();
uint8_t Signal2 = Get_CAN_Num_BMCU_ErrorGrage();
// uint8_t MBMS_StatBattWorkState = Get_CAN_CH0_ID_18203220_Sig_MBMS_StatBattWorkState();
if ((Common_Get_IG_Sts() == COMMON_POWER_ON) && (Get_CAN_Power_State() >= KEY_ACC) && (Get_CAN_Power_State() < CHRGEND) && (System_Indicator_CANFlag != 1))
{
if ((Signal1 > 0U) && (Signal1 <= 3U))
{
Gear.CutterHeadNum = Signal1;
}
else
{
Gear.CutterHeadNum = 0U;
}
if ((Signal2 == 0x1) || (Signal2 == 0x2) || (Signal2 == 0x3) || (Signal2 == 0x4))
{
Gear.CutterheadValid = 0x2U;
}
else
{
Gear.CutterheadValid = 0x1U;
}
}
else
{
Gear.CutterheadValid = 0x0U;
Gear.CutterHeadNum = 0U;
}
#else
uint8_t Signal = Get_CAN_CH0_ID_220_Sig_VCU_BladeSpdGear();
if ((Common_Get_IG_Sts() == COMMON_POWER_ON) && (System_Indicator_CANFlag != 1))
{
if (CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x220_Msg)) == CAN_SIG_NORMAL)
{
if (Signal == 0U)
{
Gear.CutterHeadNum = Gear_L;
}
else if (Signal == 1U)
{
Gear.CutterHeadNum = Gear_H;
}
else
{
Gear.CutterHeadNum = 0U;
}
Gear.CutterheadValid = 0x1U;
}
}
else
{
Gear.CutterheadValid = 0x0U;
Gear.CutterHeadNum = 0U;
}
#endif
}
void Data_Gear_Service(void)
{
#if (PART_NUMBER == RMR42E_60)
uint8_t Signal1 = Get_CAN_Num_MMCU_TravelSpeedGear();
uint8_t Signal2 = Get_CAN_Num_MMCU_ParkingGearState();
if ((Common_Get_IG_Sts() == COMMON_POWER_ON) && (Get_CAN_Power_State() >= KEY_ACC) && (Get_CAN_Power_State() < CHRGEND) && (System_Indicator_CANFlag != 1))
{
if (Signal2 != 0x1)
{
if ((Signal1 == 0x1) || (Signal1 == 0x2))
{
Gear.GearNum = Signal1;
Gear.GearValid = 1U;
}
else
{
Gear.GearNum = Gear_OFF;
Gear.GearValid = 1U;
}
}
else
{
Gear.GearNum = Gear_P;
Gear.GearValid = 1U;
}
}
else
{
Gear.GearNum = Gear_OFF;
Gear.GearValid = 0U;
}
#else
uint8_t Signal = Get_CAN_CH0_ID_220_Sig_VCU_DrvSpdGear();
if ((Common_Get_IG_Sts() == COMMON_POWER_ON) && (System_Indicator_CANFlag != 1))
{
if (CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x220_Msg)) == CAN_SIG_NORMAL)
{
if (Signal == 0U)
{
Gear.GearNum = Gear_L;
Gear.GearValid = 1U;
}
else if(Signal == 1U)
{
Gear.GearNum = Gear_H;
Gear.GearValid = 1U;
}
}
else
{
Gear.GearNum = Gear_OFF;
Gear.GearValid = 0U;
}
}
else
{
Gear.GearNum = Gear_OFF;
Gear.GearValid = 0U;
}
#endif
}
/******************************************************************************
函数名:Get_Gear_Cutterhead_Value
功 能:获取刀盘挡位数函数
参 数:无
返回值:Gear.CutterHeadNum;
******************************************************************************
注 意:该函数必须每 ms被调用一次
******************************************************************************/
uint8_t Get_Gear_Cutterhead_Value(void)
{
return Gear.CutterHeadNum;
}
/******************************************************************************
函数名:Get_Gear_Cutterhead_Valid
功 能:获取刀盘挡位状态函数
参 数:无
返回值:Gear.CutterheadValid 0--不显示,1--常显,2--闪烁
******************************************************************************
注 意:该函数必须每 ms被调用一次
******************************************************************************/
uint8_t Get_Gear_Cutterhead_Valid(void)
{
return Gear.CutterheadValid;
}
/******************************************************************************
函数名:Get_Gear_Value
功 能:获取行驶挡位数函数
参 数:无
返回值:Gear.GearNum; 0--P挡
******************************************************************************
注 意:该函数必须每 ms被调用一次
******************************************************************************/
uint8_t Get_Gear_Value(void)
{
return Gear.GearNum;
}
/******************************************************************************
函数名:Get_Gear_Cutterhead_Valid
功 能:获取行驶挡位状态函数
参 数:无
返回值:Gear.CutterheadValid 0--不显示,1--常显,2--闪烁
******************************************************************************
注 意:该函数必须每 ms被调用一次
******************************************************************************/
uint8_t Get_Gear_Valid(void)
{
return Gear.GearValid;
}
#ifndef DATA_GEAR_H__
#define DATA_GEAR_H__
#include "Application.h"
#include "Components.h"
typedef struct //__attribute__((aligned(4)))
{
uint8_t CutterHeadNum; //刀盘挡位值
uint8_t CutterheadValid; //刀盘挡位有效状态
uint8_t GearNum; /*行驶挡位值*/
uint8_t GearValid; /*行驶挡位有效状态*/
}GearStruct_st_t;
extern void Data_Gear_KL30_Init(void);
extern void Data_Gear_KL15_Init(void);
extern void Data_Gear_Cutterhead_Service(void);
extern void Data_Gear_Service(void);
extern uint8_t Get_Gear_Cutterhead_Value(void);
extern uint8_t Get_Gear_Cutterhead_Valid(void);
extern uint8_t Get_Gear_Value(void);
extern uint8_t Get_Gear_Valid(void);
#endif
This diff is collapsed.
#ifndef DATA_TIME_H__
#define DATA_TIME_H__
#include "Application.h"
#include "Components.h"
#define SINGLE_MAX_TIME_SECOND 91800U /*单次计时最大显示时长,单位s*/
typedef struct //__attribute__((aligned(4)))
{
uint8_t SingleHour; /*单次计时小时*/
uint8_t SingleMin; /*单次计时分钟*/
uint8_t SingleValid; /*单次工作时间有效状态*/
uint32_t TotalHour; /*累计计时小时*/
uint32_t KeepTimeCount; /*单次工作时长自主计时,单位s*/
}DataTimeStruct_st_t;
extern void Data_Time_KL30_Init(void);
extern void Data_Time_KL15_Init(void);
extern void Data_Time_Single_Working_Hours(void);
extern void Data_Time_Total_Working_Hours(void);
extern void Data_CumulativeWorkHours_EEPROM_Write(void);
extern void Single_Working_Hours_Count(void);
extern uint8_t Get_SingleHour_Display(void);
extern uint8_t Get_SingleMin_Display(void);
extern uint8_t Get_Single_Working_Hours_Status(void);
extern uint32_t Get_Total_Working_Hours(void);
extern uint8_t Get_Clock_All_lenth(void);
#endif
This diff is collapsed.
#ifndef FAULT_CODE_H__
#define FAULT_CODE_H__
#include "Application.h"
#include "Components.h"
#define MAX_CODE_NUM 7U
#define CODE_DISPLAY_TIME 2000U
typedef struct //__attribute__((aligned(4)))
{
uint16_t FaultCodeArr[MAX_CODE_NUM]; //故障码列表
uint16_t FaultCodeDis; //当前显示故障
uint16_t DisTimeCount; /*故障码显示计时*/
uint8_t FaultCodeValid; /*故障码有效状态*/
uint8_t FaultCodeValidHistory; /*故障码有效状态*/
}FaultCodeStruct_st_t;
extern void Fault_Code_KL30_Init(void);
extern void Fault_Code_KL15_Init(void);
extern void Fault_Code_Service(void);
extern void Fault_Code_Display_Queue(uint8_t TaskTime);
extern uint16_t Get_FaultCode_Value(void);
extern uint8_t Get_FaultCode_Valid(void);
#endif
...@@ -36,42 +36,25 @@ typedef struct ...@@ -36,42 +36,25 @@ typedef struct
#define BATTERY_SEG_MAP_MAX (sizeof(batterySegMap)/sizeof(BatterySegMap_st_t)) #define BATTERY_SEG_MAP_MAX (sizeof(batterySegMap)/sizeof(BatterySegMap_st_t))
#define POWERON_SCAN_TIMER 3000ul #define POWERON_SCAN_TIMER 3000ul
extern uint8_t BUZZER_ON;
extern uint8_t Charge_OFF_Flag; extern uint8_t Charge_OFF_Flag;
extern uint8_t EEPROM_Cumulativee_clean; extern uint8_t EEPROM_Cumulativee_clean;
extern uint16_t poweroff_time; extern uint16_t poweroff_time;
void Gauge_Power_SOC_pull_Display(void); void Gauge_Power_SOC_pull_Display(void);
// void Gauge_Power_2_SOC_Display(void); // void Gauge_Power_2_SOC_Display(void);
void Gauge_Power_Display(void);
void Gauge_Battery_Display(void);
void Gauge_Clock_Display(void); void Gauge_Clock_Display(void);
// void Gauge_Gear_Display(void); // void Gauge_Gear_Display(void);
void Gauge_Clock_All_Display(void);
void Gauge_DrivingRange_Display(void);
//void Gauge_Gear_Display(void); //void Gauge_Gear_Display(void);
void Gauge_Frame_Display(void); void Gauge_Frame_Display(void);
void Gauge_MaintenanceMileage_Display(void);
void Gauge_EnergyRecoveryLevel_Display(void);
void Gauge_EleDial_AllSOC_Display(void); void Gauge_EleDial_AllSOC_Display(void);
void Data_CumulativeWorkHours_EEPROM_Write(void);
void Gauge_Cutterhead_Gear_Display(void); void Gauge_Cutterhead_Gear_Display(void);
void Gauge_Gears_Display(void); void Gauge_Gears_Display(void);
void Gauge_KL30_Init(void);
void Gauge_KL15_Init(void);
void Gauge_Service(void); void Gauge_Service(void);
void Temp_Calc_Init(void);
void Temp_Calc_Send(void);
uint32_t Get_Temp_Calc(void);
void Gauge_CAN_setup_Service(void); void Gauge_CAN_setup_Service(void);
void Checkself_LED_Display(void); void Checkself_LED_Display(void);
void BUZZER_Init(void);
uint8_t Get_Clock_All_lenth(void); uint8_t Get_Clock_All_lenth(void);
uint8_t Get_EleDial_AllSOC_lenth(void);
uint8_t Get_Clockonetime_lenth(void);
uint8_t Get_CAN_Num_SBMS_Soc_2_Grid(void); uint8_t Get_CAN_Num_SBMS_Soc_2_Grid(void);
uint8_t Get_CAN_Num_MBMS_Soc_1_Grid(void); uint8_t Get_CAN_Num_MBMS_Soc_1_Grid(void);
void TYW_Clear_Eeprom_Service(void); void TYW_Clear_Eeprom_Service(void);
......
...@@ -566,7 +566,11 @@ _Fun_Res SEG_SET_EleDial_1SOC(uint8_t m_Flag, uint8_t m_SEG) ...@@ -566,7 +566,11 @@ _Fun_Res SEG_SET_EleDial_1SOC(uint8_t m_Flag, uint8_t m_SEG)
_Fun_Res m_Res; _Fun_Res m_Res;
uint8_t Num; uint8_t Num;
uint8_t m8; uint8_t m8;
#if (PART_NUMBER == RMR42E_60)
if (((m_Flag == 1u) && (CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x18200A20_Msg)) == CAN_SIG_NORMAL)) || (checkself_seg_Flag == 1)) if (((m_Flag == 1u) && (CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x18200A20_Msg)) == CAN_SIG_NORMAL)) || (checkself_seg_Flag == 1))
#else
if (((m_Flag == 1u) && (CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x17A_Msg)) == CAN_SIG_NORMAL)) || (checkself_seg_Flag == 1))
#endif
{ {
IC1_SEG136 = IC_SEG_GREY; IC1_SEG136 = IC_SEG_GREY;
IC1_SEG137 = IC_SEG_GREY; IC1_SEG137 = IC_SEG_GREY;
...@@ -655,6 +659,7 @@ _Fun_Res SEG_SET_EleDial_1SOC(uint8_t m_Flag, uint8_t m_SEG) ...@@ -655,6 +659,7 @@ _Fun_Res SEG_SET_EleDial_1SOC(uint8_t m_Flag, uint8_t m_SEG)
*/ */
_Fun_Res SEG_SET_EleDial_2SOC(uint8_t m_Flag, uint8_t m_SEG) _Fun_Res SEG_SET_EleDial_2SOC(uint8_t m_Flag, uint8_t m_SEG)
{ {
#if (PART_NUMBER == RMR42E_60)
_Fun_Res m_Res; _Fun_Res m_Res;
uint8_t Num; uint8_t Num;
uint8_t m8; uint8_t m8;
...@@ -736,6 +741,9 @@ _Fun_Res SEG_SET_EleDial_2SOC(uint8_t m_Flag, uint8_t m_SEG) ...@@ -736,6 +741,9 @@ _Fun_Res SEG_SET_EleDial_2SOC(uint8_t m_Flag, uint8_t m_SEG)
} }
return m_Res; return m_Res;
#else
return EX_OK;
#endif
} }
/**@brief 电量表盘2SOC显示函数 /**@brief 电量表盘2SOC显示函数
* @param[in] m_Flag 段与数字是否显示 -1 显示 -0 不显示 * @param[in] m_Flag 段与数字是否显示 -1 显示 -0 不显示
...@@ -2631,7 +2639,6 @@ void Check_SEG_Display(void) ...@@ -2631,7 +2639,6 @@ void Check_SEG_Display(void)
uint8_t Checkself_SEG_step = 0; uint8_t Checkself_SEG_step = 0;
uint8_t Checkself_SEG_step_count = 0; uint8_t Checkself_SEG_step_count = 0;
uint16_t Buzzer_time = 0;
void Checkself_Init(void) void Checkself_Init(void)
{ {
Checkself_SEG_step = 0; Checkself_SEG_step = 0;
......
...@@ -354,8 +354,8 @@ typedef struct ...@@ -354,8 +354,8 @@ typedef struct
uint8_t TMM_CounterClear; /*!< TMM counter TM Register clear conditon This parameter can be a value of @ref TMM_Counter_Clear_t */ uint8_t TMM_CounterClear; /*!< TMM counter TM Register clear conditon This parameter can be a value of @ref TMM_Counter_Clear_t */
uint8_t TMM_Combine_TransMode; /*!< TMM counter TM buffer Register transfer mode: 1buffer register copyed to general register when TM1 uint8_t TMM_Combine_TransMode; /*!< TMM counter TM buffer Register transfer mode: 1��buffer register copyed to general register when TM1
underflows 2buffer register copyed to general register when TM0 compare match to TMGRA0; it only used underflows 2��buffer register copyed to general register when TM0 compare match to TMGRA0; it only used
in complementary PWM mode This parameter can be a value of @ref TMM_Combine_TransMode_t */ in complementary PWM mode This parameter can be a value of @ref TMM_Combine_TransMode_t */
uint8_t TMM_Intp; /*!< Specifies the whether open the interrupt flag of Capture Compare Register TBGRA.TBGRB/TBGRC/TBGRD uint8_t TMM_Intp; /*!< Specifies the whether open the interrupt flag of Capture Compare Register TBGRA.TBGRB/TBGRC/TBGRD
...@@ -392,6 +392,7 @@ void TMM_Init(TMM_InitTypeDef *TMM_InitStruct); ...@@ -392,6 +392,7 @@ void TMM_Init(TMM_InitTypeDef *TMM_InitStruct);
void TMM1_Start(FunctionalState match_flag); void TMM1_Start(FunctionalState match_flag);
void TMM0_Start(FunctionalState match_flag); void TMM0_Start(FunctionalState match_flag);
void TMM0_Stop(void); void TMM0_Stop(void);
void TMM1_Stop(void);
void TMM_All_Start(void); void TMM_All_Start(void);
void TMM_All_Stop(void); void TMM_All_Stop(void);
FlagStatus TMM_GetFlagStatus(TMMSelect_TypeDef TMMx, uint8_t TMM_FLAG); FlagStatus TMM_GetFlagStatus(TMMSelect_TypeDef TMMx, uint8_t TMM_FLAG);
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment