Engine idle, Generating 시퀀스 수정

This commit is contained in:
2026-04-15 09:40:00 +09:00
parent ac74d913e9
commit cb90da835b
8 changed files with 303 additions and 377 deletions

161
Comm.c
View File

@@ -310,8 +310,8 @@ void CSendECanDataA(void)
// ---------------------------------------------------------
Uint32 ulTxMask = 0x0E3F8423UL;
ECanaRegs.CANTRS.all = ulTxMask;
ECanaRegs.CANTA.all = ulTxMask;
ECanaRegs.CANTRS.all = ulTxMask;
}
static void CInitECanA(void)
@@ -777,13 +777,17 @@ interrupt void CECanInterruptB(void)
void CSendECanDataB(void)
{
struct ECAN_REGS ECanShadow;
static Uint16 uiTxDivid = 0U; // 분산 송신
float32 fTemp = 0.0F;
Uint16 uiTemp = 0U;
Uint16 EmergencySig = ((GeneralOperValue.uiEmergency > 0U) || (KeyOperValue.KeyList.Emergency > 0U)) ? 1U : 0U;
// ---------------------------------------------------------
// 송신 메일박스 마스크 설정 및 전송 트리거
// 10ms interval MBOX 마스크 (1, 2, 3)
// ---------------------------------------------------------
Uint32 ulTxMask = 0x000EUL;
// 10ms
// [101h]
// --- BYTE 0 ---
@@ -797,14 +801,9 @@ void CSendECanDataB(void)
uiTemp |= CPackBit((GPIO_FAIL_SAFE_READ() == false) ? 1U : 0U, 3U);
Tx101.DcuState = uiTemp;
ECanbMboxes.MBOX1.MDL.byte.BYTE0 = Tx101.PlayState;
ECanbMboxes.MBOX1.MDL.byte.BYTE1 = Tx101.DcuState;
ECanbMboxes.MBOX1.MDL.byte.BYTE2 = 0x0U;
ECanbMboxes.MBOX1.MDL.byte.BYTE3 = 0x0U;
ECanbMboxes.MBOX1.MDH.byte.BYTE4 = 0x0U;
ECanbMboxes.MBOX1.MDH.byte.BYTE5 = 0x0U;
ECanbMboxes.MBOX1.MDH.byte.BYTE6 = 0x0U;
ECanbMboxes.MBOX1.MDH.byte.BYTE7 = 0x0U;
// BYTE 0(PlayState), BYTE 1(DcuState), BYTE 3(DCUversionMinor), BYTE 4~7(Reserved)
ECanbMboxes.MBOX1.MDL.all = CPackMboxData(Tx101.PlayState, Tx101.DcuState, 0U, 0U);
ECanbMboxes.MBOX1.MDH.all = CPackMboxData(0U, 0U, 0U, 0U);
// [102h]
// --- BYTE 0 ---
@@ -814,18 +813,12 @@ void CSendECanDataB(void)
uiTemp |= CPackBit(EmergencySig, 5U);
Tx102.GcuCommand = uiTemp;
ECanbMboxes.MBOX2.MDL.byte.BYTE0 = Tx102.GcuCommand;
ECanbMboxes.MBOX2.MDL.byte.BYTE1 = 0x0U;
ECanbMboxes.MBOX2.MDL.byte.BYTE2 = 0x0U;
ECanbMboxes.MBOX2.MDL.byte.BYTE3 = 0x0U;
ECanbMboxes.MBOX2.MDH.byte.BYTE4 = 0x0U;
ECanbMboxes.MBOX2.MDH.byte.BYTE5 = 0x0U;
ECanbMboxes.MBOX2.MDH.byte.BYTE6 = 0x0U;
ECanbMboxes.MBOX2.MDH.byte.BYTE7 = 0x0U;
// BYTE 0(PlayState), BYTE 1~7(Reserved)
ECanbMboxes.MBOX2.MDL.all = CPackMboxData(Tx102.GcuCommand, 0U, 0U, 0U);
ECanbMboxes.MBOX2.MDH.all = CPackMboxData(0U, 0U, 0U, 0U);
// [103h]
// --- BYTE 0~7 ---
uiTemp = 0U;
Tx103.EngineStart = GeneralOperValue.EcuCommand.EngineStart;
Tx103.EngineStop = GeneralOperValue.EcuCommand.EngineStop;
Tx103.FaultReset = GeneralOperValue.uiAlarmReset;
@@ -833,29 +826,8 @@ void CSendECanDataB(void)
Tx103.ActiveOverride = KeyOperValue.KeyList.BattleMode;
Tx103.EmergencyStop = EmergencySig;
ECanbMboxes.MBOX3.MDL.byte.BYTE0 = Tx103.EngineStart;
ECanbMboxes.MBOX3.MDL.byte.BYTE1 = Tx103.EngineStop;
ECanbMboxes.MBOX3.MDL.byte.BYTE2 = Tx103.FaultReset;
ECanbMboxes.MBOX3.MDL.byte.BYTE3 = 0x0U;
ECanbMboxes.MBOX3.MDH.byte.BYTE4 = ((Tx103.RpmSetpoint >> 0U) & 0xFFU);
ECanbMboxes.MBOX3.MDH.byte.BYTE5 = ((Tx103.RpmSetpoint >> 8U) & 0xFFU);
ECanbMboxes.MBOX3.MDH.byte.BYTE6 = Tx103.ActiveOverride;
ECanbMboxes.MBOX3.MDH.byte.BYTE7 = Tx103.EmergencyStop;
ECanShadow.CANTRS.all = ECanbRegs.CANTRS.all;
ECanShadow.CANTRS.bit.TRS1 = 1U; // 101h
ECanShadow.CANTRS.bit.TRS2 = 1U; // 102h
ECanShadow.CANTRS.bit.TRS3 = 1U; // 103h
ECanbRegs.CANTRS.all = ECanShadow.CANTRS.all;
ECanShadow.CANTA.all = ECanbRegs.CANTA.all;
ECanShadow.CANTA.bit.TA1 = 1U; // 101h
ECanShadow.CANTA.bit.TA2 = 1U; // 102h
ECanShadow.CANTA.bit.TA3 = 1U; // 103h
ECanbRegs.CANTA.all = ECanShadow.CANTA.all;
ECanShadow.CANTRS.all = ECanbRegs.CANTRS.all;
ECanShadow.CANTA.all = ECanbRegs.CANTA.all;
ECanbMboxes.MBOX3.MDL.all = CPackMboxData(Tx103.EngineStart, Tx103.EngineStop, Tx103.FaultReset, 0U);
ECanbMboxes.MBOX3.MDH.all = CPackMboxData(((Tx103.RpmSetpoint >> 0U) & 0xFFU), ((Tx103.RpmSetpoint >> 8U) & 0xFFU), Tx103.ActiveOverride, Tx103.EmergencyStop);
switch (uiTxDivid)
{
@@ -867,17 +839,10 @@ void CSendECanDataB(void)
Tx100.VersionMinor = (Uint16)FIRMWARE_VERSION_MINOR;
Tx100.VersionPatch = (Uint16)FIRMWARE_VERSION_PATCH;
ECanbMboxes.MBOX0.MDL.byte.BYTE0 = ((Tx100.Heartbit >> 0U) & 0xFFU);
ECanbMboxes.MBOX0.MDL.byte.BYTE1 = ((Tx100.Heartbit >> 8U) & 0xFFU);
ECanbMboxes.MBOX0.MDL.byte.BYTE2 = 0x0U;
ECanbMboxes.MBOX0.MDL.byte.BYTE3 = 0x0U;
ECanbMboxes.MBOX0.MDH.byte.BYTE4 = 0x0U;
ECanbMboxes.MBOX0.MDH.byte.BYTE5 = Tx100.VersionMajor;
ECanbMboxes.MBOX0.MDH.byte.BYTE6 = Tx100.VersionMinor;
ECanbMboxes.MBOX0.MDH.byte.BYTE7 = Tx100.VersionPatch;
ECanbMboxes.MBOX0.MDL.all = CPackMboxData(((Tx100.Heartbit >> 0U) & 0xFFU), ((Tx100.Heartbit >> 8U) & 0xFFU), 0U, 0U);
ECanbMboxes.MBOX0.MDH.all = CPackMboxData(0U, Tx100.VersionMajor, Tx100.VersionMinor, Tx100.VersionPatch);
ECanShadow.CANTRS.bit.TRS0 = 1U;
ECanShadow.CANTA.bit.TA0 = 1U;
ulTxMask |= (1UL << 0U); // MBOX 0
break;
}
case 1U:
@@ -888,17 +853,10 @@ void CSendECanDataB(void)
Tx110.DcuFaultB2 = ((Uint16)(ulDcuTotalAlarm >> 16U) & 0xFFU); // Apu Fault Byte 2
Tx110.DcuFaultB3 = ((Uint16)(ulDcuTotalAlarm >> 24U) & 0xFFU); // Apu Fault Byte 3
ECanbMboxes.MBOX4.MDL.byte.BYTE0 = Tx110.DcuFaultB0;
ECanbMboxes.MBOX4.MDL.byte.BYTE1 = Tx110.DcuFaultB1;
ECanbMboxes.MBOX4.MDL.byte.BYTE2 = Tx110.DcuFaultB2;
ECanbMboxes.MBOX4.MDL.byte.BYTE3 = Tx110.DcuFaultB3;
ECanbMboxes.MBOX4.MDH.byte.BYTE4 = 0x0U;
ECanbMboxes.MBOX4.MDH.byte.BYTE5 = 0x0U;
ECanbMboxes.MBOX4.MDH.byte.BYTE6 = 0x0U;
ECanbMboxes.MBOX4.MDH.byte.BYTE7 = 0x0U;
ECanbMboxes.MBOX4.MDL.all = CPackMboxData(Tx110.DcuFaultB0, Tx110.DcuFaultB1, Tx110.DcuFaultB2, Tx110.DcuFaultB3);
ECanbMboxes.MBOX4.MDH.all = CPackMboxData(0U, 0U, 0U, 0U);
ECanShadow.CANTRS.bit.TRS4 = 1U;
ECanShadow.CANTA.bit.TA4 = 1U;
ulTxMask |= (1UL << 4U); // MBOX 4
break;
}
case 2U:
@@ -906,17 +864,10 @@ void CSendECanDataB(void)
// [120h]
Tx120.AuxTotal = (Uint16)GET_ALL_AUX_STATUS();
ECanbMboxes.MBOX5.MDL.byte.BYTE0 = Tx120.AuxTotal;
ECanbMboxes.MBOX5.MDL.byte.BYTE1 = 0x0U;
ECanbMboxes.MBOX5.MDL.byte.BYTE2 = 0x0U;
ECanbMboxes.MBOX5.MDL.byte.BYTE3 = 0x0U;
ECanbMboxes.MBOX5.MDH.byte.BYTE4 = 0x0U;
ECanbMboxes.MBOX5.MDH.byte.BYTE5 = 0x0U;
ECanbMboxes.MBOX5.MDH.byte.BYTE6 = 0x0U;
ECanbMboxes.MBOX5.MDH.byte.BYTE7 = 0x0U;
ECanbMboxes.MBOX5.MDL.all = CPackMboxData(Tx120.AuxTotal, 0U, 0U, 0U);
ECanbMboxes.MBOX5.MDH.all = CPackMboxData(0U, 0U, 0U, 0U);
ECanShadow.CANTRS.bit.TRS5 = 1U;
ECanShadow.CANTA.bit.TA5 = 1U;
ulTxMask |= (1UL << 5U); // MBOX 5
break;
}
case 3U:
@@ -934,17 +885,12 @@ void CSendECanDataB(void)
fTemp = Adc_GlowPlug_I.fLpfValue * 10.0F;
Tx121.GlowPlugCurrent = (Uint16)fTemp;
ECanbMboxes.MBOX6.MDL.byte.BYTE0 = ((Tx121.EngHeatVoltage >> 0U) & 0xFFU);
ECanbMboxes.MBOX6.MDL.byte.BYTE1 = ((Tx121.EngHeatVoltage >> 8U) & 0xFFU);
ECanbMboxes.MBOX6.MDL.byte.BYTE2 = ((Tx121.EngHeatCurrent >> 0U) & 0xFFU);
ECanbMboxes.MBOX6.MDL.byte.BYTE3 = ((Tx121.EngHeatCurrent >> 8U) & 0xFFU);
ECanbMboxes.MBOX6.MDH.byte.BYTE4 = ((Tx121.GlowPlugVoltage >> 0U) & 0xFFU);
ECanbMboxes.MBOX6.MDH.byte.BYTE5 = ((Tx121.GlowPlugVoltage >> 8U) & 0xFFU);
ECanbMboxes.MBOX6.MDH.byte.BYTE6 = ((Tx121.GlowPlugCurrent >> 0U) & 0xFFU);
ECanbMboxes.MBOX6.MDH.byte.BYTE7 = ((Tx121.GlowPlugCurrent >> 8U) & 0xFFU);
ECanbMboxes.MBOX6.MDL.all = CPackMboxData(((Tx121.EngHeatVoltage >> 0U) & 0xFFU), ((Tx121.EngHeatVoltage >> 8U) & 0xFFU),
((Tx121.EngHeatCurrent >> 0U) & 0xFFU), ((Tx121.EngHeatCurrent >> 8U) & 0xFFU));
ECanbMboxes.MBOX6.MDH.all = CPackMboxData(((Tx121.GlowPlugVoltage >> 0U) & 0xFFU), ((Tx121.GlowPlugVoltage >> 8U) & 0xFFU),
((Tx121.GlowPlugCurrent >> 0U) & 0xFFU), ((Tx121.GlowPlugCurrent >> 8U) & 0xFFU));
ECanShadow.CANTRS.bit.TRS6 = 1U;
ECanShadow.CANTA.bit.TA6 = 1U;
ulTxMask |= (1UL << 6U); // MBOX 6
break;
}
case 4U:
@@ -962,17 +908,12 @@ void CSendECanDataB(void)
fTemp = Adc_FuelPump_I.fLpfValue * 10.0F;
Tx122.FuelPumpCurrent = (Uint16)fTemp;
ECanbMboxes.MBOX7.MDL.byte.BYTE0 = ((Tx122.SolenoidVoltage >> 0U) & 0xFFU);
ECanbMboxes.MBOX7.MDL.byte.BYTE1 = ((Tx122.SolenoidVoltage >> 8U) & 0xFFU);
ECanbMboxes.MBOX7.MDL.byte.BYTE2 = ((Tx122.SolenoidCurrent >> 0U) & 0xFFU);
ECanbMboxes.MBOX7.MDL.byte.BYTE3 = ((Tx122.SolenoidCurrent >> 8U) & 0xFFU);
ECanbMboxes.MBOX7.MDH.byte.BYTE4 = ((Tx122.FuelPumpVoltage >> 0U) & 0xFFU);
ECanbMboxes.MBOX7.MDH.byte.BYTE5 = ((Tx122.FuelPumpVoltage >> 8U) & 0xFFU);
ECanbMboxes.MBOX7.MDH.byte.BYTE6 = ((Tx122.FuelPumpCurrent >> 0U) & 0xFFU);
ECanbMboxes.MBOX7.MDH.byte.BYTE7 = ((Tx122.FuelPumpCurrent >> 8U) & 0xFFU);
ECanbMboxes.MBOX7.MDL.all = CPackMboxData(((Tx122.SolenoidVoltage >> 0U) & 0xFFU), ((Tx122.SolenoidVoltage >> 8U) & 0xFFU),
((Tx122.SolenoidCurrent >> 0U) & 0xFFU), ((Tx122.SolenoidCurrent >> 8U) & 0xFFU));
ECanbMboxes.MBOX7.MDH.all = CPackMboxData(((Tx122.FuelPumpVoltage >> 0U) & 0xFFU), ((Tx122.FuelPumpVoltage >> 8U) & 0xFFU),
((Tx122.FuelPumpCurrent >> 0U) & 0xFFU), ((Tx122.FuelPumpCurrent >> 8U) & 0xFFU));
ECanShadow.CANTRS.bit.TRS7 = 1U;
ECanShadow.CANTA.bit.TA7 = 1U;
ulTxMask |= (1UL << 7U); // MBOX 7
break;
}
case 5U:
@@ -990,17 +931,12 @@ void CSendECanDataB(void)
fTemp = Adc_Fan1_I.fLpfValue * 10.0F;
Tx123.Fan1Current = (Uint16)fTemp;
ECanbMboxes.MBOX8.MDL.byte.BYTE0 = ((Tx123.CoolantPumpVoltage >> 0U) & 0xFFU);
ECanbMboxes.MBOX8.MDL.byte.BYTE1 = ((Tx123.CoolantPumpVoltage >> 8U) & 0xFFU);
ECanbMboxes.MBOX8.MDL.byte.BYTE2 = ((Tx123.CoolantPumpCurrent >> 0U) & 0xFFU);
ECanbMboxes.MBOX8.MDL.byte.BYTE3 = ((Tx123.CoolantPumpCurrent >> 8U) & 0xFFU);
ECanbMboxes.MBOX8.MDH.byte.BYTE4 = ((Tx123.Fan1Voltage >> 0U) & 0xFFU);
ECanbMboxes.MBOX8.MDH.byte.BYTE5 = ((Tx123.Fan1Voltage >> 8U) & 0xFFU);
ECanbMboxes.MBOX8.MDH.byte.BYTE6 = ((Tx123.Fan1Current >> 0U) & 0xFFU);
ECanbMboxes.MBOX8.MDH.byte.BYTE7 = ((Tx123.Fan1Current >> 8U) & 0xFFU);
ECanbMboxes.MBOX8.MDL.all = CPackMboxData(((Tx123.CoolantPumpVoltage >> 0U) & 0xFFU), ((Tx123.CoolantPumpVoltage >> 8U) & 0xFFU),
((Tx123.CoolantPumpCurrent >> 0U) & 0xFFU), ((Tx123.CoolantPumpCurrent >> 8U) & 0xFFU));
ECanbMboxes.MBOX8.MDH.all = CPackMboxData(((Tx123.Fan1Voltage >> 0U) & 0xFFU), ((Tx123.Fan1Voltage >> 8U) & 0xFFU),
((Tx123.Fan1Current >> 0U) & 0xFFU), ((Tx123.Fan1Current >> 8U) & 0xFFU));
ECanShadow.CANTRS.bit.TRS8 = 1U;
ECanShadow.CANTA.bit.TA8 = 1U;
ulTxMask |= (1UL << 8U); // MBOX 8
break;
}
default:
@@ -1014,23 +950,18 @@ void CSendECanDataB(void)
fTemp = Adc_Fan2_I.fLpfValue * 10.0F;
Tx124.Fan2Current = (Uint16)fTemp;
ECanbMboxes.MBOX9.MDL.byte.BYTE0 = ((Tx124.Fan2Voltage >> 0U) & 0xFFU);
ECanbMboxes.MBOX9.MDL.byte.BYTE1 = ((Tx124.Fan2Voltage >> 8U) & 0xFFU);
ECanbMboxes.MBOX9.MDL.byte.BYTE2 = ((Tx124.Fan2Current >> 0U) & 0xFFU);
ECanbMboxes.MBOX9.MDL.byte.BYTE3 = ((Tx124.Fan2Current >> 8U) & 0xFFU);
ECanbMboxes.MBOX9.MDH.byte.BYTE4 = 0x0U;
ECanbMboxes.MBOX9.MDH.byte.BYTE5 = 0x0U;
ECanbMboxes.MBOX9.MDH.byte.BYTE6 = 0x0U;
ECanbMboxes.MBOX9.MDH.byte.BYTE7 = 0x0U;
ECanbMboxes.MBOX9.MDL.all = CPackMboxData(((Tx124.Fan2Voltage >> 0U) & 0xFFU), ((Tx124.Fan2Voltage >> 8U) & 0xFFU),
((Tx124.Fan2Current >> 0U) & 0xFFU), ((Tx124.Fan2Current >> 8U) & 0xFFU));
ECanbMboxes.MBOX9.MDH.all = CPackMboxData(0U, 0U, 0U, 0U);
ECanShadow.CANTRS.bit.TRS9 = 1U;
ECanShadow.CANTA.bit.TA9 = 1U;
ulTxMask |= (1UL << 9U); // MBOX 9
}
break;
}
}
ECanbRegs.CANTRS.all = ECanShadow.CANTRS.all;
ECanbRegs.CANTA.all = ECanShadow.CANTA.all;
ECanbRegs.CANTA.all = ulTxMask;
ECanbRegs.CANTRS.all = ulTxMask;
uiTxDivid = (uiTxDivid + 1U) % 10U;
}