7 Commits

Author SHA1 Message Date
c8b47e57ab 修改接收为kgf1和kgf2都接收转发 2026-04-19 14:07:42 +08:00
daa4fd6bd3 解决温度采集延时问题 2025-11-18 15:40:38 +08:00
4f4a1635ab 修改小延时直接用nop,单节点 2025-11-18 14:47:55 +08:00
4ed261893e 修改接收KGF1 2025-11-14 11:32:48 +08:00
e5fe7833e6 修改断开高压开关不休眠 2025-08-18 09:25:26 +08:00
b5f2f3bc5f 植树车适配旧版本采集模块 2025-08-05 07:53:48 +08:00
ad771ee812 修改适配6号车的KGF点位 2025-08-05 07:29:29 +08:00
14 changed files with 861 additions and 293 deletions

View File

@@ -2,6 +2,8 @@
"files.associations": {
"MAIN.C": "cpp",
"CAN.C": "cpp",
"temperature.C": "cpp"
"temperature.C": "cpp",
"IO.C": "cpp",
"PS.C": "cpp"
}
}

91
CAN.C
View File

@@ -283,6 +283,7 @@ void CAN_vInit(void)
CAN_vSetListCommand(0x010B0002); // MO11 for list 1
CAN_vSetListCommand(0x010C0002); // MO12 for list 1
CAN_vSetListCommand(0x010D0002); // MO13 for list 1
CAN_vSetListCommand(0x010E0002); // MO14 for list 1
/// -----------------------------------------------------------------------
/// Configuration of the CAN Message Objects 0 - 31:
@@ -776,8 +777,6 @@ void CAN_vInit(void)
/// - message object is used as receive object
/// - this message object is assigned to list 1 (node 0)
//--------------MOCTR11 = 0x00A00000---------------------------------------
CAN_vWriteCANAddress(CAN_MOCTR11); // Addressing MO11 control register
CAN_vWriteAMData(0x00A00000); // load MO11 control register
@@ -788,11 +787,11 @@ void CAN_vInit(void)
/// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1)
/// - extended 29-bit identifier
/// - identifier 29-bit: 0x15000004
/// - identifier 29-bit: 0x15000006
//--------------MOAR11 = 0xF5000004---------------------------------------
//--------------MOAR11 = 0xF5000006---------------------------------------
CAN_vWriteAMData(0xF5000004); // load MO11 arbitration register
CAN_vWriteAMData(0xF5000006); // load MO11 arbitration register
// CAN Address pointing to the CAN_MODATAH11
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
@@ -942,11 +941,11 @@ void CAN_vInit(void)
/// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1)
/// - extended 29-bit identifier
/// - identifier 29-bit: 0x14000001
/// - identifier 29-bit: 0x11000001
//--------------MOAR13 = 0xF4000001---------------------------------------
//--------------MOAR13 = 0xF1000001---------------------------------------
CAN_vWriteAMData(0xF4000001); // load MO13 arbitration register
CAN_vWriteAMData(0xF1000001); // load MO13 arbitration register
// CAN Address pointing to the CAN_MODATAH13
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
@@ -1004,7 +1003,81 @@ void CAN_vInit(void)
/// -----------------------------------------------------------------------
/// Configuration of Message Object 14:
/// -----------------------------------------------------------------------
/// - message object 14 is not valid
/// - message object 14 is valid
/// - message object is used as receive object
/// - this message object is assigned to list 1 (node 0)
//--------------MOCTR14 = 0x00A00000---------------------------------------
CAN_vWriteCANAddress(CAN_MOCTR14); // Addressing MO14 control register
CAN_vWriteAMData(0x00A00000); // load MO14 control register
// CAN Address pointing to the CAN_MOAR14
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1)
/// - extended 29-bit identifier
/// - identifier 29-bit: 0x15000004
//--------------MOAR14 = 0xF5000004---------------------------------------
CAN_vWriteAMData(0xF5000004); // load MO14 arbitration register
// CAN Address pointing to the CAN_MODATAH14
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MODATAH14 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO14 data register high
// CAN Address pointing to the CAN_MODATAL14
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MODATAL14 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO14 data register low
// CAN Address pointing to the CAN_MOAMR14
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - only accept receive frames with matching IDE bit
/// - acceptance mask 29-bit: 0x1FFFFFFF
//--------------CAN_MOAMR14 = 0x3FFFFFFF------------------------------------
CAN_vWriteAMData(0x3FFFFFFF); // load MO14 acceptance mask register
// CAN Address pointing to the CAN_MOIPR14
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - use message pending register 0 bit position 14
//--------------MOIPR14 = 0x00000E00---------------------------------------
CAN_vWriteAMData(0x00000E00); // load MO14 interrupt pointer register
// CAN Address pointing to the CAN_MOFGPR14
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MOFGPR14 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO14 FIFO/gateway pointer register
// CAN Address pointing to the CAN_MOFCR14
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - this object is a STANDARD MESSAGE OBJECT
/// - 8 valid data bytes
//--------------MOFCR14 = 0x08000000---------------------------------------
CAN_vWriteAMData(0x08000000); // load MO14 function control register
/// -----------------------------------------------------------------------
/// Configuration of Message Object 15:
/// -----------------------------------------------------------------------

File diff suppressed because one or more lines are too long

View File

@@ -17,8 +17,8 @@
</Extensions>
<DaveTm>
<dwLowDateTime>187610842</dwLowDateTime>
<dwHighDateTime>31157159</dwHighDateTime>
<dwLowDateTime>-1575929917</dwLowDateTime>
<dwHighDateTime>31246864</dwHighDateTime>
</DaveTm>
<Target>
@@ -320,7 +320,7 @@
<GroupNumber>2</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\User.c</PathWithFileName>

49
IO.C
View File

@@ -191,26 +191,19 @@ void IO_vInit(void)
/// - is used as general input
/// - pull-up device is assigned
/// P1.5:
/// - is used as general purpose output
/// - push/pull output is selected
/// - the pin status is low level
/// - pull-down device is assigned
/// - is used as general input
/// - pull-up device is assigned
/// P1.6:
/// - is used as general purpose output
/// - push/pull output is selected
/// - the pin status is low level
/// - pull device is disabled (tristate)
SFR_PAGE(_pp3, noSST); // switch to page 3
P1_OD = 0x00; // load open-drain register
SFR_PAGE(_pp1, noSST); // switch to page 1
P1_PUDSEL = 0xDF; // load pullup/pulldown select register
P1_PUDEN = 0xBF; // load pullup/pulldown enable register
SFR_PAGE(_pp0, noSST); // switch to page 0
P1_DIR = 0x60; // load direction register
P1_DIR = 0x40; // load direction register
/// -----------------------------------------------------------------------
/// Configuration of Port P2:
@@ -223,62 +216,50 @@ void IO_vInit(void)
/// P3.2:
/// - is used as general purpose output
/// - open drain output is selected
/// - the pin status is low level
/// - the pin status is high level
/// - pull-up device is assigned
/// P3.3:
/// - is used as general purpose output
/// - open drain output is selected
/// - the pin status is low level
/// - the pin status is high level
/// - pull-up device is assigned
/// P3.4:
/// - is used as general purpose output
/// - open drain output is selected
/// - the pin status is low level
/// - the pin status is high level
/// - pull-up device is assigned
/// P3.5:
/// - is used as general purpose output
/// - open drain output is selected
/// - the pin status is low level
/// - the pin status is high level
/// - pull-up device is assigned
/// P3.6:
/// - is used as general purpose output
/// - push/pull output is selected
/// - the pin status is low level
/// - pull-down device is assigned
/// P3.7:
/// - is used as general purpose output
/// - push/pull output is selected
/// - the pin status is low level
/// - pull-down device is assigned
/// - is used as general input
/// - pull-up device is assigned
SFR_PAGE(_pp3, noSST); // switch to page 3
P3_OD = 0x3C; // load open-drain register
SFR_PAGE(_pp1, noSST); // switch to page 1
P3_PUDSEL = 0x3F; // load pullup/pulldown select register
P3_PUDEN = 0xFC; // load pullup/pulldown enable register
P3_PUDSEL = 0xFF; // load pullup/pulldown select register
P3_PUDEN = 0x7C; // load pullup/pulldown enable register
SFR_PAGE(_pp0, noSST); // switch to page 0
P3_DIR = 0xFC; // load direction register
P3_DIR = 0x3C; // load direction register
P3_DATA = 0x3C; // load data output register
/// -----------------------------------------------------------------------
/// Configuration of Port P4:
/// -----------------------------------------------------------------------
/// P4.3:
/// - is used as general purpose output
/// - push/pull output is selected
/// - the pin status is low level
/// - pull-down device is assigned
/// - is used as general input
/// - pull-up device is assigned
SFR_PAGE(_pp1, noSST); // switch to page 1
P4_PUDSEL = 0x00; // load pullup/pulldown select register
P4_PUDEN = 0x08; // load pullup/pulldown enable register
SFR_PAGE(_pp0, noSST); // switch to page 0
P4_DIR = 0x08; // load direction register
// USER CODE BEGIN (IO_Init,3)

