10 Commits

24 changed files with 2930 additions and 1879 deletions

9
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,9 @@
{
"files.associations": {
"MAIN.C": "cpp",
"CAN.C": "cpp",
"temperature.C": "cpp",
"IO.C": "cpp",
"PS.C": "cpp"
}
}

387
CAN.C
View File

@@ -12,7 +12,7 @@
// @Description: This file contains functions that use the CAN module.
//
//----------------------------------------------------------------------------
// @Date 2024/8/22 08:23:16
// @Date 2025/1/18 20:45:35
//
//****************************************************************************
@@ -113,7 +113,7 @@
// @Parameters None
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -150,11 +150,14 @@ void CAN_vInit(void)
/// General Configuration of the Node 0:
/// - set INIT and CCE
/// - enable interrupt generation upon a change of BOFF or EWARN or upon a
/// set of LLE, LOE or INIT
/// - alert interrupt node pointer: MultiCAN SRN 0
//-----------CAN_NCR0 = 0x00000041-------------------------------------
//-----------CAN_NCR0 = 0x00000049-------------------------------------
CAN_vWriteCANAddress(CAN_NCR0); // Addressing CAN_NCR0
CAN_DATA0 = 0x41; // load NODE 0 control register[7-0]
CAN_DATA0 = 0x49; // load NODE 0 control register[7-0]
CAN_vWriteEN(D0_VALID+ADR_INC); // Data0 is Valid for transmission and
// Write is EnabledCAN Address pointing
// to the CAN_NSR0.
@@ -195,14 +198,14 @@ void CAN_vInit(void)
/// - required baud rate = 250.000 kbaud
/// - real baud rate = 250.000 kbaud
/// - sample point = 75.00 %
/// - there are 5 time quanta before sample point
/// - there are 2 time quanta after sample point
/// - there are 11 time quanta before sample point
/// - there are 4 time quanta after sample point
/// - the (re)synchronization jump width is 2 time quanta
//-----------CAN_NBTR0 = 0x00001457-------------------------------------
//-----------CAN_NBTR0 = 0x00003A4B-------------------------------------
CAN_DATA0 = 0x57; // load NBTR0_SJW, BRP
CAN_DATA1 = 0x14; // load NBTR0_DIV8, TSEG2, TSEG1
CAN_DATA0 = 0x4B; // load NBTR0_SJW, BRP
CAN_DATA1 = 0x3A; // load NBTR0_DIV8, TSEG2, TSEG1
CAN_vWriteEN(D0_VALID+D1_VALID+ADR_INC); // Data0, 1 are valid for
// transmission and Write is
// Enabled with Auto
@@ -277,7 +280,11 @@ void CAN_vInit(void)
CAN_vSetListCommand(0x01070002); // MO7 for list 1
CAN_vSetListCommand(0x01090002); // MO9 for list 1
CAN_vSetListCommand(0x010A0002); // MO10 for list 1
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:
/// -----------------------------------------------------------------------
@@ -396,12 +403,12 @@ void CAN_vInit(void)
/// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1)
/// - standard 11-bit identifier
/// - identifier 11-bit: 0x711
/// - extended 29-bit identifier
/// - identifier 29-bit: 0x15000001
//--------------MOAR6 = 0xDC440000---------------------------------------
//--------------MOAR6 = 0xF5000001---------------------------------------
CAN_vWriteAMData(0xDC440000); // load MO6 arbitration register
CAN_vWriteAMData(0xF5000001); // load MO6 arbitration register
// CAN Address pointing to the CAN_MODATAH6
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
@@ -422,7 +429,7 @@ void CAN_vInit(void)
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - only accept receive frames with matching IDE bit
/// - acceptance mask 11-bit: 0x7FF
/// - acceptance mask 29-bit: 0x1FFFFFFF
//--------------CAN_MOAMR6 = 0x3FFFFFFF------------------------------------
@@ -473,12 +480,12 @@ void CAN_vInit(void)
/// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1)
/// - standard 11-bit identifier
/// - identifier 11-bit: 0x712
/// - extended 29-bit identifier
/// - identifier 29-bit: 0x15000002
//--------------MOAR7 = 0xDC480000---------------------------------------
//--------------MOAR7 = 0xF5000002---------------------------------------
CAN_vWriteAMData(0xDC480000); // load MO7 arbitration register
CAN_vWriteAMData(0xF5000002); // load MO7 arbitration register
// CAN Address pointing to the CAN_MODATAH7
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
@@ -499,7 +506,7 @@ void CAN_vInit(void)
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - only accept receive frames with matching IDE bit
/// - acceptance mask 11-bit: 0x7FF
/// - acceptance mask 29-bit: 0x1FFFFFFF
//--------------CAN_MOAMR7 = 0x3FFFFFFF------------------------------------
@@ -536,26 +543,26 @@ void CAN_vInit(void)
/// Configuration of Message Object 8:
/// -----------------------------------------------------------------------
/// - message object 8 is valid
/// - message object is used as receive object
/// - message object is used as transmit object
/// - this message object is assigned to list 1 (node 0)
//--------------MOCTR8 = 0x00A00000---------------------------------------
//--------------MOCTR8 = 0x0EA80000---------------------------------------
CAN_vWriteCANAddress(CAN_MOCTR8); // Addressing MO8 control register
CAN_vWriteAMData(0x00A00000); // load MO8 control register
CAN_vWriteAMData(0x0EA80000); // load MO8 control register
// CAN Address pointing to the CAN_MOAR8
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)
/// - standard 11-bit identifier
/// - identifier 11-bit: 0x713
/// - extended 29-bit identifier
/// - identifier 29-bit: 0x11000002
//--------------MOAR8 = 0xDC4C0000---------------------------------------
//--------------MOAR8 = 0xF1000002---------------------------------------
CAN_vWriteAMData(0xDC4C0000); // load MO8 arbitration register
CAN_vWriteAMData(0xF1000002); // load MO8 arbitration register
// CAN Address pointing to the CAN_MODATAH8
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
@@ -576,7 +583,7 @@ void CAN_vInit(void)
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - only accept receive frames with matching IDE bit
/// - acceptance mask 11-bit: 0x7FF
/// - acceptance mask 29-bit: 0x1FFFFFFF
//--------------CAN_MOAMR8 = 0x3FFFFFFF------------------------------------
@@ -705,11 +712,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: 0x11000000
/// - identifier 29-bit: 0x14000002
//--------------MOAR10 = 0xF1000000---------------------------------------
//--------------MOAR10 = 0xF4000002---------------------------------------
CAN_vWriteAMData(0xF1000000); // load MO10 arbitration register
CAN_vWriteAMData(0xF4000002); // load MO10 arbitration register
// CAN Address pointing to the CAN_MODATAH10
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
@@ -763,22 +770,314 @@ void CAN_vInit(void)
CAN_vWriteAMData(0x08000000); // load MO10 function control register
/// -----------------------------------------------------------------------
/// -----------------------------------------------------------------------
/// Configuration of Message Object 11:
/// -----------------------------------------------------------------------
/// - message object 11 is not valid
/// - message object 11 is valid
/// - message object is used as receive object
/// - this message object is assigned to list 1 (node 0)
CAN_vWriteCANAddress(CAN_MOCTR11); // Addressing MO11 control register
CAN_vWriteAMData(0x00A00000); // load MO11 control register
// CAN Address pointing to the CAN_MOAR11
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: 0x15000006
//--------------MOAR11 = 0xF5000006---------------------------------------
CAN_vWriteAMData(0xF5000006); // load MO11 arbitration register
// CAN Address pointing to the CAN_MODATAH11
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MODATAH11 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO11 data register high
// CAN Address pointing to the CAN_MODATAL11
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MODATAL11 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO11 data register low
// CAN Address pointing to the CAN_MOAMR11
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - only accept receive frames with matching IDE bit
/// - acceptance mask 29-bit: 0x1FFFFFFF
//--------------CAN_MOAMR11 = 0x3FFFFFFF------------------------------------
CAN_vWriteAMData(0x3FFFFFFF); // load MO11 acceptance mask register
// CAN Address pointing to the CAN_MOIPR11
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - use message pending register 0 bit position 11
//--------------MOIPR11 = 0x00000B00---------------------------------------
CAN_vWriteAMData(0x00000B00); // load MO11 interrupt pointer register
// CAN Address pointing to the CAN_MOFGPR11
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MOFGPR11 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO11 FIFO/gateway pointer register
// CAN Address pointing to the CAN_MOFCR11
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - this object is a STANDARD MESSAGE OBJECT
/// - 8 valid data bytes
//--------------MOFCR11 = 0x08000000---------------------------------------
CAN_vWriteAMData(0x08000000); // load MO11 function control register
/// -----------------------------------------------------------------------
/// Configuration of Message Object 12:
/// -----------------------------------------------------------------------
/// - message object 12 is not valid
/// - message object 12 is valid
/// - message object is used as transmit object
/// - this message object is assigned to list 1 (node 0)
//--------------MOCTR12 = 0x0EA80000---------------------------------------
CAN_vWriteCANAddress(CAN_MOCTR12); // Addressing MO12 control register
CAN_vWriteAMData(0x0EA80000); // load MO12 control register
// CAN Address pointing to the CAN_MOAR12
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: 0x15000003
//--------------MOAR12 = 0xF5000003---------------------------------------
CAN_vWriteAMData(0xF5000003); // load MO12 arbitration register
// CAN Address pointing to the CAN_MODATAH12
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MODATAH12 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO12 data register high
// CAN Address pointing to the CAN_MODATAL12
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MODATAL12 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO12 data register low
// CAN Address pointing to the CAN_MOAMR12
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - only accept receive frames with matching IDE bit
/// - acceptance mask 29-bit: 0x1FFFFFFF
//--------------CAN_MOAMR12 = 0x3FFFFFFF------------------------------------
CAN_vWriteAMData(0x3FFFFFFF); // load MO12 acceptance mask register
// CAN Address pointing to the CAN_MOIPR12
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - use message pending register 0 bit position 12
//--------------MOIPR12 = 0x00000C00---------------------------------------
CAN_vWriteAMData(0x00000C00); // load MO12 interrupt pointer register
// CAN Address pointing to the CAN_MOFGPR12
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MOFGPR12 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO12 FIFO/gateway pointer register
// CAN Address pointing to the CAN_MOFCR12
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - this object is a STANDARD MESSAGE OBJECT
/// - 8 valid data bytes
//--------------MOFCR12 = 0x08000000---------------------------------------
CAN_vWriteAMData(0x08000000); // load MO12 function control register
/// -----------------------------------------------------------------------
/// Configuration of Message Object 13:
/// -----------------------------------------------------------------------
/// - message object 13 is not valid
/// - message object 13 is valid
/// - message object is used as receive object
/// - this message object is assigned to list 1 (node 0)
//--------------MOCTR13 = 0x00A00000---------------------------------------
CAN_vWriteCANAddress(CAN_MOCTR13); // Addressing MO13 control register
CAN_vWriteAMData(0x00A00000); // load MO13 control register
// CAN Address pointing to the CAN_MOAR13
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: 0x11000001
//--------------MOAR13 = 0xF1000001---------------------------------------
CAN_vWriteAMData(0xF1000001); // load MO13 arbitration register
// CAN Address pointing to the CAN_MODATAH13
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MODATAH13 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO13 data register high
// CAN Address pointing to the CAN_MODATAL13
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MODATAL13 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO13 data register low
// CAN Address pointing to the CAN_MOAMR13
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - accept reception of standard and extended frames
/// - acceptance mask 29-bit: 0x1FFFFFFF
/// - acceptance mask 11-bit: 0x7FF
//--------------CAN_MOAMR13 = 0x1FFFFFFF------------------------------------
CAN_vWriteAMData(0x1FFFFFFF); // load MO13 acceptance mask register
// CAN Address pointing to the CAN_MOIPR13
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - use message pending register 0 bit position 13
//--------------MOIPR13 = 0x00000D00---------------------------------------
CAN_vWriteAMData(0x00000D00); // load MO13 interrupt pointer register
// CAN Address pointing to the CAN_MOFGPR13
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MOFGPR13 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO13 FIFO/gateway pointer register
// CAN Address pointing to the CAN_MOFCR13
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - this object is a STANDARD MESSAGE OBJECT
/// - 8 valid data bytes
//--------------MOFCR13 = 0x08000000---------------------------------------
CAN_vWriteAMData(0x08000000); // load MO13 function control register
/// -----------------------------------------------------------------------
/// 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:
/// -----------------------------------------------------------------------
@@ -910,7 +1209,7 @@ void CAN_vInit(void)
// 32-bit Data
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -945,7 +1244,7 @@ void CAN_vWriteAMData(ulong ulValue)
// 32-bit Data
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -983,7 +1282,7 @@ void CAN_vSetListCommand(ulong ulVal)
// Pointer on a message object to be filled by this function
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -1140,7 +1439,7 @@ ubyte ubTemp;
// Number of the message object (0-31)
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -1183,7 +1482,7 @@ return(ubReturn);
// Number of the message object (0-31)
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -1227,7 +1526,7 @@ return(ubReturn);
// Number of the message object (0-31)
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -1267,7 +1566,7 @@ void CAN_vTransmit(ubyte ubObjNr)
// Pointer on a data buffer
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -1331,7 +1630,7 @@ void CAN_vLoadData(ubyte ubObjNr, ulong *ulpubData)
// Number of the message object (0-31)
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************

