
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
//-------------------------------------------------------//
// Project Code : V2H6K01-23-ENEMAN
// File Name : CanCHAdeMO.cpp
// Created on : 2023. 11. 15.
// Description :
// Author : KwonJeongMin
// Last modified Date :
//-------------------------------------------------------//
#include "CommonLib.h"
union uCanCHAdeMO CanCHAdeMO;
struct sCanCHAdeMO CanCHAdeMORx; //CanBeRx.Mas = Master to Slave Data, CanBeRx.Slv = Slave to Master Data
unsigned int CanCHAdeMORxStatus = 0;
unsigned int CanCHAdeMORxIsrCnt = 0;
unsigned int CanCHAdeMORxIsrErrCnt = 0;
unsigned int CANCHADEMO_RxID_OFFSET = 0x0000;
unsigned int CANCHADEMO_TxID_OFFSET = 0x0000;
void InitCanCHAdeMO()
{
}
interrupt void CanCHAdeMORxIsr(void)
{
CanCHAdeMORxStatus = CAN_getInterruptCause(CANCHADEMO);
//수신용 메일박스 사용 숫자에 따라 변경할 것
if((CanCHAdeMORxStatus >= CANCHADEMO_RX_MBOX_START) && (CanCHAdeMORxStatus <= CANCHADEMO_RX_MBOX_END))
{
CanRxMsg(CANCHADEMO, CanCHAdeMORxStatus, &CanCHAdeMORxMbox[CanCHAdeMORxStatus]);
if (Status.bit.Master != 1) CanCHAdeMORx.Mas.DataArr[CanCHAdeMORxMbox[CanCHAdeMORxStatus].Id - CANCHADEMO_RxID_OFFSET] = CanCHAdeMORxMbox[CanCHAdeMORxStatus].Data.all;
else CanCHAdeMORx.Slv.DataArr[CanCHAdeMORxMbox[CanCHAdeMORxStatus].Id - CANCHADEMO_RxID_OFFSET] = CanCHAdeMORxMbox[CanCHAdeMORxStatus].Data.all;
}
else
{
//0x8000 이면 에러..
//나머지는 미사용 메일박스
CanCHAdeMORxIsrErrCnt++;
}
CanCHAdeMORxIsrCnt++;
CAN_clearInterruptStatus(CANCHADEMO, CanCHAdeMORxStatus);
CAN_clearGlobalInterruptStatus(CANCHADEMO, CAN_GLOBAL_INT_CANINT0);
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);
}
void CanCHAdeMORun_500us()
{
// CanCHAdeMO.Data.IDx00.bit.IbatRef = IbatRef;
// CanCHAdeMO.Data.IDx00.bit.Status.all = Status.all;
//
// CanCHAdeMOTxMbox.Lenth = 8;
// CanCHAdeMOTxMbox.Id = CANCHADEMO_TxID_OFFSET;
// CanCHAdeMOTxMbox.Data.all = CanCHAdeMO.Data.IDx00.all;
//
// CanTxMsg(CANCHADEMO, 32, &CanCHAdeMOTxMbox);
}
unsigned int CanCHAdeMOTable[] = {0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000A};
unsigned int CanCHAdeMOTxSeqTableSize = 0;
unsigned int CanCHAdeMOTxSeqTableCnt = 0;
void CanCHAdeMORun()
{
CanCHAdeMOTxUpdate();
//배열 크기 계산
CanCHAdeMOTxSeqTableSize = sizeof(CanCHAdeMOTable);
if (CanCHAdeMOTxSeqTableCnt >= CanCHAdeMOTxSeqTableSize) CanCHAdeMOTxSeqTableCnt = 0;
CanCHAdeMOTxMbox.Id = CanCHAdeMOTxSeqTable[CanCHAdeMOTxSeqTableCnt++]+CANCHADEMO_TxID_OFFSET;
CanCHAdeMOTxMbox.Data.all = CanCHAdeMO.DataArr[CanCHAdeMOTxMbox.Id - CANCHADEMO_TxID_OFFSET];
CanTxMsg(CANCHADEMO, 32, &CanCHAdeMOTxMbox);
}
void CanCHAdeMOTxUpdate()
{
CanCHAdeMO.Data.IDx01.bit.HeartBeat ^= 1;
CanCHAdeMO.Data.IDx01.bit.Mode = Status.bit.Master;
// CanCHAdeMO.Data.IDx02.bit.FaultHW.all = Fault.Hw.all;
CanCHAdeMO.Data.IDx02.bit.FaultSW1.all = Fault.Sw1.all;
CanCHAdeMO.Data.IDx03.bit.FaultSW2.all = Fault.Sw2.all;
CanCHAdeMO.Data.IDx03.bit.FaultSW3.all = Fault.Sw3.all;
CanCHAdeMO.Data.IDx04.bit.Temp_AcSwHeatSink1 = Temp.AcSwHeatSink1;
CanCHAdeMO.Data.IDx04.bit.Temp_AcSwHeatSink2 = Temp.AcSwHeatSink2;
CanCHAdeMO.Data.IDx05.bit.Temp_DcSwHeatSink1 = Temp.DcSwHeatSink1;
CanCHAdeMO.Data.IDx05.bit.Temp_DcSwHeatSink2 = Temp.DcSwHeatSink2;
CanCHAdeMO.Data.IDx06.bit.Temp_Spare1 = Temp.Spare1;
CanCHAdeMO.Data.IDx06.bit.Temp_Spare2 = Temp.Spare2;
CanCHAdeMO.Data.IDx07.bit.Ibat = IbatAvg;
CanCHAdeMO.Data.IDx07.bit.Vbat = VbatAvg;
CanCHAdeMO.Data.IDx08.bit.Pbat = PbatAvg;
CanCHAdeMO.Data.IDx08.bit.Vdc = VdcAvg;
CanCHAdeMO.Data.IDx09.bit.Iqe = IqeAvg;
CanCHAdeMO.Data.IDx09.bit.Vqe = VqeAvg;
CanCHAdeMO.Data.IDx0A.bit.Pinv = PinvActiveAvg;
}