29
MAIN.C
View File

@@ -235,37 +235,34 @@ void main(void)
// SetConfig(1,CFG_MPS_Single,CFG_Repeatbility_High);
RomNum = Search_ROM(romid); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>оƬ<D0BE><C6AC><EFBFBD><EFBFBD>ROM ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>romid<69><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬ<D0BE><C6AC><EFBFBD><EFBFBD>
// RomNum = Search_ROM(romid); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>оƬ<D0BE><C6AC><EFBFBD><EFBFBD>ROM ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>romid<69><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬ<D0BE><C6AC><EFBFBD><EFBFBD>
// if(1 == power_state)//<2F><><EFBFBD><EFBFBD>ѲŸ<D1B2><C5B8><EFBFBD>ʱ<EFBFBD><CAB1>
// {
bm8563SetTime(&inittime);//20250802 <20><>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊʱ<CEAA><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// }
//E3<45><33>ʼ<EFBFBD><CABC> 20251117
un_inf_can_kgf_output1.bit_data.KGF13 = 0x01; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
un_inf_can_kgf_output2.bit_data.KGF01 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ1
un_inf_can_kgf_output2.bit_data.KGF02 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ2
un_inf_can_kgf_output2.bit_data.KGF03 = 0x01; // ң<><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
un_inf_can_kgf_output2.bit_data.KGF04 = 0x01; // E3<45><33>Դ
un_inf_can_kgf_output2.bit_data.KGF05 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ1
un_inf_can_kgf_output2.bit_data.KGF06 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ2
un_inf_can_kgf_output2.bit_data.KGF15 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ3
un_inf_can_kgf_output2.bit_data.KGF16 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ4
while(1)
{
// USER CODE BEGIN (MAIN_Main,4)
// for(j=0;j<200;j++){for(i=0;i<133;i++)WDT_vRefresh();}
// tmp[3] = (ubyte)CntCan_1;
// tmp[2] = (ubyte)(CntCan_1>>8);
// SwSample();
CanRXTX();
CanErrorProcess();
WDT_vRefresh();
// LedDr();
BootMain();
// tmp[1] = (ubyte)CntCan_1;
// tmp[0] = (ubyte)(CntCan_1>>8);
// CAN_vLoadData(0x2, (ulong *)(tmp)); // Add this Line
// CAN_vTransmit(2);
// for(j=0;j<200;j++){for(i=0;i<133;i++)WDT_vRefresh();}
// USER CODE END
}
} // End of function main

View File

@@ -133,9 +133,10 @@ void SHINT_vInit(void)
IEN0 |= 0x20; // load interrupt enable register 0
/// - Timer21 Interrupt is Selected
IEN1 |= 0x00; // load interrupt enable register 1
IEN1 |= 0x04; // load interrupt enable register 1
// USER CODE BEGIN (SHINT_Init,3)
@@ -306,6 +307,86 @@ RTCProcess();
} // End of function SHINT_viXINTR5Isr
//****************************************************************************
// @Function void SHINT_viXINTR8Isr(void)
//
//----------------------------------------------------------------------------
// @Description This is the service routine for the shared interrupt node
// XINTR8. XINTR8 ISR Node is shared by External Interrupt
// 2,Timer 21,CORDIC,UART1,UART1 Fractional Divider(BRG
// Interrupt), and MDU[1:0]. Depending on the selected module
// interrupt it is called.
// EXT2 - It is called for the External interrupt 2.
// T21 - Depending on the selected operating mode it is called
// when TF2 is set by an overflow or underflow of the timer 21
// register or when EXF2 is set by a negative transition on
// T2EX.
// UART1 - It is called after the BRG timer overflows and sets
// the NDOV bit.
// It is called after each transmission (flag TI_1 set) or
// reception (flag RI_1 set) of a data unit.
// Please note that you have to add application specific code
// to this function.
//
//----------------------------------------------------------------------------
// @Returnvalue none
//
//----------------------------------------------------------------------------
// @Parameters None
//
//----------------------------------------------------------------------------
// @Date 2025/11/17
//
//****************************************************************************
// You have two choices for interrupt type select in Project Settings Page
// under Global Settings Section.
// If you select CHOICE 1 then ISR will be generated with push and pop.
// If you select CHOICE 2 then ISR will be generated without push and pop.
// Default choice is CHOICE 2.
// Current selection is CHOICE 2
// USER CODE BEGIN (SHINT_XINTR8Isr,1)
// USER CODE END
void SHINT_viXINTR8Isr(void) interrupt XINTR8INT
{
// USER CODE BEGIN (SHINT_XINTR8Isr,2)
// USER CODE END
EA = 0; // disable global interrupt
_push_(SYSCON0); // push the current RMAP
SET_RMAP(); // sets RMAP
// Timer 21 interrupt handling section...
if (TF2)
{
// a timer 21 overflow has occured
TF2 = 0;
// USER CODE BEGIN (SHINT_XINTR8Isr,4)
// USER CODE END
}
// USER CODE BEGIN (SHINT_XINTR8Isr,9)
// USER CODE END
_pop_(SYSCON0); // restore the old RMAP
EA = 1; // enable global interrupt
} // End of function SHINT_viXINTR8Isr
// USER CODE BEGIN (SHARED_INT_General,10)
// USER CODE END

View File

@@ -96,6 +96,8 @@ void SHINT_vInit(void);
#define XINTR5INT 5
#define XINTR8INT 8
// USER CODE BEGIN (SHARED_INT_Header,9)
// USER CODE END

181
T21.C Normal file
View File