12
CAN.H
View File

@@ -13,7 +13,7 @@
// the CAN module.
//
//----------------------------------------------------------------------------
// @Date 2024/8/22 08:23:15
// @Date 2025/1/18 20:45:35
//
//****************************************************************************
@@ -623,7 +623,7 @@ void CAN_vSetListCommand(ulong ulVal);
// @Parameters None
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -645,7 +645,7 @@ void CAN_vSetListCommand(ulong ulVal);
// Data Control Flags
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -666,7 +666,7 @@ void CAN_vSetListCommand(ulong ulVal);
// 16-bit Address
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -701,7 +701,7 @@ void CAN_vSetListCommand(ulong ulVal);
// 32-bit Data
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -734,7 +734,7 @@ void CAN_vSetListCommand(ulong ulVal);
// @Parameters None
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************

Binary file not shown.

View File

@@ -9,7 +9,7 @@
; PLEASE DO NOT MODIFY THIS FILE !
;
;----------------------------------------------------------------------------
; Date 2024/8/22 08:23:16
; Date 2025/1/18 20:45:36
;
;****************************************************************************
@@ -611,8 +611,8 @@ CAN_MOAR0_IDE SET 1
CAN_MOAR0_PRI SET 3
; CAN Message Object 10 Arbitration Register
CAN_MOAR10_ID SET 285212672
CAN_MOAR10_IDE SET 1
CAN_MOAR10_ID SET 0
CAN_MOAR10_IDE SET 0
CAN_MOAR10_PRI SET 3
; CAN Message Object 11 Arbitration Register
@@ -746,18 +746,18 @@ CAN_MOAR5_IDE SET 1
CAN_MOAR5_PRI SET 3
; CAN Message Object 6 Arbitration Register
CAN_MOAR6_ID SET 532938752
CAN_MOAR6_IDE SET 0
CAN_MOAR6_ID SET 285212673
CAN_MOAR6_IDE SET 1
CAN_MOAR6_PRI SET 3
; CAN Message Object 7 Arbitration Register
CAN_MOAR7_ID SET 533200896
CAN_MOAR7_IDE SET 0
CAN_MOAR7_ID SET 285212674
CAN_MOAR7_IDE SET 1
CAN_MOAR7_PRI SET 3
; CAN Message Object 8 Arbitration Register
CAN_MOAR8_ID SET 533463040
CAN_MOAR8_IDE SET 0
CAN_MOAR8_ID SET 285212675
CAN_MOAR8_IDE SET 1
CAN_MOAR8_PRI SET 3
; CAN Message Object 9 Arbitration Register
@@ -782,11 +782,11 @@ CAN_MOCTR0_TXPND SET 0
CAN_MOCTR0_TXRQ SET 0
; CAN Message Object 10 Control Register
CAN_MOCTR10_CTRL SET 2569
CAN_MOCTR10_DIR SET 1
CAN_MOCTR10_LIST SET 1
CAN_MOCTR10_CTRL SET 0
CAN_MOCTR10_DIR SET 0
CAN_MOCTR10_LIST SET 0
CAN_MOCTR10_MSGLST SET 0
CAN_MOCTR10_MSGVAL SET 1
CAN_MOCTR10_MSGVAL SET 0
CAN_MOCTR10_NEWDAT SET 0
CAN_MOCTR10_RTSEL SET 0
CAN_MOCTR10_RXEN SET 0
@@ -1262,7 +1262,7 @@ CAN_MOCTR8_TXPND SET 0
CAN_MOCTR8_TXRQ SET 0
; CAN Message Object 9 Control Register
CAN_MOCTR9_CTRL SET 2567
CAN_MOCTR9_CTRL SET 2311
CAN_MOCTR9_DIR SET 1
CAN_MOCTR9_LIST SET 1
CAN_MOCTR9_MSGLST SET 0
@@ -1686,7 +1686,7 @@ CAN_MOFCR10_0 SET 0
CAN_MOFCR10_0 SET 0
CAN_MOFCR10_0 SET 0
CAN_MOFCR10_DATC SET 0
CAN_MOFCR10_DLC SET 8
CAN_MOFCR10_DLC SET 0
CAN_MOFCR10_DLCC SET 0
CAN_MOFCR10_FRREN SET 0
CAN_MOFCR10_GDFS SET 0
@@ -3504,9 +3504,9 @@ P0_DATA_P6 SET 0
P0_DATA_P7 SET 0
; RMAP=0 PAGE=0-P0 P0 Direction Register
P0_DIR_P0 SET 0
P0_DIR_P0 SET 1
P0_DIR_P1 SET 1
P0_DIR_P2 SET 0
P0_DIR_P2 SET 1
P0_DIR_P3 SET 1
P0_DIR_P4 SET 0
P0_DIR_P5 SET 0
@@ -3581,7 +3581,7 @@ P1_DIR_P3 SET 0
P1_DIR_P4 SET 0
P1_DIR_P5 SET 0
P1_DIR_P6 SET 0
P1_DIR_P7 SET 0
P1_DIR_P7 SET 1
; RMAP=0 PAGE=3-P1 P1 Open Drain Control Register
P1_OD_P0 SET 0
@@ -3596,20 +3596,20 @@ P1_OD_P7 SET 0
; RMAP=0 PAGE=1-P1 P1 Pull-Up/Pull-Down Enable Register
P1_PUDEN_P0 SET 1
P1_PUDEN_P1 SET 1
P1_PUDEN_P2 SET 1
P1_PUDEN_P3 SET 1
P1_PUDEN_P4 SET 1
P1_PUDEN_P5 SET 1
P1_PUDEN_P2 SET 0
P1_PUDEN_P3 SET 0
P1_PUDEN_P4 SET 0
P1_PUDEN_P5 SET 0
P1_PUDEN_P6 SET 1
P1_PUDEN_P7 SET 1
; RMAP=0 PAGE=1-P1 P1 Pull-Up/Pull-Down Select Register
P1_PUDSEL_P0 SET 1
P1_PUDSEL_P1 SET 1
P1_PUDSEL_P2 SET 0
P1_PUDSEL_P3 SET 0
P1_PUDSEL_P4 SET 0
P1_PUDSEL_P5 SET 0
P1_PUDSEL_P2 SET 1
P1_PUDSEL_P3 SET 1
P1_PUDSEL_P4 SET 1
P1_PUDSEL_P5 SET 1
P1_PUDSEL_P6 SET 1
P1_PUDSEL_P7 SET 0
@@ -3689,37 +3689,37 @@ P3_DIR_P1 SET 0
P3_DIR_P2 SET 1
P3_DIR_P3 SET 1
P3_DIR_P4 SET 1
P3_DIR_P5 SET 0
P3_DIR_P5 SET 1
P3_DIR_P6 SET 0
P3_DIR_P7 SET 0
; RMAP=0 PAGE=3-P3 P3 Open Drain Control Register
P3_OD_P0 SET 0
P3_OD_P1 SET 0
P3_OD_P2 SET 0
P3_OD_P3 SET 0
P3_OD_P4 SET 0
P3_OD_P5 SET 0
P3_OD_P2 SET 1
P3_OD_P3 SET 1
P3_OD_P4 SET 1
P3_OD_P5 SET 1
P3_OD_P6 SET 0
P3_OD_P7 SET 0
; RMAP=0 PAGE=1-P3 P3 Pull-Up/Pull-Down Enable Register
P3_PUDEN_P0 SET 1
P3_PUDEN_P1 SET 1
P3_PUDEN_P2 SET 1
P3_PUDEN_P3 SET 1
P3_PUDEN_P4 SET 1
P3_PUDEN_P5 SET 1
P3_PUDEN_P6 SET 1
P3_PUDEN_P2 SET 0
P3_PUDEN_P3 SET 0
P3_PUDEN_P4 SET 0
P3_PUDEN_P5 SET 0
P3_PUDEN_P6 SET 0
P3_PUDEN_P7 SET 1
; RMAP=0 PAGE=1-P3 P3 Pull-Up/Pull-Down Select Register
P3_PUDSEL_P0 SET 1
P3_PUDSEL_P1 SET 1
P3_PUDSEL_P2 SET 0
P3_PUDSEL_P3 SET 0
P3_PUDSEL_P4 SET 0
P3_PUDSEL_P5 SET 0
P3_PUDSEL_P2 SET 1
P3_PUDSEL_P3 SET 1
P3_PUDSEL_P4 SET 1
P3_PUDSEL_P5 SET 1
P3_PUDSEL_P6 SET 1
P3_PUDSEL_P7 SET 1
@@ -3754,7 +3754,7 @@ P4_DATA_P6 SET 0
P4_DATA_P7 SET 0
; RMAP=0 PAGE=0-P4 P4 Direction Register
P4_DIR_P0 SET 0
P4_DIR_P0 SET 1
P4_DIR_P1 SET 1
P4_DIR_P2 SET 0
P4_DIR_P3 SET 0
@@ -3777,7 +3777,7 @@ P4_OD_P7 SET 0
P4_PUDEN_P0 SET 1
P4_PUDEN_P1 SET 1
P4_PUDEN_P2 SET 1
P4_PUDEN_P3 SET 1
P4_PUDEN_P3 SET 0
P4_PUDEN_P4 SET 0
P4_PUDEN_P5 SET 0
P4_PUDEN_P6 SET 0
@@ -3787,7 +3787,7 @@ P4_PUDEN_P7 SET 0
P4_PUDSEL_P0 SET 0
P4_PUDSEL_P1 SET 0
P4_PUDSEL_P2 SET 1
P4_PUDSEL_P3 SET 0
P4_PUDSEL_P3 SET 1
P4_PUDSEL_P4 SET 1
P4_PUDSEL_P5 SET 1
P4_PUDSEL_P6 SET 1

