#ifndef SOURCE_MAIN_H_ #define SOURCE_MAIN_H_ #include #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; Uint32 ulRampStartClock; // IDLE_SEQ_MOD Uint16 uiRampComplete; // IDLE_SEQ_MOD 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_ */