@@ -0,0 +1,181 @@
//****************************************************************************
// @Module Timer 21
// @Filename T21.C
// @Project CL2.0.dav
//----------------------------------------------------------------------------
// @Controller Infineon XC886CLM-8FF
//
// @Compiler Keil
//
// @Codegenerator 1.3
//
// @Description: This file contains functions that use the T21 module.
//
//----------------------------------------------------------------------------
// @Date 2025/11/17 18:48:53
//
//****************************************************************************
// USER CODE BEGIN (T21_General,1)
// USER CODE END
//****************************************************************************
// @Project Includes
//****************************************************************************
#include "MAIN.H"
// USER CODE BEGIN (T21_General,2)
// USER CODE END
//****************************************************************************
// @Macros
//****************************************************************************
// USER CODE BEGIN (T21_General,3)
// USER CODE END
//****************************************************************************
// @Defines
//****************************************************************************
// USER CODE BEGIN (T21_General,4)
// USER CODE END
//****************************************************************************
// @Typedefs
//****************************************************************************
// USER CODE BEGIN (T21_General,5)
// USER CODE END
//****************************************************************************
// @Imported Global Variables
//****************************************************************************
// USER CODE BEGIN (T21_General,6)
// USER CODE END
//****************************************************************************
// @Global Variables
//****************************************************************************
// USER CODE BEGIN (T21_General,7)
// USER CODE END
//****************************************************************************
// @External Prototypes
//****************************************************************************
// USER CODE BEGIN (T21_General,8)
// USER CODE END
//****************************************************************************
// @Prototypes Of Local Functions
//****************************************************************************
// USER CODE BEGIN (T21_General,9)
// USER CODE END
//****************************************************************************
// @Function void T21_vInit(void)
//
//----------------------------------------------------------------------------
// @Description This is the initialization function of the Timer 21
// function library. It is assumed that the SFRs used by this
// library are in their reset state.
//
// The following SFRs and SFR fields will be initialized:
// T21_RC2H/RC2L - reload/capture timer 21 register
// T21_T2H/T2L - timer 21 register
// EX2 - timer 21 interrupt enable
// T21_T2MOD - timer 21 mode register
// CP/RL2 - Capture/Reload select
// EXEN2 - External enable control
// TR2 - Timer21 run control
//
//----------------------------------------------------------------------------
// @Returnvalue None
//
//----------------------------------------------------------------------------
// @Parameters None
//
//----------------------------------------------------------------------------
// @Date 2025/11/17
//
//****************************************************************************
// USER CODE BEGIN (T21_Init,1)
// USER CODE END
void T21_vInit(void)
{
// USER CODE BEGIN (T21_Init,2)
// USER CODE END
// -----------------------------------------------------------------------
// Operating Mode
// -----------------------------------------------------------------------
/// 16-bit timer function with automatic reload when timer 21 overflows
/// Prescaler enabled - input clock = fPCLK
/// the timer 21 resolution is .042 ?s
/// the timer 21 overflow is 1.000 ?s
/// timer 21 interrupt: enabled
/// timer 21 will be started
// -----------------------------------------------------------------------
// Register Initialization
// -----------------------------------------------------------------------
SET_RMAP();
T21_T2L = 0xE8; // load timer 21 register, low byte
T21_T2H = 0xFF; // load timer 21 register, high byte
T21_RC2L = 0xE8; // load timer 21 reload/capture register,
// low byte
T21_RC2H = 0xFF; // load timer 21 reload/capture register,
// high byte
T21_T2MOD = 0x10; // load timer 21 mode register
/// Timer 21 Interrupt enable bit is set in SHINT_vInit() function
// USER CODE BEGIN (T21_Init,3)
// USER CODE END
TR2 = 1; // start timer
RESET_RMAP();
} // End of function T21_vInit
// USER CODE BEGIN (T21_General,10)
// USER CODE END

104
T21.H Normal file
View File

@@ -0,0 +1,104 @@
//****************************************************************************
// @Module Timer 21
// @Filename T21.H
// @Project CL2.0.dav
//----------------------------------------------------------------------------
// @Controller Infineon XC886CLM-8FF
//
// @Compiler Keil
//
// @Codegenerator 1.3
//
// @Description: This file contains all function prototypes and macros for
// the T21 module.
//
//----------------------------------------------------------------------------
// @Date 2025/11/17 18:48:53
//
//****************************************************************************
// USER CODE BEGIN (T21_Header,1)
// USER CODE END
#ifndef _T21_H_
#define _T21_H_
//****************************************************************************
// @Project Includes
//****************************************************************************
// USER CODE BEGIN (T21_Header,2)
// USER CODE END
//****************************************************************************
// @Macros
//****************************************************************************
// USER CODE BEGIN (T21_Header,3)
// USER CODE END
//****************************************************************************
// @Defines
//****************************************************************************
// USER CODE BEGIN (T21_Header,4)
// USER CODE END
//****************************************************************************
// @Typedefs
//****************************************************************************
// USER CODE BEGIN (T21_Header,5)
// USER CODE END
//****************************************************************************
// @Imported Global Variables
//****************************************************************************
// USER CODE BEGIN (T21_Header,6)
// USER CODE END
//****************************************************************************
// @Global Variables
//****************************************************************************
// USER CODE BEGIN (T21_Header,7)
// USER CODE END
//****************************************************************************
// @Prototypes Of Global Functions
//****************************************************************************
void T21_vInit(void);
// USER CODE BEGIN (T21_Header,8)
// USER CODE END
//****************************************************************************
// @Interrupt Vectors
//****************************************************************************
// Shared interrupt vector definitions are defined in SHARED_INT.H
// USER CODE BEGIN (T21_Header,9)
// USER CODE END
#endif // ifndef _T21_H_

244
User.c
View File

