Compare commits
9 Commits
main
...
car-4while
| Author | SHA1 | Date | |
|---|---|---|---|
| c8b47e57ab | |||
| daa4fd6bd3 | |||
| 4f4a1635ab | |||
| 4ed261893e | |||
| e5fe7833e6 | |||
| b5f2f3bc5f | |||
| ad771ee812 | |||
| 93baee9527 | |||
| 517a5f9ebb |
9
.vscode/settings.json
vendored
Normal file
9
.vscode/settings.json
vendored
Normal 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
387
CAN.C
@@ -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
12
CAN.H
@@ -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
|
||||
//
|
||||
//****************************************************************************
|
||||
|
||||
|
||||
86
CL2.0.asm
86
CL2.0.asm
@@ -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
|
||||
|
||||
110
CL2.0.dpt
110
CL2.0.dpt
@@ -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
107
CL2.0.rtf
@@ -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
50
CL2.0.uvopt
50
CL2.0.uvopt
@@ -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>
|
||||
|
||||
19
CL2.0.uvproj
19
CL2.0.uvproj
@@ -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
49
IO.C
@@ -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
33
MAIN.C
@@ -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
297
RTC.c
@@ -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>5λ
|
||||
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>3λ
|
||||
|
||||
// <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(¤ttime);
|
||||
|
||||
// <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(¤t_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
9
RTC.h
@@ -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);
|
||||
|
||||
83
SHARED_INT.C
83
SHARED_INT.C
@@ -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
|
||||
|
||||
@@ -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
181
T21.C
Normal 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
104
T21.H
Normal 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_
|
||||
489
User.c
489
User.c
@@ -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日 周日,0:0:00
|
||||
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,104 @@ 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(¤ttime);//1s<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
||||
// CanTX();
|
||||
bm8563GetTime(¤ttime);//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)); // 屏蔽控制位
|
||||
|
||||
// 读取周(地址0x06,BM8563周值为0x01-0x07,无需BCD转换)
|
||||
UnSwSample_1.arr[3] = BM8563_ReadReg(BM8563_ALARM_WEEK); // 仅保留低3位
|
||||
|
||||
CanTX();
|
||||
|
||||
if(vcu_can_cnt == vcu_can_last)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(vcu_can_cnt == vcu_can_last)//数据一样表示故障
|
||||
{
|
||||
flg_wake_ecu = FAULT;
|
||||
|
||||
un_inf_can_kgf_output2.bit_data.KGF01 = 0x01;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
un_inf_can_kgf_output2.bit_data.KGF02 = 0x01;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
un_inf_can_kgf_output2.bit_data.KGF15 = 0x01;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
un_inf_can_kgf_output2.bit_data.KGF16 = 0x01;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
un_inf_can_kgf_output2.bit_data.KGF03 = 0x01;// ң<><D2A3><EFBFBD><EFBFBD>
|
||||
un_inf_can_kgf_output2.bit_data.KGF05 = 0x01;// <20><><EFBFBD>罻<EFBFBD><E7BDBB><EFBFBD><EFBFBD>
|
||||
un_inf_can_kgf_output2.bit_data.KGF06 = 0x01;// <20><><EFBFBD>罻<EFBFBD><E7BDBB><EFBFBD><EFBFBD>
|
||||
|
||||
un_inf_can_kgf_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>
|
||||
flg_wake_ecu = FAULT;
|
||||
|
||||
if(1 == flg_KGF)//等待KGF唤醒后再发送数据
|
||||
{
|
||||
canSendTo(DF_SwTxKGF2,(ubyte *)&un_inf_can_kgf_output2.arr[0]);
|
||||
canSendTo(DF_SwTxKGF1,(ubyte *)&un_inf_can_kgf_output1.arr[0]);
|
||||
un_inf_can_kgf_output3.bit_data.KGF01 = un_sample_kgf_command.bit_data.KGF01_CH01_Reserve | un_inf_can_kgf_output1.bit_data.KGF01;
|
||||
un_inf_can_kgf_output3.bit_data.KGF02 = un_sample_kgf_command.bit_data.KGF01_CH02_Reserve | un_inf_can_kgf_output1.bit_data.KGF02;
|
||||
un_inf_can_kgf_output3.bit_data.KGF03 = un_sample_kgf_command.bit_data.KGF01_CH03_Reserve | un_inf_can_kgf_output1.bit_data.KGF03;
|
||||
un_inf_can_kgf_output3.bit_data.KGF04 = un_sample_kgf_command.bit_data.KGF01_PrechargeRelay | un_inf_can_kgf_output1.bit_data.KGF04;
|
||||
un_inf_can_kgf_output3.bit_data.KGF05 = un_sample_kgf_command.bit_data.KGF01_CH05_Reserve | un_inf_can_kgf_output1.bit_data.KGF05;
|
||||
un_inf_can_kgf_output3.bit_data.KGF06 = un_sample_kgf_command.bit_data.KGF01_CH06_Reserve | un_inf_can_kgf_output1.bit_data.KGF06;
|
||||
un_inf_can_kgf_output3.bit_data.KGF07 = un_sample_kgf_command.bit_data.KGF01_HighVoltageRelayA | un_inf_can_kgf_output1.bit_data.KGF07;
|
||||
un_inf_can_kgf_output3.bit_data.KGF08 = un_sample_kgf_command.bit_data.KGF01_HighVoltageRelayB | un_inf_can_kgf_output1.bit_data.KGF08;
|
||||
un_inf_can_kgf_output3.bit_data.KGF09 = un_sample_kgf_command.bit_data.KGF01_CH09_Reserve | un_inf_can_kgf_output1.bit_data.KGF09;
|
||||
un_inf_can_kgf_output3.bit_data.KGF10 = un_sample_kgf_command.bit_data.KGF01_CH10_Reserve | un_inf_can_kgf_output1.bit_data.KGF10;
|
||||
un_inf_can_kgf_output3.bit_data.KGF11 = un_sample_kgf_command.bit_data.KGF01_LowVoltageRelayA | un_inf_can_kgf_output1.bit_data.KGF11;
|
||||
un_inf_can_kgf_output3.bit_data.KGF12 = un_sample_kgf_command.bit_data.KGF01_LowVoltageRelayB | un_inf_can_kgf_output1.bit_data.KGF12;
|
||||
un_inf_can_kgf_output3.bit_data.KGF13 = un_sample_kgf_command.bit_data.KGF01_LowVoltageCharge | un_inf_can_kgf_output1.bit_data.KGF13;
|
||||
un_inf_can_kgf_output3.bit_data.KGF14 = un_sample_kgf_command.bit_data.KGF01_CH14_Reserve | un_inf_can_kgf_output1.bit_data.KGF14;
|
||||
un_inf_can_kgf_output3.bit_data.KGF15 = un_sample_kgf_command.bit_data.KGF01_CH15_Reserve | un_inf_can_kgf_output1.bit_data.KGF15;
|
||||
un_inf_can_kgf_output3.bit_data.KGF16 = un_sample_kgf_command.bit_data.KGF01_CH16_Reserve | un_inf_can_kgf_output1.bit_data.KGF16;
|
||||
|
||||
un_inf_can_kgf_output4.bit_data.KGF01 = un_sample_kgf_command.bit_data.KGF02_ComputerPowerA | un_inf_can_kgf_output2.bit_data.KGF01;
|
||||
un_inf_can_kgf_output4.bit_data.KGF02 = un_sample_kgf_command.bit_data.KGF02_ComputerPowerB | un_inf_can_kgf_output2.bit_data.KGF02;
|
||||
un_inf_can_kgf_output4.bit_data.KGF03 = un_sample_kgf_command.bit_data.KGF02_RemotePower | un_inf_can_kgf_output2.bit_data.KGF03;
|
||||
un_inf_can_kgf_output4.bit_data.KGF04 = un_sample_kgf_command.bit_data.KGF02_VcuE3Power | un_inf_can_kgf_output2.bit_data.KGF04;
|
||||
un_inf_can_kgf_output4.bit_data.KGF05 = un_sample_kgf_command.bit_data.KGF02_NetworkSwitchPowerA | un_inf_can_kgf_output2.bit_data.KGF05;
|
||||
un_inf_can_kgf_output4.bit_data.KGF06 = un_sample_kgf_command.bit_data.KGF02_NetworkSwitchPowerB | un_inf_can_kgf_output2.bit_data.KGF06;
|
||||
un_inf_can_kgf_output4.bit_data.KGF07 = un_sample_kgf_command.bit_data.KGF02_LeftHeadlightA | un_inf_can_kgf_output2.bit_data.KGF07;
|
||||
un_inf_can_kgf_output4.bit_data.KGF08 = un_sample_kgf_command.bit_data.KGF02_LeftHeadlightB | un_inf_can_kgf_output2.bit_data.KGF08;
|
||||
un_inf_can_kgf_output4.bit_data.KGF09 = un_sample_kgf_command.bit_data.KGF02_RightHeadlightA | un_inf_can_kgf_output2.bit_data.KGF09;
|
||||
un_inf_can_kgf_output4.bit_data.KGF10 = un_sample_kgf_command.bit_data.KGF02_RightHeadlightB | un_inf_can_kgf_output2.bit_data.KGF10;
|
||||
un_inf_can_kgf_output4.bit_data.KGF11 = un_sample_kgf_command.bit_data.KGF02_LeftTaillightA | un_inf_can_kgf_output2.bit_data.KGF11;
|
||||
un_inf_can_kgf_output4.bit_data.KGF12 = un_sample_kgf_command.bit_data.KGF02_LeftTaillightB | un_inf_can_kgf_output2.bit_data.KGF12;
|
||||
un_inf_can_kgf_output4.bit_data.KGF13 = un_sample_kgf_command.bit_data.KGF02_RightTaillightA | un_inf_can_kgf_output2.bit_data.KGF13;
|
||||
un_inf_can_kgf_output4.bit_data.KGF14 = un_sample_kgf_command.bit_data.KGF02_RightTaillightB | un_inf_can_kgf_output2.bit_data.KGF14;
|
||||
un_inf_can_kgf_output4.bit_data.KGF15 = un_sample_kgf_command.bit_data.KGF02_ComputerPowerC | un_inf_can_kgf_output2.bit_data.KGF15;
|
||||
un_inf_can_kgf_output4.bit_data.KGF16 = un_sample_kgf_command.bit_data.KGF02_ComputerPowerD | un_inf_can_kgf_output2.bit_data.KGF16;
|
||||
|
||||
canSendTo(DF_SwTxKGF1,(ubyte *)&un_inf_can_kgf_output3.arr[0]);
|
||||
canSendTo(DF_SwTxKGF2,(ubyte *)&un_inf_can_kgf_output4.arr[0]);
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
flg_wake_ecu = NORMAL;
|
||||
vcu_can_last = vcu_can_cnt;//<EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><EFBFBD><EFBFBD>
|
||||
vcu_can_last = vcu_can_cnt;//数据更新
|
||||
}
|
||||
|
||||
GetTemp();//1s<EFBFBD>ɼ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>
|
||||
UnSwSample_1.bit_data.emergency_stop_switch = STOP_PIN;
|
||||
UnSwSample_1.bit_data.High_voltage_switch = ~WAKE_UP_PIN;
|
||||
GetTemp();//1s采集一次温度
|
||||
UnSwSample_1.bit_data.emergency_stop_switch = 0;
|
||||
UnSwSample_1.bit_data.High_voltage_switch = 1;
|
||||
UnSwSample_1.bit_data.CH03 = flg_wake_ecu;
|
||||
|
||||
if(1 == flg_KGF)//<EFBFBD>ȴ<EFBFBD>KGF<EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD>ٷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(1 == flg_KGF)//等待KGF唤醒后再发送数据
|
||||
{
|
||||
canSendTo(DF_SwTxTemp,(ubyte *)&UnSwSample_1);
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
196
temperature.C
196
temperature.C
@@ -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;
|
||||
//}
|
||||
|
||||
@@ -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*/
|
||||
|
||||
61
user.H
61
user.H
@@ -8,19 +8,20 @@
|
||||
#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
|
||||
|
||||
|
||||
#define WAKE_UP_PIN P1_4 //<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define WAKE_UP_PIN P1_5 //<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define KGF_PIN P0_0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define CAN_PIN P1_6 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define STOP_PIN P1_2 //<2F><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
#define BATTERY_PIN P3_6 //<2F><><EFBFBD>ؿ<EFBFBD><D8BF>ƽ<EFBFBD>
|
||||
#define STOP_PIN P3_6 //<2F><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
#define BATTERY_PIN P0_0 //<2F><><EFBFBD>ؿ<EFBFBD><D8BF>ƽ<EFBFBD>
|
||||
|
||||
#define ON 0 //<2F><><EFBFBD><EFBFBD>
|
||||
#define OFF 1 //<2F>ɿ<EFBFBD>
|
||||
@@ -28,14 +29,12 @@
|
||||
#define FAULT 0
|
||||
#define NORMAL 1
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ״̬ö<CCAC><C3B6>
|
||||
typedef enum {
|
||||
POWER_STANDBY,
|
||||
POWER_WORKING,
|
||||
POWER_EMERGENCY,
|
||||
POWER_PRE_CHARGE,
|
||||
POWER_NEUTRAL,
|
||||
POWER_SLEEP
|
||||
} PowerState;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user