BIN
CL2.0.dav

Binary file not shown.

110
CL2.0.dpt
View File

@@ -9,7 +9,7 @@
' PLEASE DO NOT MODIFY THIS FILE !
'
'----------------------------------------------------------------------------
; Date 2024/8/22 08:23:16
; Date 2025/1/18 20:45:36
'
'****************************************************************************
@@ -448,7 +448,7 @@ CAN_MCR_MPSEL=0
CAN_MITR_IT[31:8]=0
CAN_MITR_IT[7:0]=0
CAN_MO0_LISTPOS=0
CAN_MO10_LISTPOS=8
CAN_MO10_LISTPOS=0
CAN_MO11_LISTPOS=0
CAN_MO12_LISTPOS=0
CAN_MO13_LISTPOS=0
@@ -578,8 +578,8 @@ CAN_MOAMR9_MIDE=1
CAN_MOAR0_ID=268435457
CAN_MOAR0_IDE=1
CAN_MOAR0_PRI=3
CAN_MOAR10_ID=285212672
CAN_MOAR10_IDE=1
CAN_MOAR10_ID=0
CAN_MOAR10_IDE=0
CAN_MOAR10_PRI=3
CAN_MOAR11_ID=0
CAN_MOAR11_IDE=0
@@ -659,14 +659,14 @@ CAN_MOAR4_PRI=3
CAN_MOAR5_ID=3
CAN_MOAR5_IDE=1
CAN_MOAR5_PRI=3
CAN_MOAR6_ID=532938752
CAN_MOAR6_IDE=0
CAN_MOAR6_ID=285212673
CAN_MOAR6_IDE=1
CAN_MOAR6_PRI=3
CAN_MOAR7_ID=533200896
CAN_MOAR7_IDE=0
CAN_MOAR7_ID=285212674
CAN_MOAR7_IDE=1
CAN_MOAR7_PRI=3
CAN_MOAR8_ID=533463040
CAN_MOAR8_IDE=0
CAN_MOAR8_ID=285212675
CAN_MOAR8_IDE=1
CAN_MOAR8_PRI=3
CAN_MOAR9_ID=536870896
CAN_MOAR9_IDE=1
@@ -685,11 +685,11 @@ CAN_MOCTR0_TXEN0=0
CAN_MOCTR0_TXEN1=0
CAN_MOCTR0_TXPND=0
CAN_MOCTR0_TXRQ=0
CAN_MOCTR10_CTRL=2569
CAN_MOCTR10_DIR=1
CAN_MOCTR10_LIST=1
CAN_MOCTR10_CTRL=0
CAN_MOCTR10_DIR=0
CAN_MOCTR10_LIST=0
CAN_MOCTR10_MSGLST=0
CAN_MOCTR10_MSGVAL=1
CAN_MOCTR10_MSGVAL=0
CAN_MOCTR10_NEWDAT=0
CAN_MOCTR10_RTSEL=0
CAN_MOCTR10_RXEN=0
@@ -1105,7 +1105,7 @@ CAN_MOCTR8_TXEN0=0
CAN_MOCTR8_TXEN1=0
CAN_MOCTR8_TXPND=0
CAN_MOCTR8_TXRQ=0
CAN_MOCTR9_CTRL=2567
CAN_MOCTR9_CTRL=2311
CAN_MOCTR9_DIR=1
CAN_MOCTR9_LIST=1
CAN_MOCTR9_MSGLST=0
@@ -1397,7 +1397,7 @@ CAN_MOFCR10_0=0
CAN_MOFCR10_0=0
CAN_MOFCR10_0=0
CAN_MOFCR10_DATC=0
CAN_MOFCR10_DLC=8
CAN_MOFCR10_DLC=0
CAN_MOFCR10_DLCC=0
CAN_MOFCR10_FRREN=0
CAN_MOFCR10_GDFS=0
@@ -3055,12 +3055,12 @@ MUXFOR_MTSR_0(MASTER_TRANSMIT)=0
MUXFOR_MTSR_0(SLAVE_RECEIVE)=0
MUXFOR_MTSR_1(MASTER_TRANSMIT)=0
MUXFOR_MTSR_1(SLAVE_RECEIVE)=0
MUXFOR_P0_0=1
MUXFOR_P0_0=2
MUXFOR_P0_1=2
MUXFOR_P0_2=1
MUXFOR_P0_2=2
MUXFOR_P0_3=2
MUXFOR_P0_4=0
MUXFOR_P0_5=1
MUXFOR_P0_5=0
MUXFOR_P0_6=0
MUXFOR_P0_7=2
MUXFOR_P1_0=0
@@ -3070,24 +3070,24 @@ MUXFOR_P1_3=1
MUXFOR_P1_4=1
MUXFOR_P1_5=1
MUXFOR_P1_6=0
MUXFOR_P1_7=1
MUXFOR_P2_0=1
MUXFOR_P2_1=1
MUXFOR_P1_7=2
MUXFOR_P2_0=0
MUXFOR_P2_1=0
MUXFOR_P2_2=0
MUXFOR_P2_3=1
MUXFOR_P2_3=0
MUXFOR_P2_4=1
MUXFOR_P2_5=1
MUXFOR_P2_6=0
MUXFOR_P2_7=0
MUXFOR_P2_6=1
MUXFOR_P2_7=1
MUXFOR_P3_0=1
MUXFOR_P3_1=1
MUXFOR_P3_2=2
MUXFOR_P3_3=2
MUXFOR_P3_4=2
MUXFOR_P3_5=1
MUXFOR_P3_5=2
MUXFOR_P3_6=1
MUXFOR_P3_7=1
MUXFOR_P4_0=1
MUXFOR_P4_0=2
MUXFOR_P4_1=2
MUXFOR_P4_2=0
MUXFOR_P4_3=1
@@ -3186,9 +3186,9 @@ P0_DATA_P4=0
P0_DATA_P5=0
P0_DATA_P6=0
P0_DATA_P7=0
P0_DIR_P0=0
P0_DIR_P0=1
P0_DIR_P1=1
P0_DIR_P2=0
P0_DIR_P2=1
P0_DIR_P3=1
P0_DIR_P4=0
P0_DIR_P5=0
@@ -3258,7 +3258,7 @@ P1_DIR_P3=0
P1_DIR_P4=0
P1_DIR_P5=0
P1_DIR_P6=0
P1_DIR_P7=0
P1_DIR_P7=1
P1_NAME_P1_0=P1_0
P1_NAME_P1_1=P1_1
P1_NAME_P1_2=P1_2
@@ -3278,18 +3278,18 @@ P1_OD_P6=0
P1_OD_P7=0
P1_PUDEN_P0=1
P1_PUDEN_P1=1
P1_PUDEN_P2=1
P1_PUDEN_P3=1
P1_PUDEN_P4=1
P1_PUDEN_P5=1
P1_PUDEN_P2=0
P1_PUDEN_P3=0
P1_PUDEN_P4=0
P1_PUDEN_P5=0
P1_PUDEN_P6=1
P1_PUDEN_P7=1
P1_PUDSEL_P0=1
P1_PUDSEL_P1=1
P1_PUDSEL_P2=0
P1_PUDSEL_P3=0
P1_PUDSEL_P4=0
P1_PUDSEL_P5=0
P1_PUDSEL_P2=1
P1_PUDSEL_P3=1
P1_PUDSEL_P4=1
P1_PUDSEL_P5=1
P1_PUDSEL_P6=1
P1_PUDSEL_P7=0
P2_DATA_P0=0
@@ -3362,7 +3362,7 @@ P3_DIR_P1=0
P3_DIR_P2=1
P3_DIR_P3=1
P3_DIR_P4=1
P3_DIR_P5=0
P3_DIR_P5=1
P3_DIR_P6=0
P3_DIR_P7=0
P3_NAME_P3_0=P3_0
@@ -3376,26 +3376,26 @@ P3_NAME_P3_7=P3_7
P3_NOTES=
P3_OD_P0=0
P3_OD_P1=0
P3_OD_P2=0
P3_OD_P3=0
P3_OD_P4=0
P3_OD_P5=0
P3_OD_P2=1
P3_OD_P3=1
P3_OD_P4=1
P3_OD_P5=1
P3_OD_P6=0
P3_OD_P7=0
P3_PUDEN_P0=1
P3_PUDEN_P1=1
P3_PUDEN_P2=1
P3_PUDEN_P3=1
P3_PUDEN_P4=1
P3_PUDEN_P5=1
P3_PUDEN_P6=1
P3_PUDEN_P2=0
P3_PUDEN_P3=0
P3_PUDEN_P4=0
P3_PUDEN_P5=0
P3_PUDEN_P6=0
P3_PUDEN_P7=1
P3_PUDSEL_P0=1
P3_PUDSEL_P1=1
P3_PUDSEL_P2=0
P3_PUDSEL_P3=0
P3_PUDSEL_P4=0
P3_PUDSEL_P5=0
P3_PUDSEL_P2=1
P3_PUDSEL_P3=1
P3_PUDSEL_P4=1
P3_PUDSEL_P5=1
P3_PUDSEL_P6=1
P3_PUDSEL_P7=1
P4_ALTSEL0_P0=0
@@ -3422,7 +3422,7 @@ P4_DATA_P4=0
P4_DATA_P5=0
P4_DATA_P6=0
P4_DATA_P7=0
P4_DIR_P0=0
P4_DIR_P0=1
P4_DIR_P1=1
P4_DIR_P2=0
P4_DIR_P3=0
@@ -3446,7 +3446,7 @@ P4_OD_P7=0
P4_PUDEN_P0=1
P4_PUDEN_P1=1
P4_PUDEN_P2=1
P4_PUDEN_P3=1
P4_PUDEN_P3=0
P4_PUDEN_P4=0
P4_PUDEN_P5=0
P4_PUDEN_P6=0
@@ -3454,7 +3454,7 @@ P4_PUDEN_P7=0
P4_PUDSEL_P0=0
P4_PUDSEL_P1=0
P4_PUDSEL_P2=1
P4_PUDSEL_P3=0
P4_PUDSEL_P3=1
P4_PUDSEL_P4=1
P4_PUDSEL_P5=1
P4_PUDSEL_P6=1