@@ -2,14 +2,14 @@
#include "RTC.H"
#include "temperature.H"
#include <string.h>
//can<EFBFBD><EFBFBD>Ϣ
//can信息
UnInfCan UnInfCan_1 = {0};
UnSwOut UnSwOut_1 = {0};
//CAN<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//CAN发送周期
uword CntCan_1 = 0;
bit FlgCan_1 = 0;
//<EFBFBD><EFBFBD>һ<EFBFBD>βɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָʾ
//第一次采集到有效数据指示
bit FlgOneTime = 0;
uword RgCanPerid = 1000;
@@ -17,41 +17,45 @@ uword RgCanPerid = 1000;
UnTimeOutput sleeptime = {0};
UnTimeOutput waketime = {0};
UnTimeOutput currenttime = {0};
UnTimeOutput inittime = {00,1,1,0,0,0,0,0};// Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2000<30>꣬1<EAA3AC><31>1<EFBFBD><31> <20><><EFBFBD>գ<EFBFBD>0<EFBFBD><30>0<EFBFBD><30>00
UnTimeOutput un_time_output1 = {0};//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>趨ʱ<EFBFBD><EFBFBD>
UnInfCanKGFOutput un_inf_can_kgf_output2 = {0};//kgf<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UnInfCanKGFOutput un_inf_can_kgf_output1 = {0};//kgf<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UnTimeOutput inittime = {00,1,1,0,0,0,0,0};// 默认设置 2000年1月1日 周日0000
UnTimeOutput un_time_output1 = {0};//接收设定时间
UnInfCanKGFOutput un_inf_can_kgf_output2 = {0};//kgf输出
UnInfCanKGFOutput un_inf_can_kgf_output1 = {0};//kgf输出
UnInfCanKGFOutput un_inf_can_kgf_output3 = {0};//kgf或结果
UnInfCanKGFOutput un_inf_can_kgf_output4 = {0};//kgf或结果
UnSampleKgfCommand un_sample_kgf_command = {0};//kgf转发
UnTimeOutput waketimelast = {0};
UnTimeOutput wake_time_10min = {0};
SystemState sleepstate = STATE_INIT;
//PWM 20181227
ubyte PwmH[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
ubyte powerstate = 0;//<EFBFBD><EFBFBD>Դ״̬
ubyte powerstate = 0;//电源状态
ubyte vcu_can_cnt = 0; // ֡<EFBFBD>ۼ<EFBFBD><EFBFBD><EFBFBD>
ubyte vcu_can_last = 0; // ֡<EFBFBD>ۼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥֵ
bool flg_wake_ecu = 0; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD>־
bool flg_KGF = 0;//KGF<EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD>־
ubyte vcu_can_cnt = 0; // 帧累加器
ubyte vcu_can_last = 0; // 帧累加器过去值
bool flg_wake_ecu = 0; //控制器唤醒标志
bool flg_KGF = 0;//KGF唤醒标志
ubyte can_error_cnt = 0;
ubyte can_error_flg = 0;
//-----------------------------------------------------------------------
//RTC<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
//RTC定时器
//-----------------------------------------------------------------------
void RTCProcess(void)
{
//************************************************************************
//////CAN<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//////CAN发送周期
if(FlgCan_1){CntCan_1++;if(CntCan_1 >= RgCanPerid){FlgCan_1=0; CntCan_1=0;}}else{CntCan_1=0;}
//************************************************************************
}
//can<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//can错误处理
void CanErrorProcess(void)
{
ubyte ubNSRL;
@@ -91,10 +95,10 @@ void CanErrorProcess(void)
void CanTransmit(void)
{
//----------------- --------
// װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(1 == flg_KGF)//<EFBFBD>ȴ<EFBFBD>KGF<EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD>ٷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 装载数据
if(1 == flg_KGF)//等待KGF唤醒后再发送数据
{
CAN_waitTransmit(DF_SwTx);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD>һ֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᶪ֡
CAN_waitTransmit(DF_SwTx);//发送前等待上一帧发送完毕,这样不会丢帧
CAN_vLoadData(DF_SwTx, (ulong *)(&UnInfCan_1.ArrData.Arr[0][0]));
CAN_vTransmit(DF_SwTx);
}
@@ -112,12 +116,12 @@ void canSendTo(ubyte index,ubyte *buf)
CanTransmitbuf[4] = buf[6];
CanTransmitbuf[5] = buf[7];
CAN_waitTransmit(index);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD>һ֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᶪ֡
CAN_vLoadData(index, (ulong *)CanTransmitbuf);// װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CAN_waitTransmit(index);//发送前等待上一帧发送完毕,这样不会丢帧
CAN_vLoadData(index, (ulong *)CanTransmitbuf);// 装载数据
CAN_vTransmit(index);
}
//CAN<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ֡
//CAN发送一帧
void CanTX(void)
{
//-----------------------------------
@@ -133,7 +137,7 @@ void CanTX(void)
CanTransmit();
}
//<EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//休眠处理函数
//------------------------------------------------------------------
void SystemStateMachine(SystemState *RgSTT)
{
@@ -142,9 +146,9 @@ void SystemStateMachine(SystemState *RgSTT)
{
//-------------------------------------------
case STATE_INIT:
if(NORMAL == flg_wake_ecu)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(NORMAL == flg_wake_ecu)//控制器唤醒
{
bm8563SetAlarm(&waketime); //<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
bm8563SetAlarm(&waketime); //设置唤醒时间
memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput));
*RgSTT = STATE_ON;
}
@@ -155,52 +159,52 @@ void SystemStateMachine(SystemState *RgSTT)
break;
case STATE_ON:
if( (bm8563CheckAlarmFlag()) || (OFF == WAKE_UP_PIN) )//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>عر<D8B9>
if(bm8563CheckAlarmFlag())//唤醒时间到以及高压开关关闭
{
bm8563SetTime(&inittime);//20250802 <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊʱ<CEAA><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bm8563SetAlarm(&sleeptime);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
KGF_PIN = 0; //KGF<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CAN_PIN = 1; //canоƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BATTERY_PIN = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*RgSTT = STATE_INIT; // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>״̬
PS_vSetPowerDown();//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bm8563SetTime(&inittime);//20250802 初始化时间 解决因为时间不对导致无法休眠问题
bm8563SetAlarm(&sleeptime);//设置休眠时间
KGF_PIN = 0; //KGF休眠
CAN_PIN = 1; //can芯片休眠
BATTERY_PIN = 0;//电池休眠
*RgSTT = STATE_INIT; // 初始化状态
PS_vSetPowerDown();//休眠
}
else if(0 != memcmp(&waketimelast,&waketime,sizeof(UnTimeOutput)))//<EFBFBD>Ƚ<EFBFBD>ֵ<EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else if(0 != memcmp(&waketimelast,&waketime,sizeof(UnTimeOutput)))//比较值是否一样,不一样的话立马更新
{
memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput));
bm8563SetAlarm(&waketime);
*RgSTT = STATE_ON; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*RgSTT = STATE_ON; // 保持状态(唤醒后由中断处理)
}
else if( (POWER_WORKING == powerstate) || (POWER_EMERGENCY == powerstate) )//<EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><EFBFBD><EFBFBD>״̬
else if( (POWER_WORKING == powerstate) || (POWER_EMERGENCY == powerstate) )//等于工作状态
{
*RgSTT = STATE_ON2; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>STATE_ON2
*RgSTT = STATE_ON2; // 进入STATE_ON2
}
else
{
*RgSTT = STATE_ON; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*RgSTT = STATE_ON; // 保持
}
break;
case STATE_ON2:
if( (WAKE_UP_PIN == OFF) || (POWER_STANDBY == powerstate) )//<EFBFBD>ܿ<EFBFBD><EFBFBD>عرջ<EFBFBD><EFBFBD>߽<EFBFBD><EFBFBD><EFBFBD>standy
if( POWER_STANDBY == powerstate )//总开关关闭或者进入standy
{
bm8563SetTime(&inittime);//20250802 <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊʱ<CEAA><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bm8563SetTime(&inittime);//20250802 初始化时间 解决因为时间不对导致无法休眠问题
bm8563SetAlarm(&sleeptime);
KGF_PIN = 0; //KGF<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CAN_PIN = 1; //canоƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BATTERY_PIN = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*RgSTT = STATE_INIT; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PS_vSetPowerDown();//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
KGF_PIN = 0; //KGF休眠
CAN_PIN = 1; //can芯片休眠
BATTERY_PIN = 0;//电池休眠
*RgSTT = STATE_INIT; // 保持状态(唤醒后由中断处理)
PS_vSetPowerDown();//休眠
}
else
{
*RgSTT = STATE_ON2; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*RgSTT = STATE_ON2; // 保持
}
break;
default:;
}
}
//CAN<EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><EFBFBD><EFBFBD>
//CAN发送接收
void CanRXTX(void)
{
stCAN_SWObj StrCanRx = {0};
@@ -230,7 +234,7 @@ void CanRXTX(void)
}
if(CAN_ubNewData(DF_SwRxKGF2))//<EFBFBD>ȴ<EFBFBD>KGF<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(CAN_ubNewData(DF_SwRxKGF2))//等待KGF唤醒
{
CAN_vGetMsgObj(DF_SwRxKGF2, &StrCanRx);
@@ -241,6 +245,24 @@ void CanRXTX(void)
}
if(CAN_ubNewData(DF_SwZFKGF1))//接受E3的转发控制
{
CAN_vGetMsgObj(DF_SwZFKGF1, &StrCanRx);
un_sample_kgf_command.arr[2] = StrCanRx.ulDATAL.ubDB[0];
un_sample_kgf_command.arr[3] = StrCanRx.ulDATAL.ubDB[1];
un_sample_kgf_command.arr[0] = StrCanRx.ulDATAL.ubDB[2];
un_sample_kgf_command.arr[1] = StrCanRx.ulDATAL.ubDB[3];
un_sample_kgf_command.arr[6] = StrCanRx.ulDATAH.ubDB[0];
un_sample_kgf_command.arr[7] = StrCanRx.ulDATAH.ubDB[1];
un_sample_kgf_command.arr[4] = StrCanRx.ulDATAH.ubDB[2];
un_sample_kgf_command.arr[5] = StrCanRx.ulDATAH.ubDB[3];
CAN_vReleaseObj(DF_SwZFKGF1);
}
//----------------------------------------------------------
@@ -260,25 +282,25 @@ void CanRXTX(void)
CAN_vReleaseObj(DF_SwRx);
vcu_can_cnt ++;//<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>
vcu_can_cnt ++;//节点在线检测累加
powerstate = UnInfCan_1.ArrData.ArrRX[0][4];//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ״̬
powerstate = UnInfCan_1.ArrData.ArrRX[0][4];//整车电源状态
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
TimeTemp = UnInfCan_1.ArrData.ArrRX[0][0] + ((ulong)UnInfCan_1.ArrData.ArrRX[0][1] << 8) ;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
if(TimeTemp >= MAX_TIME)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>30<EFBFBD><EFBFBD>
//设定休眠时间
TimeTemp = UnInfCan_1.ArrData.ArrRX[0][0] + ((ulong)UnInfCan_1.ArrData.ArrRX[0][1] << 8) ;//唤醒时间
if(TimeTemp >= MAX_TIME)//最大限制值30天
{
TimeTemp = MAX_TIME;
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Сʱ
// 分钟 → 小时
HoursTemp = TimeTemp / 60;
sleeptime.bit_data.minute = TimeTemp % 60;
// Сʱ <20><> <20><>
// 小时 → 天
DaysTemp = HoursTemp / 24;
sleeptime.bit_data.hour = HoursTemp % 24;
if(DaysTemp >= 30)//<EFBFBD>ճ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
if(DaysTemp >= 30)//日超过范围
{
sleeptime.bit_data.day = 30;
}
@@ -287,21 +309,21 @@ void CanRXTX(void)
sleeptime.bit_data.day = DaysTemp;
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
TimeTemp = UnInfCan_1.ArrData.ArrRX[0][2] + ((ulong)UnInfCan_1.ArrData.ArrRX[0][3] << 8);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
if(TimeTemp > MAX_TIME)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>30<EFBFBD><EFBFBD>
//设定唤醒时间
TimeTemp = UnInfCan_1.ArrData.ArrRX[0][2] + ((ulong)UnInfCan_1.ArrData.ArrRX[0][3] << 8);//唤醒时间
if(TimeTemp > MAX_TIME)//最大限制值30天
{
TimeTemp = MAX_TIME;
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Сʱ
// 分钟 → 小时
HoursTemp = TimeTemp / 60;
waketime.bit_data.minute = TimeTemp % 60;
// Сʱ <20><> <20><>
// 小时 → 天
DaysTemp = HoursTemp / 24;
waketime.bit_data.hour = HoursTemp % 24;
if(DaysTemp >= 30)//<EFBFBD>ճ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
if(DaysTemp >= 30)//日超过范围
{
waketime.bit_data.day = 30;
}
@@ -311,78 +333,98 @@ void CanRXTX(void)
}
}
//<EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><EFBFBD><EFBFBD>
SystemStateMachine(&sleepstate);
//休眠处理
SystemStateMachine(&sleepstate); //
//1000ms<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ֡
//1000ms发送一帧
if(!FlgCan_1)
{
FlgCan_1 = 1;
bm8563GetTime(&currenttime);//1s<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
bm8563GetTime(&currenttime);//1s更新一次时钟
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>ַ0x03<EFBFBD><EFBFBD>
// 读取分钟(地址0x03
UnSwSample_1.arr[4] = (BM8563_ReadReg(BM8563_ALARM_MIN));
// <EFBFBD><EFBFBD>ȡСʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ0x04<EFBFBD><EFBFBD>
UnSwSample_1.arr[2] = (BM8563_ReadReg(BM8563_ALARM_HOUR)); // 24Сʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bit6-7
// 读取小时(地址0x04
UnSwSample_1.arr[2] = (BM8563_ReadReg(BM8563_ALARM_HOUR)); // 24小时制需屏蔽Bit6-7
// <EFBFBD><EFBFBD>ȡ<EFBFBD>գ<EFBFBD><EFBFBD><EFBFBD>ַ0x05<EFBFBD><EFBFBD>
UnSwSample_1.arr[1] = (BM8563_ReadReg(BM8563_ALARM_DAY)); // <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><EFBFBD><EFBFBD>λ
// 读取日(地址0x05
UnSwSample_1.arr[1] = (BM8563_ReadReg(BM8563_ALARM_DAY)); // 屏蔽控制位
// <EFBFBD><EFBFBD>ȡ<EFBFBD>գ<EFBFBD><EFBFBD><EFBFBD>ַ0x05<EFBFBD><EFBFBD>
UnSwSample_1.arr[5] = (BM8563_ReadReg(BM8563_ALARM_DAY)); // <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><EFBFBD><EFBFBD>λ
// 读取日(地址0x05
UnSwSample_1.arr[5] = (BM8563_ReadReg(BM8563_ALARM_DAY)); // 屏蔽控制位
// <EFBFBD><EFBFBD>ȡ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD>ַ0x06<EFBFBD><EFBFBD>BM8563<EFBFBD><EFBFBD>ֵΪ0x01-0x07<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BCDת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UnSwSample_1.arr[3] = BM8563_ReadReg(BM8563_ALARM_WEEK); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 读取周(地址0x06BM8563周值为0x01-0x07无需BCD转换
UnSwSample_1.arr[3] = BM8563_ReadReg(BM8563_ALARM_WEEK); // 仅保留低3位
CanTX();
if(vcu_can_cnt == vcu_can_last)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(vcu_can_cnt == vcu_can_last)//数据一样表示故障
{
flg_wake_ecu = FAULT;
un_inf_can_kgf_output2.bit_data.KGF01 = 0x01;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
un_inf_can_kgf_output2.bit_data.KGF02 = 0x01;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// un_inf_can_kgf_output2.bit_data.KGF15 = 0x01;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// un_inf_can_kgf_output2.bit_data.KGF16 = 0x01;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
un_inf_can_kgf_output2.bit_data.KGF03 = 0x01;// ң<><D2A3><EFBFBD><EFBFBD>
un_inf_can_kgf_output2.bit_data.KGF05 = 0x01;// <20><><EFBFBD><EFBFBD><E7BDBB><EFBFBD><EFBFBD>
un_inf_can_kgf_output2.bit_data.KGF06 = 0x01;// <20><><EFBFBD><EFBFBD><E7BDBB><EFBFBD><EFBFBD>
un_inf_can_kgf_output1.bit_data.KGF09 = 0x01;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
flg_wake_ecu = FAULT;
un_inf_can_kgf_output2.bit_data.KGF04 = 0x01;//KGF20<EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
un_inf_can_kgf_output1.bit_data.KGF13 = 0x01;// <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
if(1 == flg_KGF)//<2F>ȴ<EFBFBD>KGF<47><46><EFBFBD>Ѻ<EFBFBD><D1BA>ٷ<EFBFBD><D9B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(1 == flg_KGF)//等待KGF唤醒后再发送数据
{
canSendTo(DF_SwTxKGF2,(ubyte *)&un_inf_can_kgf_output2.arr[0]);
canSendTo(DF_SwTxKGF1,(ubyte *)&un_inf_can_kgf_output1.arr[0]);
un_inf_can_kgf_output3.bit_data.KGF01 = un_sample_kgf_command.bit_data.KGF01_CH01_Reserve | un_inf_can_kgf_output1.bit_data.KGF01;
un_inf_can_kgf_output3.bit_data.KGF02 = un_sample_kgf_command.bit_data.KGF01_CH02_Reserve | un_inf_can_kgf_output1.bit_data.KGF02;
un_inf_can_kgf_output3.bit_data.KGF03 = un_sample_kgf_command.bit_data.KGF01_CH03_Reserve | un_inf_can_kgf_output1.bit_data.KGF03;
un_inf_can_kgf_output3.bit_data.KGF04 = un_sample_kgf_command.bit_data.KGF01_PrechargeRelay | un_inf_can_kgf_output1.bit_data.KGF04;
un_inf_can_kgf_output3.bit_data.KGF05 = un_sample_kgf_command.bit_data.KGF01_CH05_Reserve | un_inf_can_kgf_output1.bit_data.KGF05;
un_inf_can_kgf_output3.bit_data.KGF06 = un_sample_kgf_command.bit_data.KGF01_CH06_Reserve | un_inf_can_kgf_output1.bit_data.KGF06;
un_inf_can_kgf_output3.bit_data.KGF07 = un_sample_kgf_command.bit_data.KGF01_HighVoltageRelayA | un_inf_can_kgf_output1.bit_data.KGF07;
un_inf_can_kgf_output3.bit_data.KGF08 = un_sample_kgf_command.bit_data.KGF01_HighVoltageRelayB | un_inf_can_kgf_output1.bit_data.KGF08;
un_inf_can_kgf_output3.bit_data.KGF09 = un_sample_kgf_command.bit_data.KGF01_CH09_Reserve | un_inf_can_kgf_output1.bit_data.KGF09;
un_inf_can_kgf_output3.bit_data.KGF10 = un_sample_kgf_command.bit_data.KGF01_CH10_Reserve | un_inf_can_kgf_output1.bit_data.KGF10;
un_inf_can_kgf_output3.bit_data.KGF11 = un_sample_kgf_command.bit_data.KGF01_LowVoltageRelayA | un_inf_can_kgf_output1.bit_data.KGF11;
un_inf_can_kgf_output3.bit_data.KGF12 = un_sample_kgf_command.bit_data.KGF01_LowVoltageRelayB | un_inf_can_kgf_output1.bit_data.KGF12;
un_inf_can_kgf_output3.bit_data.KGF13 = un_sample_kgf_command.bit_data.KGF01_LowVoltageCharge | un_inf_can_kgf_output1.bit_data.KGF13;
un_inf_can_kgf_output3.bit_data.KGF14 = un_sample_kgf_command.bit_data.KGF01_CH14_Reserve | un_inf_can_kgf_output1.bit_data.KGF14;
un_inf_can_kgf_output3.bit_data.KGF15 = un_sample_kgf_command.bit_data.KGF01_CH15_Reserve | un_inf_can_kgf_output1.bit_data.KGF15;
un_inf_can_kgf_output3.bit_data.KGF16 = un_sample_kgf_command.bit_data.KGF01_CH16_Reserve | un_inf_can_kgf_output1.bit_data.KGF16;
un_inf_can_kgf_output4.bit_data.KGF01 = un_sample_kgf_command.bit_data.KGF02_ComputerPowerA | un_inf_can_kgf_output2.bit_data.KGF01;
un_inf_can_kgf_output4.bit_data.KGF02 = un_sample_kgf_command.bit_data.KGF02_ComputerPowerB | un_inf_can_kgf_output2.bit_data.KGF02;
un_inf_can_kgf_output4.bit_data.KGF03 = un_sample_kgf_command.bit_data.KGF02_RemotePower | un_inf_can_kgf_output2.bit_data.KGF03;
un_inf_can_kgf_output4.bit_data.KGF04 = un_sample_kgf_command.bit_data.KGF02_VcuE3Power | un_inf_can_kgf_output2.bit_data.KGF04;
un_inf_can_kgf_output4.bit_data.KGF05 = un_sample_kgf_command.bit_data.KGF02_NetworkSwitchPowerA | un_inf_can_kgf_output2.bit_data.KGF05;
un_inf_can_kgf_output4.bit_data.KGF06 = un_sample_kgf_command.bit_data.KGF02_NetworkSwitchPowerB | un_inf_can_kgf_output2.bit_data.KGF06;
un_inf_can_kgf_output4.bit_data.KGF07 = un_sample_kgf_command.bit_data.KGF02_LeftHeadlightA | un_inf_can_kgf_output2.bit_data.KGF07;
un_inf_can_kgf_output4.bit_data.KGF08 = un_sample_kgf_command.bit_data.KGF02_LeftHeadlightB | un_inf_can_kgf_output2.bit_data.KGF08;
un_inf_can_kgf_output4.bit_data.KGF09 = un_sample_kgf_command.bit_data.KGF02_RightHeadlightA | un_inf_can_kgf_output2.bit_data.KGF09;
un_inf_can_kgf_output4.bit_data.KGF10 = un_sample_kgf_command.bit_data.KGF02_RightHeadlightB | un_inf_can_kgf_output2.bit_data.KGF10;
un_inf_can_kgf_output4.bit_data.KGF11 = un_sample_kgf_command.bit_data.KGF02_LeftTaillightA | un_inf_can_kgf_output2.bit_data.KGF11;
un_inf_can_kgf_output4.bit_data.KGF12 = un_sample_kgf_command.bit_data.KGF02_LeftTaillightB | un_inf_can_kgf_output2.bit_data.KGF12;
un_inf_can_kgf_output4.bit_data.KGF13 = un_sample_kgf_command.bit_data.KGF02_RightTaillightA | un_inf_can_kgf_output2.bit_data.KGF13;
un_inf_can_kgf_output4.bit_data.KGF14 = un_sample_kgf_command.bit_data.KGF02_RightTaillightB | un_inf_can_kgf_output2.bit_data.KGF14;
un_inf_can_kgf_output4.bit_data.KGF15 = un_sample_kgf_command.bit_data.KGF02_ComputerPowerC | un_inf_can_kgf_output2.bit_data.KGF15;
un_inf_can_kgf_output4.bit_data.KGF16 = un_sample_kgf_command.bit_data.KGF02_ComputerPowerD | un_inf_can_kgf_output2.bit_data.KGF16;
canSendTo(DF_SwTxKGF1,(ubyte *)&un_inf_can_kgf_output3.arr[0]);
canSendTo(DF_SwTxKGF2,(ubyte *)&un_inf_can_kgf_output4.arr[0]);
}
}
else
{
flg_wake_ecu = NORMAL;
vcu_can_last = vcu_can_cnt;//<EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><EFBFBD><EFBFBD>
vcu_can_last = vcu_can_cnt;//数据更新
}
GetTemp();//1s<EFBFBD>ɼ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UnSwSample_1.bit_data.emergency_stop_switch = STOP_PIN;
UnSwSample_1.bit_data.High_voltage_switch = ~WAKE_UP_PIN;
GetTemp();//1s采集一次温度
UnSwSample_1.bit_data.emergency_stop_switch = 0;
UnSwSample_1.bit_data.High_voltage_switch = 1;
UnSwSample_1.bit_data.CH03 = flg_wake_ecu;
if(1 == flg_KGF)//<EFBFBD>ȴ<EFBFBD>KGF<EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD>ٷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(1 == flg_KGF)//等待KGF唤醒后再发送数据
{
canSendTo(DF_SwTxTemp,(ubyte *)&UnSwSample_1.arr[0]);
canSendTo(DF_SwTxTemp,(ubyte *)&UnSwSample_1.arr[0]); //不需要发送 小车不需要采集
}
}
if( (0x40 == can_error_cnt) || (0x80 == can_error_cnt) )//20250625<EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><EFBFBD><EFBFBD>
if( (0x40 == can_error_cnt) || (0x80 == can_error_cnt) )//20250625判断是否出现总线错误
{
can_error_flg = can_error_cnt;
CAN_vInit();

View File

@@ -89,12 +89,12 @@ unsigned char read_bit(void)
P3_DIR = P3_DIR | 0x20; // load direction register <20>л<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬
DQ = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD>
Delay_us(1); // <20><><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 3us
DELAY_3US(); // <20><><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 3us
DQ = 1; // <20><><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD> DQ <20><><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SFR_PAGE(_pp0, noSST); // switch to page 0
P3_DIR = P3_DIR & 0xDF;// load direction register
Delay_us(3); // <20>ȴ<EFBFBD> 10us ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>
DELAY_10US(); // <20>ȴ<EFBFBD> 10us ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>
res = DQ;
Delay_us(27); // ʱ<><CAB1>ĩβ <20>ȴ<EFBFBD>
@@ -109,11 +109,11 @@ void write_bit(char bitval)
P3_DIR = P3_DIR | 0x20; // load direction register <20>л<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬
DQ = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD>
Delay_us(2); // <20><><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 5us
DELAY_3US(); // <20><><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 5us
if(bitval == 1) DQ =1; // <20><><EFBFBD><EFBFBD> д 1<><31><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD>
Delay_us(25); // <20><><EFBFBD><EFBFBD> д 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD> 60 us
Delay_us(30); // <20><><EFBFBD><EFBFBD> д 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD> 60 us
DQ = 1; // <20>ͷ<EFBFBD> DQ <20><><EFBFBD><EFBFBD>
Delay_us(5); // <20><>д 0<><30><EFBFBD>ָ<EFBFBD> ʱ<><CAB1> 10us
DELAY_10US(); // <20><>д 0<><30><EFBFBD>ָ<EFBFBD> ʱ<><CAB1> 10us
}
/////////////////////////////////////////////////////////////////////
@@ -268,63 +268,35 @@ BOOL ConvertTemp(void)
* @param iTemp<6D><70><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>16λ<36>¶Ȳ<C2B6><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <20><>״̬
*/
//BOOL ReadTempWaiting(uword *iTemp)
//{
// ubyte scrb[sizeof(M601_SCRATCHPAD_READ)];
// M601_SCRATCHPAD_READ *scr = (M601_SCRATCHPAD_READ *) scrb;
BOOL ReadTempWaiting(uword *iTemp)
{
ubyte scrb[sizeof(M601_SCRATCHPAD_READ)];
M601_SCRATCHPAD_READ *scr = (M601_SCRATCHPAD_READ *) scrb;
// /*<2A><>9<EFBFBD><39><EFBFBD>ֽڡ<D6BD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>ǰ8<C7B0><38><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>--CRC<52><43>*/
// if(M601_ReadScratchpad_SkipRom(scrb) == FALSE)
// {
// UnSwSample_1.bit_data.temperature[1] = 1;
// return FALSE; /*<2A><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>ʧ<EFBFBD><CAA7>*/
// }
/*<2A><>9<EFBFBD><39><EFBFBD>ֽڡ<D6BD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>ǰ8<C7B0><38><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>--CRC<52><43>*/
if(M601_ReadScratchpad_SkipRom(scrb) == FALSE)
{
UnSwSample_1.bit_data.temperature[1] = 1;
return FALSE; /*<2A><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>ʧ<EFBFBD><CAA7>*/
}
// /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>ǰ8<C7B0><38><EFBFBD>ֽڵ<D6BD>У<EFBFBD><D0A3><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յĵ<D5B5>9<EFBFBD><39>CRC<52>ֽڱȽϡ<C8BD>*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>ǰ8<C7B0><38><EFBFBD>ֽڵ<D6BD>У<EFBFBD><D0A3><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յĵ<D5B5>9<EFBFBD><39>CRC<52>ֽڱȽϡ<C8BD>*/
// UnSwSample_1.bit_data.temperature[1] = scrb[8];
// if(scrb[8] != MY_OW_CRC8(scrb, 8))
// {
if(scrb[8] != MY_OW_CRC8(scrb, 8))
{
// return FALSE; /*CRC<52><43>֤δͨ<CEB4><CDA8>*/
// }
//// UnSwSample_1.bit_data.temperature[1] = *iTemp;
// /*<2A><><EFBFBD>¶Ȳ<C2B6><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽںϳ<DABA>Ϊ16λ<36>֡<EFBFBD>*/
// *iTemp = ((uword)(scr->T_msb) << 8) | scr->T_lsb;
//
// return TRUE;
//}
return FALSE; /*CRC<52><43>֤δͨ<CEB4><CDA8>*/
}
// UnSwSample_1.bit_data.temperature[1] = *iTemp;
/*<2A><><EFBFBD>¶Ȳ<C2B6><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽںϳ<DABA>Ϊ16λ<36>֡<EFBFBD>*/
*iTemp = ((uword)(scr->T_msb) << 8) | scr->T_lsb;
return TRUE;
}
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD>¶Ȳ<C2B6><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param <20><>
* @retval ״̬
*/
//BOOL GetTemp(void)
//{
// static uword intTemp = 0;//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Լ<EFBFBD><D4BC>
// float fTemp;
// int signedInt_f_tem = 0;
////---------------------------------------
// intTemp = 0;
// if(ConvertTemp() == FALSE) return FALSE;
// Delay_us(6000);
// ReadTempWaiting(&intTemp);
// signedInt_f_tem = (int)intTemp;
//
// fTemp = ( (float)(signedInt_f_tem)/256.0 ) + 40.0;
//
//
//// fTemp = M601_OutputtoTemp(signedInt_f_tem);
//// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// signedInt_f_tem = (int)(fTemp*10);
//// <20><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// UnSwSample_1.bit_data.temperature[0] = signedInt_f_tem;
// return TRUE;
//}
/**-----------------------------------------------------------------------
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬ<D0BE><C6AC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>bit<69><74><EFBFBD><EFBFBD>ȡ˳<C8A1>򣺵<EFBFBD>λ-><3E><>λ<EFBFBD><CEBB>
* @param <20><>
@@ -460,26 +432,58 @@ BOOL M601_ReadScratchpad(unsigned char* scr, unsigned char j)
* @param j <20><>search<63><68><EFBFBD><EFBFBD>оƬ<D0BE><C6AC><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB>оƬ<D0BE><C6AC>j<EFBFBD><6A>ֵ0
* @retval <20><>״̬
*/
BOOL ReadTempWaiting(unsigned short* iTemp, unsigned char j)
{
unsigned char scrb[sizeof(M601_SCRATCHPAD_READ)];
M601_SCRATCHPAD_READ* scr = (M601_SCRATCHPAD_READ*)scrb;
//BOOL ReadTempWaiting(unsigned short* iTemp, unsigned char j)
//{
// unsigned char scrb[sizeof(M601_SCRATCHPAD_READ)];
// M601_SCRATCHPAD_READ* scr = (M601_SCRATCHPAD_READ*)scrb;
/*<2A><>9<EFBFBD><39><EFBFBD>ֽڡ<D6BD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>ǰ8<C7B0><38><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>--CRC<52><43>*/
if (M601_ReadScratchpad(scrb, j) == 0)
{
return FALSE; /*<2A><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>ʧ<EFBFBD><CAA7>*/
}
// /*<2A><>9<EFBFBD><39><EFBFBD>ֽڡ<D6BD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>ǰ8<C7B0><38><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>--CRC<52><43>*/
// if (M601_ReadScratchpad(scrb, j) == 0)
// {
// return FALSE; /*<2A><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>ʧ<EFBFBD><CAA7>*/
// }
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>ǰ8<C7B0><38><EFBFBD>ֽڵ<D6BD>У<EFBFBD><D0A3><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յĵ<D5B5>9<EFBFBD><39>CRC<52>ֽڱȽϡ<C8BD>*/
if (scrb[8] != MY_OW_CRC8(scrb, 8))
{
return FALSE; /*CRC<52><43>֤δͨ<CEB4><CDA8>*/
}
// /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>ǰ8<C7B0><38><EFBFBD>ֽڵ<D6BD>У<EFBFBD><D0A3><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յĵ<D5B5>9<EFBFBD><39>CRC<52>ֽڱȽϡ<C8BD>*/
// if (scrb[8] != MY_OW_CRC8(scrb, 8))
// {
// return FALSE; /*CRC<52><43>֤δͨ<CEB4><CDA8>*/
// }
/*<2A><><EFBFBD>¶Ȳ<C2B6><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽںϳ<DABA>Ϊ16λ<36>֡<EFBFBD>*/
*iTemp = (unsigned short)scr->T_msb << 8 | scr->T_lsb;
// /*<2A><><EFBFBD>¶Ȳ<C2B6><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽںϳ<DABA>Ϊ16λ<36>֡<EFBFBD>*/
// *iTemp = (unsigned short)scr->T_msb << 8 | scr->T_lsb;
// return TRUE;
//}
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD>¶Ȳ<C2B6><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param <20><>
* @retval ״̬
*/
BOOL GetTemp(void)
{
static uword intTemp = 0;//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Լ<EFBFBD><D4BC>
float fTemp;
int signedInt_f_tem = 0;
//---------------------------------------
// intTemp = 0;
if(ConvertTemp() == FALSE) return FALSE;
Delay_us(6500);
ReadTempWaiting(&intTemp);
signedInt_f_tem = (int)intTemp;
fTemp = ( (float)(signedInt_f_tem)/256.0 ) + 40.0;
// fTemp = M601_OutputtoTemp(signedInt_f_tem);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
signedInt_f_tem = (int)(fTemp*10);
// <20><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UnSwSample_1.bit_data.temperature[0] = signedInt_f_tem;
return TRUE;
}
/**
@@ -487,32 +491,32 @@ BOOL ReadTempWaiting(unsigned short* iTemp, unsigned char j)
* @param <20><>
* @retval ״̬
*/
BOOL GetTemp(void)
{
float fTemp;
static unsigned int iTemp[MAXNUM];
int i;
int signedInt_f_tem = 0;
//----------------------------------------------------
// memset(romid, 0, sizeof(romid));//<2F><><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬһ<C6AC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
if(ConvertTemp() == FALSE) return FALSE;
Delay_us(6500);
//BOOL GetTemp(void)
//{
// float fTemp;
// static unsigned int iTemp[MAXNUM];
// int i;
// int signedInt_f_tem = 0;
////----------------------------------------------------
//// memset(romid, 0, sizeof(romid));//<2F><><EFBFBD><EFBFBD>
//
// /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬһ<C6AC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
// if(ConvertTemp() == FALSE) return FALSE;
// Delay_us(6500);
for (i = 0; i < RomNum; i++) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬ
{
iTemp[i] = 0;
/*<2A><><EFBFBD><EFBFBD>*/
ReadTempWaiting(&iTemp[i], i);
//
// for (i = 0; i < RomNum; i++) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬ
// {
// iTemp[i] = 0;
// /*<2A><><EFBFBD><EFBFBD>*/
// ReadTempWaiting(&iTemp[i], i);
fTemp = M601_OutputtoTemp((int)iTemp[i]); //<2F><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>
// fTemp = M601_OutputtoTemp((int)iTemp[i]); //<2F><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
signedInt_f_tem = (int)(fTemp*10);
// <20><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UnSwSample_1.bit_data.temperature[1] = (unsigned int)signedInt_f_tem;
}
return TRUE;
}
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// signedInt_f_tem = (int)(fTemp*10);
// // <20><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// UnSwSample_1.bit_data.temperature[i] = (unsigned int)signedInt_f_tem;
// }
// return TRUE;
//}

View File

@@ -4,6 +4,16 @@
#include "MAIN.H"
#define DELAY_3US() _nop_(); _nop_(); _nop_()
#define DELAY_5US() _nop_(); _nop_(); _nop_(); _nop_(); _nop_()
#define DELAY_10US() _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); \
_nop_(); _nop_(); _nop_(); _nop_(); _nop_()
#define DQ P3_5
///*Bit definition of config register*/

60
user.H
View File

@@ -8,6 +8,7 @@
#define DF_SwTxKGF2 10
#define DF_SwTxTemp 12
#define DF_SwRxKGF2 13
#define DF_SwZFKGF1 14
#define MAX_TIME 43200 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>30<33><30><EFBFBD><EFBFBD>
@@ -15,13 +16,12 @@
#define dfPwmH 10 //PWM<57>ĸߵ<C4B8>ƽʱ<C6BD>䣬10<31><30>10ms<6D><73><EFBFBD>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>20181227
#define WAKE_UP_PIN P1_4 //<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define WAKE_UP_PIN P1_5 //<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define KGF_PIN P0_0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CAN_PIN P1_6 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define STOP_PIN P1_2 //<2F><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BATTERY_PIN P3_6 //<2F><><EFBFBD>ؿ<EFBFBD><D8BF>ƽ<EFBFBD>
#define STOP_PIN P3_6 //<2F><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BATTERY_PIN P0_0 //<2F><><EFBFBD>ؿ<EFBFBD><D8BF>ƽ<EFBFBD>
#define ON 0 //<2F><><EFBFBD><EFBFBD>
#define OFF 1 //<2F>ɿ<EFBFBD>
@@ -29,14 +29,12 @@
#define FAULT 0
#define NORMAL 1
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ״̬ö<CCAC><C3B6>
typedef enum {
POWER_STANDBY,
POWER_WORKING,
POWER_EMERGENCY,
POWER_PRE_CHARGE,
POWER_NEUTRAL,
POWER_SLEEP
} PowerState;
@@ -96,8 +94,55 @@ typedef union _UnInfCanKGFOutput
} UnInfCanKGFOutput;
// VCU -> <20>ɼ<EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD> 0x15000004
typedef struct _StrSampleKgfCommand
{
//-----KGF01 Ŀ<><C4BF>λͼ byte0..1-----------------------------------------
unsigned int KGF01_CH01_Reserve : 1; // bit0 ͨ<><CDA8>1
unsigned int KGF01_CH02_Reserve : 1; // bit1 ͨ<><CDA8>2
unsigned int KGF01_CH03_Reserve : 1; // bit2 ͨ<><CDA8>3
unsigned int KGF01_PrechargeRelay : 1; // bit3 ͨ<><CDA8>4 Ԥ<><D4A4><EFBFBD>̵<EFBFBD><CCB5><EFBFBD>
unsigned int KGF01_CH05_Reserve : 1; // bit4 ͨ<><CDA8>5
unsigned int KGF01_CH06_Reserve : 1; // bit5 ͨ<><CDA8>6
unsigned int KGF01_HighVoltageRelayA : 1; // bit6 ͨ<><CDA8>7 <20><>ѹ<EFBFBD>̵<EFBFBD><CCB5><EFBFBD>A
unsigned int KGF01_HighVoltageRelayB : 1; // bit7 ͨ<><CDA8>8 <20><>ѹ<EFBFBD>̵<EFBFBD><CCB5><EFBFBD>B
unsigned int KGF01_CH09_Reserve : 1; // bit8 ͨ<><CDA8>9
unsigned int KGF01_CH10_Reserve : 1; // bit9 ͨ<><CDA8>10
unsigned int KGF01_LowVoltageRelayA : 1; // bit10 ͨ<><CDA8>11 <20><>ѹ<EFBFBD>̵<EFBFBD><CCB5><EFBFBD>A
unsigned int KGF01_LowVoltageRelayB : 1; // bit11 ͨ<><CDA8>12 <20><>ѹ<EFBFBD>̵<EFBFBD><CCB5><EFBFBD>B
unsigned int KGF01_LowVoltageCharge : 1; // bit12 ͨ<><CDA8>13 <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
unsigned int KGF01_CH14_Reserve : 1; // bit13 ͨ<><CDA8>14
unsigned int KGF01_CH15_Reserve : 1; // bit14 ͨ<><CDA8>15
unsigned int KGF01_CH16_Reserve : 1; // bit15 ͨ<><CDA8>16
//-----KGF02 Ŀ<><C4BF>λͼ byte2..3-----------------------------------------
unsigned int KGF02_ComputerPowerA : 1; // bit16 ͨ<><CDA8>1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴA
unsigned int KGF02_ComputerPowerB : 1; // bit17 ͨ<><CDA8>2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴB
unsigned int KGF02_RemotePower : 1; // bit18 ͨ<><CDA8>3 ң<><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
unsigned int KGF02_VcuE3Power : 1; // bit19 ͨ<><CDA8>4 VCU(E3)<29><>Դ
unsigned int KGF02_NetworkSwitchPowerA : 1; // bit20 ͨ<><CDA8>5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴA
unsigned int KGF02_NetworkSwitchPowerB : 1; // bit21 ͨ<><CDA8>6 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴB
unsigned int KGF02_LeftHeadlightA : 1; // bit22 ͨ<><CDA8>7 <20><>ǰ<EFBFBD><C7B0>A
unsigned int KGF02_LeftHeadlightB : 1; // bit23 ͨ<><CDA8>8 <20><>ǰ<EFBFBD><C7B0>B
unsigned int KGF02_RightHeadlightA : 1; // bit24 ͨ<><CDA8>9 <20><>ǰ<EFBFBD><C7B0>A
unsigned int KGF02_RightHeadlightB : 1; // bit25 ͨ<><CDA8>10 <20><>ǰ<EFBFBD><C7B0>B
unsigned int KGF02_LeftTaillightA : 1; // bit26 ͨ<><CDA8>11 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A
unsigned int KGF02_LeftTaillightB : 1; // bit27 ͨ<><CDA8>12 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
unsigned int KGF02_RightTaillightA : 1; // bit28 ͨ<><CDA8>13 <20>Һ<EFBFBD><D2BA><EFBFBD>A
unsigned int KGF02_RightTaillightB : 1; // bit29 ͨ<><CDA8>14 <20>Һ<EFBFBD><D2BA><EFBFBD>B
unsigned int KGF02_ComputerPowerC : 1; // bit30 ͨ<><CDA8>15 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴC
unsigned int KGF02_ComputerPowerD : 1; // bit31 ͨ<><CDA8>16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴD
//-----<2D><><EFBFBD><EFBFBD> byte4..7--------------------------------------------------
ulong Reserve ; // bit32..63
} StrSampleKgfCommand;
typedef union _UnSampleKgfCommand
{
StrSampleKgfCommand bit_data; // ʹ<>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>Ľṹ<C4BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ubyte arr[sizeof(StrSampleKgfCommand)]; // ͨ<><CDA8><EFBFBD><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>С
} UnSampleKgfCommand;
//---<2D>ⲿҪʹ<D2AA>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------------
@@ -105,11 +150,12 @@ extern UnSwOut UnSwOut_1;
extern UnInfCan UnInfCan_1;
extern uword CntCan_1;
extern bit FlgCan_1;
extern ubyte can_error_cnt;
extern ubyte can_error_flg;
extern UnInfCanKGFOutput un_inf_can_kgf_output1;//kgf<67><66><EFBFBD><EFBFBD>
extern UnInfCanKGFOutput un_inf_can_kgf_output2;//kgf<67><66><EFBFBD><EFBFBD>
void CanRXTX(void);
void SwSample(void);