Files
K2_DCU/Source/.staticdata/.previous/20260407_213608/K2DCU/fs/87db14bcf223072d659483224d9ba3a7
2026-04-14 00:56:31 +09:00

253 lines
8.2 KiB
Plaintext

#ifndef SOURCE_MAIN_H_
#define SOURCE_MAIN_H_
#include <String.h>
#include "DSP28x_Project.h"
#include "DSP2833x_Device.h"
#include "State.h"
#include "Oper.h"
#include "Display.h"
#include "Comm.h"
#define AUX_TEST
#define true (1U)
#define false (0U)
// Key Input Port (Lo Active)
#define GPIO_KEY_UP() (GpioDataRegs.GPBDAT.bit.GPIO39) // LOW Active
#define GPIO_KEY_DOWN() (GpioDataRegs.GPADAT.bit.GPIO31) // LOW Active
#define GPIO_KEY_ENTER() (GpioDataRegs.GPADAT.bit.GPIO30) // LOW Active
#define GPIO_KEY_MENU() (GpioDataRegs.GPADAT.bit.GPIO29) // LOW Active
#define GPIO_KEY_POWER() (GpioDataRegs.GPCDAT.bit.GPIO67) // LOW Active
#define GPIO_KEY_START() (GpioDataRegs.GPCDAT.bit.GPIO66) // LOW Active
#define GPIO_KEY_EMERGENCY() (GpioDataRegs.GPCDAT.bit.GPIO64) // LOW Active
#define GPIO_KEY_REMOTE_START() (GpioDataRegs.GPBDAT.bit.GPIO58) // LOW Active
#define GPIO_KEY_REMOTE_STOP() (GpioDataRegs.GPBDAT.bit.GPIO57) // LOW Active
#define GPIO_KEY_REMOTE_EMERGENCY() (GpioDataRegs.GPBDAT.bit.GPIO56) // LOW Active
// Read ChipSelect State
#define ENGINE_HEATER_OUT() (GpioDataRegs.GPBDAT.bit.GPIO49) // HIGH is Active
#define GLOW_PLUG_OUT() (GpioDataRegs.GPADAT.bit.GPIO27) // HIGH is Active
#define SOLENOID_OUT() (GpioDataRegs.GPBDAT.bit.GPIO48) // HIGH is Active
#define FUEL_PUMP_OUT() (GpioDataRegs.GPADAT.bit.GPIO26) // HIGH is Active
#define COOLANT_PUMP_OUT() (GpioDataRegs.GPBDAT.bit.GPIO52) // HIGH is Active
#define FAN1_OUT() (GpioDataRegs.GPBDAT.bit.GPIO50) // HIGH is Active
#define FAN2_OUT() (GpioDataRegs.GPBDAT.bit.GPIO51) // HIGH is Active
// Active Read From ECU
#define GPIO_ENGINE_HEATER_ACTIVE() (GpioDataRegs.GPADAT.bit.GPIO24) // LOW is Active
#define GPIO_GLOW_PLUG_ACTIVE() (GpioDataRegs.GPADAT.bit.GPIO10) // LOW is Active
#define GPIO_SOLENOID_ACTIVE() (GpioDataRegs.GPADAT.bit.GPIO11) // LOW is Active
#define GPIO_FUEL_PUMP_ACTIVE() (GpioDataRegs.GPADAT.bit.GPIO9) // LOW is Active
// Fail-Safe Enable(ECU HW Emergency)
#define GPIO_FAIL_SAFE_READ() (GpioDataRegs.GPADAT.bit.GPIO25) // LOW is Active
// Auxiliary Read all
#define STATUS_BIT_HEATER (0)
#define STATUS_BIT_GLOW (1)
#define STATUS_BIT_SOLENOID (2)
#define STATUS_BIT_FUEL (3)
#define STATUS_BIT_COOLANT (4)
#define STATUS_BIT_FAN1 (5)
#define STATUS_BIT_FAN2 (6)
#define GET_ALL_AUX_STATUS() \
( \
(GpioDataRegs.GPBDAT.bit.GPIO49 << STATUS_BIT_HEATER) | \
(GpioDataRegs.GPADAT.bit.GPIO27 << STATUS_BIT_GLOW) | \
(GpioDataRegs.GPBDAT.bit.GPIO48 << STATUS_BIT_SOLENOID) | \
(GpioDataRegs.GPADAT.bit.GPIO26 << STATUS_BIT_FUEL) | \
(GpioDataRegs.GPBDAT.bit.GPIO52 << STATUS_BIT_COOLANT) | \
(GpioDataRegs.GPBDAT.bit.GPIO50 << STATUS_BIT_FAN1) | \
(GpioDataRegs.GPBDAT.bit.GPIO51 << STATUS_BIT_FAN2) \
)
/* Comment Description
* [!] : 변경시 주의
* [?] : 결정이 필요
* [*] : 주의보다 더 엄중
*/
/* Firmware 버전 (Semantic Versioning) */
#define FIRMWARE_VERSION_MAJOR (0) // 하위버전과 호환 되지 않는 변화가 생길 때 증가, 대대적인 변화가 있을 때
#define FIRMWARE_VERSION_MINOR (1) // 하위버전과 호환 되면서 새로운 기능이 생길 때 증가, 기존 기능이 변경되거나 사용 방법이 변경 될 때
#define FIRMWARE_VERSION_PATCH (9) // 하위버전과 호환 되면서 버그 수정, 기능적으로 변경된것을 알아차리지 못할 정도의 소소한 변경이 있을 때
/* Version History
* [0.0.1] : DCU 프로젝트 생성
* [0.0.2] : DCU 펌웨어 탑재 성공
* [0.0.3] : OLED XINTF(BUS) 방식 드라이브단 구현
* [0.0.4] : OLED 표시 화면 구현
* [0.0.5] : CAN-B 확인 및 맵핑
* [0.0.6] : 시동 시퀀스 구현 및 정비 화면 수정
* [0.1.6] : Suter 보조엔진 시동 완료 시점
* [0.1.7] : 발전상태 전환 조건 추가 26-02-23
* [0.1.8] : 장치 운용시간 로직 추가(Eeprom 사용), define USE_EEPROM 26-03-16 <삭제>
* [0.1.9] : IPS 회로 변경으로 전압센싱 추가 및 고장 알람 비트 추가, CAN-A 채널 송신 데이터 추가 26-03-26
*/
#define MAINTENECE_PASSKEY {0,0,0,0}
#define ENABLED (1)
#define DISABLED (!ENABLED)
/*
* Bit mask
*/
#define MASK_LOW_NIBBLE (0x0FU)
#define MASK_HIGH_NIBBLE (0xF0U)
#define MASK_BYTE (0xFFU)
#define MASK_WORD (0xFFFFU)
#define MASK_6BIT (0x3FU)
#define MASK_26BIT (0x3FFFFFFUL)
/*
Timer Clock Per 100us
*/
#define SYSTEM_10MIN_TIME (6000000UL)
#define TIME_01MS (10UL)
#define TIME_10MS (100UL)
#define TIME_20MS (200UL)
#define TIME_50MS (500UL)
#define TIME_100MS (1000UL)
#define TIME_500MS (5000UL)
#define TIME_1SEC (10000UL)
#define TIME_5SEC (50000UL)
#define TIME_10SEC (100000UL)
#define TIME_60SEC (600000UL)
// 전압/전류센서 AdcRefValue 기준값 전압:2300, 전류:2250
#define SENSOR_LOW_LIMIT (2000) // 단선
#define SENSOR_HIGH_LIMIT (4000) // 단락
#define TIME_OVER (1U)
enum
{
TIMER_01MS = 0U,
TIMER_10MS,
TIMER_20MS,
TIMER_50MS,
TIMER_100MS,
TIMER_500MS,
TIMER_1SEC,
TIMER_MAX
};
enum
{
SOFTTIMER_TIME_OVER = 0U,
SOFTTIMER_RUNNING,
SOFTTIMER_PAUSE,
SOFTTIMER_DONT_EXIST
};
enum
{
SOFTTIMER_WAIT_INIT = 0U,
SOFTTIMER_WAIT_ALARM_RESET,
SOFTTIMER_WAIT_ENG_COOLDOWN,
SOFTTIMER_WAIT_PREHEAT,
SOFTTIMER_WAIT_CRANKING,
SOFTTIMER_WAIT_RETRY_CRANKING,
SOFTTIMER_WAIT_OPERATION,
SOFTTIMER_WAIT_SHUTDOWN,
SOFTTIMER_WAIT_AFTER_COOLDOWN,
SOFTTIMER_WAIT_MAX
};
typedef enum
{
IDX_CS_ENG_HEATER = 0,
IDX_CS_GLOW_PLUG,
IDX_CS_SOLENOID,
IDX_CS_FUEL_PUMP,
IDX_CS_COOLANT_PUMP,
IDX_CS_FAN1,
IDX_CS_FAN2,
IDX_CS_MAX
} E_AUX_CS_IDX;
typedef struct ClassSoftTimer
{
Uint32 ulSetValue;
Uint32 ulDecreaseValue;
int16 iTimer;
int16 iStart;
} CSoftTimer;
typedef struct ClassWaitTimer
{
Uint32 ulCountSoftClock;
Uint16 uiSoftCountTarget;
} CWaitTimer;
typedef enum
{
IDX_SENSOR_ENGINE_HEATER = 0U, // 0
IDX_SENSOR_GLOW_PLUG, // 1
IDX_SENSOR_SOLENOID, // 2
IDX_SENSOR_FUEL_PUMP, // 3
IDX_SENSOR_COOLANT_PUMP, // 4
IDX_SENSOR_FAN1, // 5
IDX_SENSOR_FAN2, // 6
IDX_SENSOR_MAX // 7
} E_IDX_SENSOR;
typedef struct ClassGeneralOperValue
{
Uint16 uiFaultOccured;
Uint16 uiDynamicRPM;
Uint16 uiPassword[4];
Uint16 uiSelfTestCheck;
Uint16 uiSelfTestPass;
Uint16 uiEmergency;
Uint16 uiApuStart;
Uint16 uiApuState;
Uint16 uiAlarmReset;
Uint16 uiMaintenance;
Uint16 uiRetryCrankingCount;
Uint16 uiWriteEepromDataStart;
Uint32 ulTotalOperationHour;
struct
{
Uint16 PlayCmd;
} GcuCommand;
struct
{
Uint16 EngineStart;
Uint16 EngineStop;
Uint16 RpmSetPoint;
Uint16 ActiveOverride;
Uint16 EmergencyStop;
} EcuCommand;
struct
{
Uint16 CarComputer;
Uint16 Gcu;
Uint16 Ecu;
} Conection;
struct
{
Uint16 ManualCranking;
Uint16 LampTest;
Uint16 KeyTest;
} Maintenance;
} CGeneralOperValue;
extern CGeneralOperValue GeneralOperValue;
extern Uint16 PowerOnCheckSensor[IDX_SENSOR_MAX];
Uint16 CSoftWaitCountProcedure(Uint16 uiIndex, Uint32 ulWaitTime);
void COffChipSelect(void);
void CSoftWaitCountClear(Uint16 Index);
Uint32 CGetSoftClock(void);
void CUpdateFault(Uint32 *pData, Uint16 uiIdx, Uint16 uiCond);
void DELAY_USEC(Uint32 ulMicroSeconds);
Uint16 CIsBitSet(Uint32 ulData, Uint16 uiIdx);
void CSetAuxCtrlPin(E_AUX_CS_IDX eIdx, Uint16 uiState);
#endif /* SOURCE_MAIN_H_ */