107
CL2.0.rtf
View File

@@ -8,7 +8,7 @@
\par \plain\f4\fs22\cf0 Compiler: \tab\tab\b Keil
\par \plain\f4\fs22\cf0 Memory Model: \tab\b COMPACT
\par
\par \plain\f4\fs22\cf0 Date: \tab\tab\tab\b 2024/8/22 08:23:16
\par \plain\f4\fs22\cf0 Date: \tab\tab\tab\b 2025/1/18 20:45:36
\par
\par
\par \plain\f4\fs22\cf2\b Please read this document carefully and note
@@ -295,7 +295,9 @@
\par
\tab Configuration of Port P0:\par
\tab P0.0:\par
\tab - is used as general input\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\tab P0.1:\par
\tab - is used as general purpose output\par
@@ -303,16 +305,15 @@
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\tab P0.2:\par
\tab - is used as general input\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\tab P0.3:\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\tab P0.5:\par
\tab - is used as general input\par
\tab - pull device is disabled (tristate)\par
\tab P0.7:\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
@@ -329,33 +330,23 @@
\tab - pull-up device is assigned\par
\tab P1.2:\par
\tab - is used as general input\par
\tab - pull-down device is assigned\par
\tab - pull device is disabled (tristate)\par
\tab P1.3:\par
\tab - is used as general input\par
\tab - pull-down device is assigned\par
\tab - pull device is disabled (tristate)\par
\tab P1.4:\par
\tab - is used as general input\par
\tab - pull-down device is assigned\par
\tab - pull device is disabled (tristate)\par
\tab P1.5:\par
\tab - is used as general input\par
\tab - pull-down device is assigned\par
\tab - pull device is disabled (tristate)\par
\tab P1.7:\par
\tab - is used as general input\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\par
\tab Configuration of Port P2:\par
\tab P2.0:\par
\tab - is used as general input\par
\tab - input driver is enabled\par
\tab - pull device is disabled (tristate)\par
\tab P2.1:\par
\tab - is used as general input\par
\tab - input driver is enabled\par
\tab - pull device is disabled (tristate)\par
\tab P2.3:\par
\tab - is used as general input\par
\tab - input driver is enabled\par
\tab - pull device is disabled (tristate)\par
\tab P2.4:\par
\tab - is used as general input\par
\tab - input driver is enabled\par
@@ -364,6 +355,14 @@
\tab - is used as general input\par
\tab - input driver is enabled\par
\tab - pull-up device is assigned\par
\tab P2.6:\par
\tab - is used as general input\par
\tab - input driver is enabled\par
\tab - pull-up device is assigned\par
\tab P2.7:\par
\tab - is used as general input\par
\tab - input driver is enabled\par
\tab - pull-up device is assigned\par
\par
\tab Configuration of Port P3:\par
\tab P3.0:\par
@@ -374,32 +373,36 @@
\tab - pull-up device is assigned\par
\tab P3.2:\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
\tab - open drain output is selected\par
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\tab - pull device is disabled (tristate)\par
\tab P3.3:\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
\tab - open drain output is selected\par
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\tab - pull device is disabled (tristate)\par
\tab P3.4:\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
\tab - open drain output is selected\par
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\tab - pull device is disabled (tristate)\par
\tab P3.5:\par
\tab - is used as general input\par
\tab - pull-down device is assigned\par
\tab - is used as general purpose output\par
\tab - open drain output is selected\par
\tab - the pin status is low level\par
\tab - pull device is disabled (tristate)\par
\tab P3.6:\par
\tab - is used as general input\par
\tab - pull-up device is assigned\par
\tab - pull device is disabled (tristate)\par
\tab P3.7:\par
\tab - is used as general input\par
\tab - pull-up device is assigned\par
\par
\tab Configuration of Port P4:\par
\tab P4.0:\par
\tab - is used as general input\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\tab P4.1:\par
\tab - is used as general purpose output\par
@@ -408,7 +411,7 @@
\tab - pull-down device is assigned\par
\tab P4.3:\par
\tab - is used as general input\par
\tab - pull-down device is assigned\par
\tab - pull device is disabled (tristate)\par
\par
\par \plain\f4\fs20\cf0
@@ -1014,11 +1017,11 @@
\par
\tab - priority class 3; transmit acceptance filtering is based on the list\par
\tab order (like class 1)\par
\tab - standard 11-bit identifier\par
\tab - identifier 11-bit: 0x7F1\par
\tab - extended 29-bit identifier\par
\tab - identifier 29-bit: 0x11000001\par
\par
\tab - only accept receive frames with matching IDE bit\par
\tab - acceptance mask 11-bit: 0x7FF\par
\tab - acceptance mask 29-bit: 0x1FFFFFFF\par
\par
\tab - use message pending register 0 bit position 6\par
\par
@@ -1032,11 +1035,11 @@
\par
\tab - priority class 3; transmit acceptance filtering is based on the list\par
\tab order (like class 1)\par
\tab - standard 11-bit identifier\par
\tab - identifier 11-bit: 0x7F2\par
\tab - extended 29-bit identifier\par
\tab - identifier 29-bit: 0x11000002\par
\par
\tab - only accept receive frames with matching IDE bit\par
\tab - acceptance mask 11-bit: 0x7FF\par
\tab - acceptance mask 29-bit: 0x1FFFFFFF\par
\par
\tab - use message pending register 0 bit position 7\par
\par
@@ -1050,11 +1053,11 @@
\par
\tab - priority class 3; transmit acceptance filtering is based on the list\par
\tab order (like class 1)\par
\tab - standard 11-bit identifier\par
\tab - identifier 11-bit: 0x7F3\par
\tab - extended 29-bit identifier\par
\tab - identifier 29-bit: 0x11000003\par
\par
\tab - only accept receive frames with matching IDE bit\par
\tab - acceptance mask 11-bit: 0x7FF\par
\tab - acceptance mask 29-bit: 0x1FFFFFFF\par
\par
\tab - use message pending register 0 bit position 8\par
\par
@@ -1080,23 +1083,7 @@
\tab - 8 valid data bytes\par
\par
\tab Configuration of Message Object 10:\par
\tab - message object 10 is valid\par
\tab - message object is used as transmit object\par
\tab - this message object is assigned to list 1 (node 0)\par
\par
\tab - priority class 3; transmit acceptance filtering is based on the list\par
\tab order (like class 1)\par
\tab - extended 29-bit identifier\par
\tab - identifier 29-bit: 0x11000000\par
\par
\tab - only accept receive frames with matching IDE bit\par
\tab - acceptance mask 29-bit: 0x1FFFFFFF\par
\par
\tab - use message pending register 0 bit position 10\par
\par
\tab - this object is a STANDARD MESSAGE OBJECT\par
\tab - 8 valid data bytes\par
\par
\tab - message object 10 is not valid\par
\tab Configuration of Message Object 11:\par
\tab - message object 11 is not valid\par
\tab Configuration of Message Object 12:\par

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -17,8 +17,8 @@
</Extensions>
<DaveTm>
<dwLowDateTime>-1733316296</dwLowDateTime>
<dwHighDateTime>31126623</dwHighDateTime>
<dwLowDateTime>-1575929917</dwLowDateTime>
<dwHighDateTime>31246864</dwHighDateTime>
</DaveTm>
<Target>
@@ -303,20 +303,8 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\CC6.C</PathWithFileName>
<FilenameWithoutPath>CC6.C</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\ADC.C</PathWithFileName>
<FilenameWithoutPath>ADC.C</FilenameWithoutPath>
<PathWithFileName>.\PS.C</PathWithFileName>
<FilenameWithoutPath>PS.C</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
@@ -330,7 +318,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -342,7 +330,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -354,7 +342,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileNumber>11</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -364,6 +352,30 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\temperature.C</PathWithFileName>
<FilenameWithoutPath>temperature.C</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\RTC.c</PathWithFileName>
<FilenameWithoutPath>RTC.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

View File

@@ -412,14 +412,9 @@
<FilePath>.\WDT.C</FilePath>
</File>
<File>
<FileName>CC6.C</FileName>
<FileName>PS.C</FileName>
<FileType>1</FileType>
<FilePath>.\CC6.C</FilePath>
</File>
<File>
<FileName>ADC.C</FileName>
<FileType>1</FileType>
<FilePath>.\ADC.C</FilePath>
<FilePath>.\PS.C</FilePath>
</File>
</Files>
</Group>
@@ -441,6 +436,16 @@
<FileType>2</FileType>
<FilePath>.\XC88x_FLHANDLER.ASM</FilePath>
</File>
<File>
<FileName>temperature.C</FileName>
<FileType>1</FileType>
<FilePath>.\temperature.C</FilePath>
</File>
<File>
<FileName>RTC.c</FileName>
<FileType>1</FileType>
<FilePath>.\RTC.c</FilePath>
</File>
</Files>
</Group>
</Groups>

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)

33
MAIN.C
View File

@@ -214,7 +214,6 @@ void main(void)
// ulong i,j;
// static ubyte tmp[8] = {0};
// for(j=0;j<200;j++){for(i=0;i<133;i++);}
// USER CODE END
MAIN_vInit();
@@ -236,32 +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

297
RTC.c
View File

@@ -1,25 +1,8 @@
#include "MAIN.H"
#include <stdio.h>
#include "RTC.H"
unsigned char bySta = 0;
// <20><>̬<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><EAA3AC><EFBFBD><EFBFBD>1~12<31><32>Ӧ1<D3A6><31>~12<31>£<EFBFBD>
ubyte days_in_month[12] = {
31, // 1<><31>
28, // 2<>£<EFBFBD>ƽ<EFBFBD>
31, // 3<><33>
30, // 4<><34>
31, // 5<><35>
30, // 6<><36>
31, // 7<><37>
31, // 8<><38>
30, // 9<><39>
31, // 10<31><30>
30, // 11<31><31>
31 // 12<31><32>
};
#include <string.h>
//unsigned char bySta = 0;
void SDAOut(bit c)
{
@@ -178,199 +161,135 @@ unsigned char BM8563_ReadReg(unsigned char reg)
return rdata;
}
// <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
ubyte leapYear(uword year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
/**
* @brief <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA>·ݵ<C2B7><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param year: <20><><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2024<32><34>
* @param month: <20>·ݣ<C2B7>1-12<31><32>
* @retval <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>
*/
ubyte getMonthDays(uword year, ubyte month) {
// <20><>̬<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><EAA3AC><EFBFBD><EFBFBD>1~12<31><32>Ӧ1<D3A6><31>~12<31>£<EFBFBD>
ubyte days_in_month[13] = {
0, 31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31
};
// <20><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
if (month < 1 || month > 12) return 0;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>
if (month == 2 && leapYear(year)) {
return 29;
}
// <20><><EFBFBD>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return days_in_month[month];
}
/**
* @brief <20><><EFBFBD><EFBFBD><E9B1A8><EFBFBD><EFBFBD>־AF<41>Ƿ<EFBFBD><C7B7><EFBFBD>λ<EFBFBD><CEBB>Bit3<74><33>
* @retval true-<2D><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD>false-<2D>ޱ<EFBFBD><DEB1><EFBFBD>
*/
bool bm8563CheckAlarmFlag(void) {
ubyte reg_val = BM8563_ReadReg(BM8563_CSR2);
return (reg_val & BM8563_AF_BIT) != 0; // <20><><EFBFBD><EFBFBD>Bit3
bool bm8563CheckAlarmFlag(void)
{
ubyte reg_val = BM8563_ReadReg(BM8563_CSR2);
return (reg_val & BM8563_AF_BIT) != 0; // <20><><EFBFBD><EFBFBD>Bit3,<2C><><EFBFBD><EFBFBD>Ϊ0<CEAA>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>Ǿ<EFBFBD>
}
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־AF<41><46>Bit3<74><33>
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Bit1 AIE<49><45>־<EFBFBD><D6BE>״̬
*/
void bm8563ClearAlarmFlag(void) {
ubyte reg_val = BM8563_ReadReg(BM8563_CSR2);
reg_val &= ~BM8563_AF_BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bit3
BM8563_WriteReg(BM8563_CSR2, reg_val);
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Сֵ<D0A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ֮<D6B5><D6AE>
ubyte constrain(ubyte value, ubyte min_val, ubyte max_val)
{
if (value < min_val)
{
return min_val;
}
else if (value > max_val)
{
return max_val;
}
else
{
return value;
}
}
/**
* @brief <20><><EFBFBD><EFBFBD>BM8563<36><33>ǰʱ<C7B0><EFBFBD><E4A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>·ݼĴ<DDBC><C4B4><EFBFBD><EFBFBD><EFBFBD>
* @param pTime: ʱ<><CAB1><EFBFBD><EFBFBD><E1B9B9>ָ<EFBFBD><EFBFBD><EBA3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1984<38><34>2024<32><34>
* @retval <20><>
*/
void bm8563SetTime(UnTimeOutput *pTime) {
void bm8563SetTime(UnTimeOutput *pTime)
{
ubyte reg_sec = 0;
UnTimeOutput time_temp = {0};
ubyte century_bit = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ubyte reg_sec = 0;
ubyte month_bcd = 0;
if (pTime == NULL) return;
// --- <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> ---
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>־<EFBFBD><D6BE>0:20<32><30><EFBFBD>ͼ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>1:19<31><39><EFBFBD>ͣ<EFBFBD>
// uint8_t century_bit = (pTime->bit_data.year >= 2000) ? 0 : 1; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// --- <20>Ĵ<EFBFBD><C4B4><EFBFBD>д<EFBFBD><EFBFBD><EBA3A8><EFBFBD><EFBFBD><EFBFBD>룩---
if (pTime == NULL) {
return; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ
}
memcpy(&time_temp,pTime,sizeof(UnTimeOutput));//<2F>ȿ<EFBFBD><C8BF><EFBFBD>
time_temp.bit_data.year = constrain(time_temp.bit_data.year,0,99);//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Χ
time_temp.bit_data.month = constrain(time_temp.bit_data.month,1,12);//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Χ
time_temp.bit_data.day = constrain(time_temp.bit_data.day,1,31);//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>Χ
time_temp.bit_data.hour = constrain(time_temp.bit_data.hour,0,23);//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Χ
time_temp.bit_data.week = constrain(time_temp.bit_data.week,0,6);//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Χ
time_temp.bit_data.minute = constrain(time_temp.bit_data.minute,0,59);//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Χ
time_temp.bit_data.second = constrain(time_temp.bit_data.second,0,59);//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Χ
BM8563_WriteReg( BM8563_YEAR, DecToBcd(pTime->bit_data.year) );//д<><EFBFBD><EAA3AC><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪBCD<43><44>
BM8563_WriteReg( BM8563_MONTH, DecToBcd(pTime->bit_data.month)&0x1F);//д<>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪBCD<43><44>
BM8563_WriteReg( BM8563_DAY, DecToBcd(pTime->bit_data.day)&0x3F);//д<>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪBCD<43><44>
BM8563_WriteReg( BM8563_HOUR, DecToBcd(pTime->bit_data.hour)&0x3F);//дСʱ<D0A1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪBCD<43><44>
BM8563_WriteReg( BM8563_WEEK, pTime->bit_data.week&0x07 );//д<>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ҫת
BM8563_WriteReg( BM8563_MIN, DecToBcd( pTime->bit_data.minute)&0x7F);//д<><D0B4><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪBCD<43><44>
// <20><EFBFBD><EBA3A8>ַ0x02<30><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bit7<74><37>CHʱ<48><CAB1>ֹͣλ<D6B9><CEBB>
reg_sec = BM8563_ReadReg(BM8563_SEC) & 0x80;
BM8563_WriteReg(BM8563_SEC, reg_sec | (DecToBcd(pTime->bit_data.second) & 0x7F));
// <20>֣<EFBFBD><D6A3><EFBFBD>ַ0x03<30><33>
BM8563_WriteReg(BM8563_MIN, DecToBcd(pTime->bit_data.minute) & 0x7F);
// Сʱ<D0A1><CAB1><EFBFBD><EFBFBD>ַ0x04<30><34><EFBFBD><EFBFBD>24Сʱ<D0A1><CAB1>
BM8563_WriteReg(BM8563_HOUR, DecToBcd(pTime->bit_data.hour) & 0x3F);
// <20>գ<EFBFBD><D5A3><EFBFBD>ַ0x05<30><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>λ
BM8563_WriteReg(BM8563_DAY, DecToBcd(pTime->bit_data.day) & 0x3F);
// <20>ܣ<EFBFBD><DCA3><EFBFBD>ַ0x06<30><36><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Χ1-7
BM8563_WriteReg(BM8563_WEEK, pTime->bit_data.week & 0x07);
// <20>£<EFBFBD><C2A3><EFBFBD>ַ0x07<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λд<CEBB><D0B4>Bit7<74><37><EFBFBD>·<EFBFBD>ռ<EFBFBD><D5BC>
month_bcd = DecToBcd(pTime->bit_data.month);
BM8563_WriteReg(BM8563_MONTH, (century_bit << 7) | (month_bcd & 0x1F));
// <20><EFBFBD><EAA3A8>ַ0x08<30><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>2024<32><34>0x24<32><34>
BM8563_WriteReg(BM8563_YEAR, DecToBcd(pTime->bit_data.year));
reg_sec = BM8563_ReadReg(BM8563_SEC) & 0x80;//
BM8563_WriteReg(BM8563_SEC, reg_sec | (DecToBcd(pTime->bit_data.second) & 0x7F));//ע<><D7A2><EFBFBD><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>ָʾ
}
/**
* @brief <20><>ȡBM8563<36><33>ǰʱ<C7B0><EFBFBD><E4B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param pTime: UnTimeOutput<75><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3A8><EFBFBD>ڴ洢<DAB4><E6B4A2>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
* @retval <20><>
*/
void bm8563GetTime(UnTimeOutput *pTime) {
if (pTime == NULL) {
return; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ
}
// <20><>ȡ<EFBFBD><EFBFBD><EBA3A8>ַ0x02<30><32>
pTime->bit_data.second = BcdToDec(BM8563_ReadReg(BM8563_SEC) & 0x7F); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чλ
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>ַ0x03<30><33>
pTime->bit_data.minute = BcdToDec(BM8563_ReadReg(BM8563_MIN) & 0x7F);
// <20><>ȡСʱ<D0A1><CAB1><EFBFBD><EFBFBD>ַ0x04<30><34>
pTime->bit_data.hour = BcdToDec(BM8563_ReadReg(BM8563_HOUR) & 0x3F); // 24Сʱ<D0A1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bit6-7
// <20><>ȡ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD>ַ0x05<30><35>
pTime->bit_data.day = BcdToDec(BM8563_ReadReg(BM8563_DAY) & 0x3F); // <20><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD>λ
// <20><>ȡ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>ַ0x06<30><36>BM8563<36><33>ֵΪ0x01-0x07<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BCDת<44><D7AA><EFBFBD><EFBFBD>
pTime->bit_data.week = BM8563_ReadReg(BM8563_WEEK) & 0x07; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ȡ<EFBFBD>£<EFBFBD><C2A3><EFBFBD>ַ0x07<30><37>
pTime->bit_data.month = BcdToDec(BM8563_ReadReg(BM8563_MONTH) & 0x1F); // <20><><EFBFBD><EFBFBD>Bit5-7
// <20><>ȡ<EFBFBD><EFBFBD><EAA3A8>ַ0x08<30><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ2000+<2B>
pTime->bit_data.year = BcdToDec(BM8563_ReadReg(BM8563_YEAR));
void bm8563GetTime(UnTimeOutput *pTime)
{
pTime->bit_data.year = BcdToDec(BM8563_ReadReg(BM8563_YEAR) );//<2F><>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>10<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pTime->bit_data.month = BcdToDec(BM8563_ReadReg(BM8563_MONTH)&0x1F);
pTime->bit_data.day = BcdToDec(BM8563_ReadReg(BM8563_DAY)&0x3F);
pTime->bit_data.hour = BcdToDec(BM8563_ReadReg(BM8563_HOUR)&0x3F);
pTime->bit_data.week = BM8563_ReadReg(BM8563_WEEK)&0x07;
pTime->bit_data.minute = BcdToDec(BM8563_ReadReg(BM8563_MIN)&0x7F);
pTime->bit_data.second = BcdToDec(BM8563_ReadReg(BM8563_SEC)&0x7F);
}
/**
* @brief <20><><EFBFBD><EFBFBD>BM8563<36><33><EFBFBD>ӣ<EFBFBD><D3A3>ֶ<EFBFBD>Ϊ0ʱ<30><CAB1><EFBFBD>ö<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param pTime: UnTimeOutput<75><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <20><>
*/
ubyte bm8563SetAlarm(UnTimeOutput *pTime) {
UnTimeOutput un_temp_output = {0};//<2F><><EFBFBD><EFBFBD><EFBFBD>趨ʱ<E8B6A8><CAB1>
ubyte bm8563SetAlarm(UnTimeOutput *pTime)
{
UnTimeOutput current_time_temp = {0};
UnTimeOutput output_time_temp = {0};
ubyte carry_hour = 0;
ubyte carry_day = 0;
ubyte month_days = 0;
//-------------------------------------------------
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
if( (pTime == NULL) || ( (0 == pTime->bit_data.minute) && (0 == pTime->bit_data.hour) && (0 == pTime->bit_data.day) ) )//<2F><><EFBFBD>ݶ<EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD>ָ<EFBFBD>붼Ϊ0
{
// <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return 1;
}
bm8563GetTime(&currenttime);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0-59<35><39>
un_temp_output.bit_data.minute = currenttime.bit_data.minute + pTime->bit_data.minute;
if (un_temp_output.bit_data.minute >= 60) {
un_temp_output.bit_data.minute -= 60;
carry_hour = 1; // <20><>Сʱ<D0A1><CAB1>λ
}
// Сʱ<D0A1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0-23<32><33>
un_temp_output.bit_data.hour = currenttime.bit_data.hour + pTime->bit_data.hour + carry_hour;
if (un_temp_output.bit_data.hour >= 24) {
un_temp_output.bit_data.hour -= 24;
carry_day = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8BFBC><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
un_temp_output.bit_data.day = currenttime.bit_data.day + pTime->bit_data.day + carry_day;
//2<>¿<EFBFBD><C2BF><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
month_days = getMonthDays( (currenttime.bit_data.year+2000),currenttime.bit_data.month);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8BFBC><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (un_temp_output.bit_data.day > month_days)
}
bm8563GetTime(&current_time_temp);//<2F>Ȼ<EFBFBD>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
output_time_temp.bit_data.minute = current_time_temp.bit_data.minute + pTime->bit_data.minute;
if( output_time_temp.bit_data.minute >= 60 )//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>λ
{
un_temp_output.bit_data.day -= month_days;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>죬BM8563<36><33><EFBFBD><EFBFBD>ֻ֧<D6BB><D6A7><EFBFBD><EFBFBD>ô<EFBFBD><C3B4>
if(un_temp_output.bit_data.day == currenttime.bit_data.day)
{
un_temp_output.bit_data.day = (currenttime.bit_data.day - 1);
}
output_time_temp.bit_data.minute = output_time_temp.bit_data.minute - 60;
carry_hour = 1;
}
un_temp_output.bit_data.week = 0;//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ַ0x09<30><39>
BM8563_WriteReg(BM8563_ALARM_MIN, DecToBcd(un_temp_output.bit_data.minute) & 0x7F); // AE_M=0<><30><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
// <20><><EFBFBD><EFBFBD>Сʱ<D0A1><CAB1><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ַ0x0A<30><41>
BM8563_WriteReg(BM8563_ALARM_HOUR, DecToBcd(un_temp_output.bit_data.hour) & 0x7F); // AE_H=0<><30><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
// <20>ձ<EFBFBD><D5B1><EFBFBD>/<2F>ܱ<EFBFBD><DCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BM8563_WriteReg(BM8563_ALARM_DAY, DecToBcd(un_temp_output.bit_data.day) & 0x7F); // AE_D=0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD>
BM8563_WriteReg(BM8563_ALARM_WEEK, 0x80); // AE_W=1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>
//<2F><><EFBFBD><EFBFBD>Сʱ
output_time_temp.bit_data.hour = current_time_temp.bit_data.hour + pTime->bit_data.hour + carry_hour;
if( output_time_temp.bit_data.hour >= 24 )//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>λ
{
output_time_temp.bit_data.hour = output_time_temp.bit_data.hour - 24;
carry_day = 1;
}
output_time_temp.bit_data.day = current_time_temp.bit_data.day + pTime->bit_data.day + carry_day;
if( output_time_temp.bit_data.day >= 31 )//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>λ
{
output_time_temp.bit_data.day = 31;
}
output_time_temp.bit_data.week = 0;
BM8563_WriteReg( BM8563_ALARM_DAY, DecToBcd(output_time_temp.bit_data.day)&0x3F);//д<>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪBCD<43><44>
BM8563_WriteReg( BM8563_ALARM_HOUR, DecToBcd(output_time_temp.bit_data.hour)&0x3F);//дСʱ<D0A1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪBCD<43><44>
BM8563_WriteReg( BM8563_ALARM_WEEK, 0x80 );//д<>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
BM8563_WriteReg( BM8563_ALARM_MIN, DecToBcd(output_time_temp.bit_data.minute)&0x7F);//д<><D0B4><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪBCD<43><44>
// <20><EFBFBD><EBA3A8>ַ0x02<30><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bit7<74><37>CHʱ<48><CAB1>ֹͣλ<D6B9><CEBB>
// ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD>ַ0x01<30><31>AIE=1<><31>AF=0<><30>
BM8563_WriteReg(BM8563_CSR2, 0x02);
return 0;
}
@@ -383,33 +302,3 @@ ubyte bm8563SetAlarm(UnTimeOutput *pTime) {
//// <20><><EFBFBD><EFBFBD> BM8563 <20><><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>ʵ<EFBFBD>ּ<EFBFBD><D6BC><EFBFBD> 4 Сʱ<D0A1>Ļ<EFBFBD><C4BB><EFBFBD>
//void BM8563_Set4HourAlarm()
//{
// unsigned char alarmMin = BcdToDec( BM8563_ReadReg(BM8563_MIN) );
// unsigned char alarmMinBcd = 0;
////------------------------------------------------------------
// alarmMin = (alarmMin + 2) % 60;//<2F><><EFBFBD><EFBFBD> 4 Сʱ<D0A1><CAB1><EFBFBD><EFBFBD>Сʱ<D0A1><CAB1>
// alarmMinBcd = DecToBcd(alarmMin);
// BM8563_WriteReg(BM8563_ALARM_MIN,alarmMinBcd&0x7F);// <20><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// BM8563_WriteReg(BM8563_ALARM_HOUR, 0x80); // <20><>Ч
// BM8563_WriteReg(BM8563_ALARM_DAY , 0x80); // <20><>Ч
// BM8563_WriteReg(BM8563_ALARM_WEEK, 0x80); // <20><>Ч
//
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><D3BF>ƼĴ<C6BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
// BM8563_WriteReg(BM8563_CSR2, 0x02);
//}

9
RTC.h
View File

@@ -8,8 +8,6 @@
typedef enum {
STATE_INIT = 0, // <20><>ʼ<EFBFBD><CABC>״̬<D7B4><CCAC><EFBFBD>״<EFBFBD><D7B4><EFBFBD><EFBFBD>У<EFBFBD>
STATE_ON, // ON״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ģʽ<C4A3><CABD>
STATE_OFF, // OFF״̬<D7B4><CCAC>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>
STATE_OFF2, // OFF2״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>أ<EFBFBD>
STATE_ON2 // ON2״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>
} SystemState;
@@ -38,7 +36,7 @@ typedef union _UnTimeOutput
extern unsigned char bySta;
extern UnTimeOutput currenttime;
extern UnTimeOutput un_time_output1;//<2F><><EFBFBD><EFBFBD><EFBFBD>趨ʱ<E8B6A8><CAB1>
extern UnTimeOutput inittime;// Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2025<32>꣬8<EAA3AC><38>2<EFBFBD><32> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16<31><36>37<33><37>00
// <20><><EFBFBD><EFBFBD> BM8563 <20><> I2C <20><>ַ
@@ -64,6 +62,8 @@ extern UnTimeOutput un_time_output1;//
#define BM8563_AF_BIT 0x08 // AF<41><46>־λ<D6BE><CEBB>Bit3<74><33>
unsigned char BcdToDec(unsigned char bcd);
ubyte leapYear(uword year);
void BM8563_InitTime();
void BM8563_Set4HourCountdown();
@@ -74,7 +74,8 @@ void bm8563GetTime(UnTimeOutput *pTime);
ubyte bm8563SetAlarm(UnTimeOutput *pTime);
void bm8563SetTime(UnTimeOutput *pTime);
bool bm8563CheckAlarmFlag(void);
void bm8563ClearAlarmFlag(void);
void iic_start(void);
void iic_stop(void);

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_

490
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,40 +17,45 @@ uword RgCanPerid = 1000;
UnTimeOutput sleeptime = {0};
UnTimeOutput waketime = {0};
UnTimeOutput currenttime = {0};
UnTimeOutput un_time_output1 = {0};//<2F><><EFBFBD><EFBFBD><EFBFBD>趨ʱ<E8B6A8><CAB1>
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;
@@ -90,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);
}
@@ -109,14 +114,14 @@ void canSendTo(ubyte index,ubyte *buf)
CanTransmitbuf[6] = buf[4];
CanTransmitbuf[7] = buf[5];
CanTransmitbuf[4] = buf[6];
CanTransmitbuf[5] = buf[7];
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)
{
//-----------------------------------
@@ -127,241 +132,79 @@ void CanTX(void)
UnInfCan_1.ArrData.Arr[0][7] = currenttime.bit_data.week;
UnInfCan_1.ArrData.Arr[0][6] = currenttime.bit_data.minute;
UnInfCan_1.ArrData.Arr[0][5] = currenttime.bit_data.second;
UnInfCan_1.ArrData.Arr[0][4] = sleepstate;
UnInfCan_1.ArrData.Arr[0][4] = waketime.bit_data.day;
CanTransmit();
}
//<EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//休眠处理函数
//------------------------------------------------------------------
void SystemStateMachine(SystemState *RgSTT)
{
ubyte i = 0;
//----------------------------------------------
switch (*RgSTT)
{
//-------------------------------------------
case STATE_INIT:
if(NORMAL == flg_wake_ecu)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(STOP_PIN == ON) //<2F><>ͣ<EFBFBD><CDA3><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD>
{
*RgSTT = STATE_ON; // <20><><EFBFBD><EFBFBD>ΪON<4F><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB9A4>״̬
wake_time_10min.bit_data.day = 0;
wake_time_10min.bit_data.hour = 0;
wake_time_10min.bit_data.week = 0;
wake_time_10min.bit_data.minute = 10;
bm8563ClearAlarmFlag(); //<2F><><EFBFBD><EFBFBD>0
bm8563SetAlarm(&wake_time_10min);//<2F><><EFBFBD><EFBFBD>10<31><30><EFBFBD><EFBFBD>
}
else
{
*RgSTT = STATE_OFF; // RTC<54><43><EFBFBD>ѣ<EFBFBD>ֱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>
}
}
else
{
*RgSTT = STATE_INIT;
}
break;
//-------------------------------------------
if(NORMAL == flg_wake_ecu)//控制器唤醒
{
bm8563SetAlarm(&waketime); //设置唤醒时间
memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput));
*RgSTT = STATE_ON;
}
else
{
*RgSTT = STATE_INIT;
}
break;
case STATE_ON:
if(bm8563CheckAlarmFlag() || ( (STOP_PIN == OFF) && (POWER_STANDBY == powerstate) ) || (WAKE_UP_PIN == OFF) )//10<31><30><EFBFBD>ӵ<EFBFBD><D3B5>˻<EFBFBD><CBBB>߰<EFBFBD><DFB0>¼<EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>߻<EFBFBD><DFBB>߹ر<DFB9><D8B1>ܿ<EFBFBD><DCBF><EFBFBD>
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
bm8563ClearAlarmFlag();
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_ON; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>
PS_vSetPowerDown();//<2F><><EFBFBD><EFBFBD>
}
else if( (POWER_WORKING == powerstate) || (POWER_EMERGENCY == powerstate) )//<2F><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>״̬
{
*RgSTT = STATE_ON2; // <20><><EFBFBD><EFBFBD>STATE_ON2
}
else
{
*RgSTT = STATE_ON; // <20><><EFBFBD><EFBFBD>
}
// <20><><EFBFBD><EFBFBD>ON״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
//-------------------------------------------
if(bm8563CheckAlarmFlag())//唤醒时间到以及高压开关关闭
{
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)))//比较值是否一样,不一样的话立马更新
{
memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput));
bm8563SetAlarm(&waketime);
*RgSTT = STATE_ON; // 保持状态(唤醒后由中断处理)
}
else if( (POWER_WORKING == powerstate) || (POWER_EMERGENCY == powerstate) )//等于工作状态
{
*RgSTT = STATE_ON2; // 进入STATE_ON2
}
else
{
*RgSTT = STATE_ON; // 保持
}
break;
case STATE_ON2:
if(POWER_STANDBY == powerstate)//<EFBFBD>µ<EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><EFBFBD><EFBFBD>ON<EFBFBD><EFBFBD>ʱ<EFBFBD>ж<EFBFBD>
{
*RgSTT = STATE_ON; //
wake_time_10min.bit_data.day = 0;
wake_time_10min.bit_data.hour = 0;
wake_time_10min.bit_data.week = 0;
wake_time_10min.bit_data.minute = 10;
bm8563ClearAlarmFlag(); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
bm8563SetAlarm(&wake_time_10min);//<2F><><EFBFBD><EFBFBD>10<31><30><EFBFBD><EFBFBD>
}
else if(WAKE_UP_PIN == OFF)//<2F>ܿ<EFBFBD><DCBF>عر<D8B9>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
bm8563ClearAlarmFlag();
bm8563SetAlarm(&sleeptime);
KGF_PIN = 0; //KGF<47><46><EFBFBD><EFBFBD>
CAN_PIN = 1; //canоƬ<D0BE><C6AC><EFBFBD><EFBFBD>
BATTERY_PIN = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*RgSTT = STATE_ON2; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>
PS_vSetPowerDown();//<2F><><EFBFBD><EFBFBD>
}
else
{
*RgSTT = STATE_ON2; // <20><><EFBFBD><EFBFBD>
}
break;
//-------------------------------------------
case STATE_OFF:
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´λ<C2B4><CEBB><EFBFBD>
bm8563ClearAlarmFlag();
bm8563SetAlarm(&waketime);
memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput));
*RgSTT = STATE_OFF2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD>
break;
//-------------------------------------------
case STATE_OFF2:
if (STOP_PIN == ON) //<2F>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
*RgSTT = STATE_ON; // <20><><EFBFBD><EFBFBD>ΪON<4F><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB9A4>״̬
wake_time_10min.bit_data.day = 0;
wake_time_10min.bit_data.hour = 0;
wake_time_10min.bit_data.week = 0;
wake_time_10min.bit_data.minute = 10;
bm8563ClearAlarmFlag(); //<2F><><EFBFBD><EFBFBD>0
bm8563SetAlarm(&wake_time_10min);//<2F><><EFBFBD><EFBFBD>10<31><30><EFBFBD><EFBFBD>
}
else if(POWER_WORKING == powerstate)//<2F><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>״̬
{
*RgSTT = STATE_ON2; // <20><><EFBFBD><EFBFBD>״̬
}
else if(0 != memcmp(&waketimelast,&waketime,sizeof(UnTimeOutput)))//<2F>Ƚ<EFBFBD>ֵ<EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput));
bm8563SetAlarm(&waketime);
*RgSTT = STATE_OFF2; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>
}
else if(bm8563CheckAlarmFlag()) //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
bm8563ClearAlarmFlag();
bm8563SetAlarm(&sleeptime);
KGF_PIN = 0; //KGF<47><46><EFBFBD><EFBFBD>
CAN_PIN = 1; //canоƬ<D0BE><C6AC><EFBFBD><EFBFBD>
BATTERY_PIN = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*RgSTT = STATE_OFF2; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>
PS_vSetPowerDown();//<2F><><EFBFBD><EFBFBD>
}
else
{
*RgSTT = STATE_OFF2; // <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>
}
break;
default:break;
}
// switch (*RgSTT)
// {
// //-------------------------------------------
// case STATE_INIT:
// if(1 == flgwakeecu)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// {
// if (WAKE_UP_PIN == ON) {
// *RgSTT = STATE_ON; // <20><><EFBFBD><EFBFBD>ΪON<4F><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB9A4>״̬
// } else {
// *RgSTT = STATE_OFF; // <20><><EFBFBD><EFBFBD>ΪOFF<46><46>ֱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>
// }
// }
// else
// {
// *RgSTT = STATE_INIT;
// }
// break;
// //-------------------------------------------
// case STATE_ON:
// if( (WAKE_UP_PIN == OFF) || ( (STOP_PIN == OFF) && (POWER_STANDBY == powerstate) ) )//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܿ<EFBFBD><DCBF>ضϿ<D8B6><CFBF><EFBFBD><EFBFBD>߼<EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>ذ<EFBFBD><D8B0><EFBFBD><EFBFBD>Ҵ<EFBFBD><D2B4><EFBFBD><EFBFBD>µ<EFBFBD>ģʽ
// {
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´λ<C2B4><CEBB><EFBFBD>
// bm8563SetAlarm(&sleeptime);
// *RgSTT = STATE_OFF; // <20><><EFBFBD><EFBFBD>ΪOFF<46><46>ֱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>
// KGF_PIN = 0; //KGF<47><46><EFBFBD><EFBFBD>
// CAN_PIN = 1; //canоƬ<D0BE><C6AC><EFBFBD><EFBFBD>
// PS_vSetPowerDown();//<2F><><EFBFBD><EFBFBD>
// }
// else
// {
// *RgSTT = STATE_ON; // <20><><EFBFBD><EFBFBD>ΪON<4F><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB9A4>״̬
// }
// // <20><><EFBFBD><EFBFBD>ON״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// break;
// //-------------------------------------------
// case STATE_OFF:
// if (WAKE_UP_PIN == ON) {
// *RgSTT = STATE_ON; // <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>
// } else {
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´λ<C2B4><CEBB><EFBFBD>
// bm8563SetAlarm(&waketime);
//
// memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput));
//
// *RgSTT = STATE_OFF2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD>
// }
// break;
// //-------------------------------------------
// case STATE_OFF2:
// if (WAKE_UP_PIN == ON) //<2F>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// {
// *RgSTT = STATE_ON; // <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>
// }
// else if(0 != memcmp(&waketimelast,&waketime,sizeof(UnTimeOutput)))//<2F>Ƚ<EFBFBD>ֵ<EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// {
// memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput));
// bm8563SetAlarm(&waketime);
// *RgSTT = STATE_OFF2; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>
// }
// else if (bm8563CheckAlarmFlag())
// {
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
// bm8563ClearAlarmFlag();
//
// bm8563SetAlarm(&sleeptime);
// KGF_PIN = 0; //KGF<47><46><EFBFBD><EFBFBD>
// CAN_PIN = 1; //canоƬ<D0BE><C6AC><EFBFBD><EFBFBD>
// *RgSTT = STATE_OFF2; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>
// PS_vSetPowerDown();//<2F><><EFBFBD><EFBFBD>
// }
// else
// {
// *RgSTT = STATE_OFF2; // <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>
// }
// break;
// default:break;
// }
if( POWER_STANDBY == powerstate )//总开关关闭或者进入standy
{
bm8563SetTime(&inittime);//20250802 初始化时间 解决因为时间不对导致无法休眠问题
bm8563SetAlarm(&sleeptime);
KGF_PIN = 0; //KGF休眠
CAN_PIN = 1; //can芯片休眠
BATTERY_PIN = 0;//电池休眠
*RgSTT = STATE_INIT; // 保持状态(唤醒后由中断处理)
PS_vSetPowerDown();//休眠
}
else
{
*RgSTT = STATE_ON2; // 保持
}
break;
default:;
}
}
//CAN<41><4E><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
//CAN发送接收
void CanRXTX(void)
{
stCAN_SWObj StrCanRx = {0};
@@ -391,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);
@@ -402,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);
}
//----------------------------------------------------------
@@ -417,47 +278,54 @@ void CanRXTX(void)
UnInfCan_1.ArrData.ArrRX[0][6] = StrCanRx.ulDATAH.ubDB[1];
UnInfCan_1.ArrData.ArrRX[0][5] = StrCanRx.ulDATAH.ubDB[2];
UnInfCan_1.ArrData.ArrRX[0][4] = StrCanRx.ulDATAH.ubDB[3];
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>
// <20><><EFBFBD><EFBFBD> <20><> Сʱ
//设定休眠时间
TimeTemp = UnInfCan_1.ArrData.ArrRX[0][0] + ((ulong)UnInfCan_1.ArrData.ArrRX[0][1] << 8) ;//唤醒时间
if(TimeTemp >= MAX_TIME)//最大限制值30天
{
TimeTemp = MAX_TIME;
}
// 分钟 → 小时
HoursTemp = TimeTemp / 60;
sleeptime.bit_data.minute = TimeTemp % 60;
// Сʱ <20><> <20><>
// 小时 → 天
DaysTemp = HoursTemp / 24;
sleeptime.bit_data.hour = HoursTemp % 24;
if(DaysTemp >= 31)//<EFBFBD>³<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
if(DaysTemp >= 30)//日超过范围
{
sleeptime.bit_data.day = 31;
sleeptime.bit_data.day = 30;
}
else
{
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>
// <20><><EFBFBD><EFBFBD> <20><> Сʱ
//设定唤醒时间
TimeTemp = UnInfCan_1.ArrData.ArrRX[0][2] + ((ulong)UnInfCan_1.ArrData.ArrRX[0][3] << 8);//唤醒时间
if(TimeTemp > MAX_TIME)//最大限制值30天
{
TimeTemp = MAX_TIME;
}
// 分钟 → 小时
HoursTemp = TimeTemp / 60;
waketime.bit_data.minute = TimeTemp % 60;
// Сʱ <20><> <20><>
// 小时 → 天
DaysTemp = HoursTemp / 24;
waketime.bit_data.hour = HoursTemp % 24;
if(DaysTemp >= 31)//<EFBFBD>³<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
if(DaysTemp >= 30)//日超过范围
{
waketime.bit_data.day = 31;
waketime.bit_data.day = 30;
}
else
{
@@ -465,71 +333,103 @@ void CanRXTX(void)
}
}
UnSwSample_1.arr[2] = waketime.bit_data.minute;
UnSwSample_1.arr[1] = sleeptime.bit_data.minute;
//<2F><><EFBFBD>ߴ<EFBFBD><DFB4><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>
// CanTX();
bm8563GetTime(&currenttime);//1s更新一次时钟
UnSwSample_1.bit_data.temperature[1] = 0;
UnSwSample_1.bit_data.temperature[0] = 0;
// 读取分钟地址0x03
UnSwSample_1.arr[4] = (BM8563_ReadReg(BM8563_ALARM_MIN));
// 读取小时地址0x04
UnSwSample_1.arr[2] = (BM8563_ReadReg(BM8563_ALARM_HOUR)); // 24小时制需屏蔽Bit6-7
// 读取日地址0x05
UnSwSample_1.arr[1] = (BM8563_ReadReg(BM8563_ALARM_DAY)); // 屏蔽控制位
// 读取日地址0x05
UnSwSample_1.arr[5] = (BM8563_ReadReg(BM8563_ALARM_DAY)); // 屏蔽控制位
// 读取周地址0x06BM8563周值为0x01-0x07无需BCD转换
UnSwSample_1.arr[3] = BM8563_ReadReg(BM8563_ALARM_WEEK); // 仅保留低3位
CanTX();
if(vcu_can_cnt == vcu_can_last)//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
if(1 == flg_KGF)//等待KGF唤醒后再发送数据
{
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]);
}
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_output2.bit_data.KGF04 = 0x01;//KGF20<32>ӵ<EFBFBD><D3B5><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>
{
canSendTo(DF_SwTxKGF2,(ubyte *)&un_inf_can_kgf_output2.arr[0]);
canSendTo(DF_SwTxKGF1,(ubyte *)&un_inf_can_kgf_output1.arr[0]);
}
flg_wake_ecu = FAULT;
}
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>
GetTemp();//1s采集一次温度
UnSwSample_1.bit_data.emergency_stop_switch = STOP_PIN;
UnSwSample_1.bit_data.High_voltage_switch = ~WAKE_UP_PIN;
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);
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();
can_error_cnt = 0;
}
}

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[i] = (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*/

55
user.H
View File

@@ -8,7 +8,9 @@
#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>
#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
@@ -21,21 +23,18 @@
#define BATTERY_PIN P3_6 //<2F><><EFBFBD>ؿ<EFBFBD><D8BF>ƽ<EFBFBD>
#define ON 0 //<2F><><EFBFBD><EFBFBD>
#define OFF 1 //<2F>ɿ<EFBFBD>
#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;
@@ -95,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>---------------------------------------------------------------------
@@ -104,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);