Files
K2_DCU/.staticdata/.previous/20260113_090505/K2DCU/fs/ff8818a27a6ba924e7d4965307df3de2
2026-04-14 00:56:31 +09:00

221 lines
8.4 KiB
Plaintext

#ifndef SOURCE_MAIN_H_
#define SOURCE_MAIN_H_
typedef signed char int8;
typedef unsigned char Uint8;
#include <string.h>
#include "DSP28x_Project.h"
#include "DSP2833x_Device.h"
#include "DSP2833x_EPwm_defines.h"
#include "DSP2833x_I2c_defines.h"
#include "State.h"
#include "Oper.h"
#include "Display.h"
#include "Comm.h"
// Key Input Port (Lo Active)
#define GPIO_KEY_UP() (!GpioDataRegs.GPBDAT.bit.GPIO39)
#define GPIO_KEY_DOWN() (!GpioDataRegs.GPADAT.bit.GPIO31)
#define GPIO_KEY_ENTER() (!GpioDataRegs.GPADAT.bit.GPIO30)
#define GPIO_KEY_MENU() (!GpioDataRegs.GPADAT.bit.GPIO29)
#define GPIO_KEY_POWER() (!GpioDataRegs.GPCDAT.bit.GPIO67)
#define GPIO_KEY_START() (!GpioDataRegs.GPCDAT.bit.GPIO66)
#define GPIO_KEY_EMERGENCY() (!GpioDataRegs.GPCDAT.bit.GPIO64)
// 전류센서 CS가 활성되었을 때 FUSE 핀이 high면 그 쪽 라인은 문제 발생된 것임(ips 칩 또는 fuse)
#define GPIO_ENGINE_HEATER_FUSE() (GpioDataRegs.GPADAT.bit.GPIO6)
#define GPIO_GLOW_PLUG_FUSE() (GpioDataRegs.GPADAT.bit.GPIO5)
#define GPIO_SOLENOID_FUSE() (GpioDataRegs.GPADAT.bit.GPIO7)
#define GPIO_FUEL_PUMP_FUSE() (GpioDataRegs.GPADAT.bit.GPIO2)
#define GPIO_COOLANT_PUMP_FUSE() (GpioDataRegs.GPADAT.bit.GPIO1)
#define GPIO_FAN1_FUSE() (GpioDataRegs.GPADAT.bit.GPIO3)
#define GPIO_FAN2_FUSE() (GpioDataRegs.GPADAT.bit.GPIO4)
#define GPIO_ECU_ON_OFF() (GpioDataRegs.GPADAT.bit.GPIO8)
#define GPIO_FUEL_PUMP() (GpioDataRegs.GPADAT.bit.GPIO9)
#define GPIO_GLOW_PLUG() (GpioDataRegs.GPADAT.bit.GPIO10)
#define GPIO_SOLENOID() (GpioDataRegs.GPADAT.bit.GPIO11)
#define GPIO_ENGINE_HEATER() (GpioDataRegs.GPADAT.bit.GPIO24)
#define GPIO_USER_MODE_1() (!GpioDataRegs.GPCDAT.bit.GPIO81)
#define GPIO_USER_MODE_2() (!GpioDataRegs.GPCDAT.bit.GPIO82)
#define GPIO_USER_MODE_3() (!GpioDataRegs.GPCDAT.bit.GPIO83)
#define GPIO_ENGINE_HEATER_CS_READ() (GpioDataRegs.GPBDAT.bit.GPIO49)
#define GPIO_GLOW_PLUG_CS_READ() (GpioDataRegs.GPADAT.bit.GPIO27)
#define GPIO_SOLENOID_CS_READ() (GpioDataRegs.GPBDAT.bit.GPIO48)
#define GPIO_FUEL_PUMP_CS_READ() (GpioDataRegs.GPADAT.bit.GPIO26)
#define GPIO_COOLANT_PUMP_CS_READ() (GpioDataRegs.GPBDAT.bit.GPIO52)
#define GPIO_FAN1_CS_READ() (GpioDataRegs.GPBDAT.bit.GPIO50)
#define GPIO_FAN2_CS_READ() (GpioDataRegs.GPBDAT.bit.GPIO51)
// ChipSelect Port
#define GPIO_ENGINE_HEATER_CS(x) ((x) ? (GpioDataRegs.GPBSET.bit.GPIO49 = 1) : (GpioDataRegs.GPBCLEAR.bit.GPIO49 = 1));
#define GPIO_GLOW_PLUG_CS(x) ((x) ? (GpioDataRegs.GPASET.bit.GPIO27 = 1) : (GpioDataRegs.GPACLEAR.bit.GPIO27 = 1));
#define GPIO_SOLENOID_CS(x) ((x) ? (GpioDataRegs.GPBSET.bit.GPIO48 = 1) : (GpioDataRegs.GPBCLEAR.bit.GPIO48 = 1));
#define GPIO_FUEL_PUMP_CS(x) ((x) ? (GpioDataRegs.GPASET.bit.GPIO26 = 1) : (GpioDataRegs.GPACLEAR.bit.GPIO26 = 1));
#define GPIO_COOLANT_PUMP_CS(x) ((x) ? (GpioDataRegs.GPBSET.bit.GPIO52 = 1) : (GpioDataRegs.GPBCLEAR.bit.GPIO52 = 1));
#define GPIO_FAN1_CS(x) ((x) ? (GpioDataRegs.GPBSET.bit.GPIO50 = 1) : (GpioDataRegs.GPBCLEAR.bit.GPIO50 = 1));
#define GPIO_FAN2_CS(x) ((x) ? (GpioDataRegs.GPBSET.bit.GPIO51 = 1) : (GpioDataRegs.GPBCLEAR.bit.GPIO51 = 1));
// Pannel LED Port
#define GPIO_CPU_LED_STOP(x) ((x) ? (GpioDataRegs.GPASET.bit.GPIO12 = 1) : (GpioDataRegs.GPACLEAR.bit.GPIO12 = 1));
#define GPIO_CPU_LED_FAULT(x) ((x) ? (GpioDataRegs.GPASET.bit.GPIO14 = 1) : (GpioDataRegs.GPACLEAR.bit.GPIO14 = 1));
#define GPIO_CPU_LED_OPERATION(x) ((x) ? (GpioDataRegs.GPASET.bit.GPIO13 = 1) : (GpioDataRegs.GPACLEAR.bit.GPIO13 = 1));
#define GPIO_OLED_RESET(x) ((x) ? (GpioDataRegs.GPBSET.bit.GPIO37 = 1) : (GpioDataRegs.GPBCLEAR.bit.GPIO37 = 1));
#define GPIO_FAULT_CMD(x) ((x) ? (GpioDataRegs.GPBSET.bit.GPIO55 = 1) : (GpioDataRegs.GPBCLEAR.bit.GPIO55 = 1));
#define GPIO_EMERGENCY_CMD(x) ((x) ? (GpioDataRegs.GPBSET.bit.GPIO56 = 1) : (GpioDataRegs.GPBCLEAR.bit.GPIO56 = 1));
#define GPIO_STOP_CMD(x) ((x) ? (GpioDataRegs.GPBSET.bit.GPIO57 = 1) : (GpioDataRegs.GPBCLEAR.bit.GPIO57 = 1));
#define GPIO_START_CMD(x) ((x) ? (GpioDataRegs.GPBSET.bit.GPIO58 = 1) : (GpioDataRegs.GPBCLEAR.bit.GPIO58 = 1));
#define GPIO_POWER_HOLD(x) ((x) ? (GpioDataRegs.GPCSET.bit.GPIO65 = 1) : (GpioDataRegs.GPCCLEAR.bit.GPIO65 = 1));
#define GPIO_CPU_LED_COM_FAULT_N(x) ((x) ? (GpioDataRegs.GPCSET.bit.GPIO68 = 1) : (GpioDataRegs.GPCCLEAR.bit.GPIO68 = 1));
#define GPIO_CPU_LED_COM_RUN_N(x) ((x) ? (GpioDataRegs.GPCSET.bit.GPIO69 = 1) : (GpioDataRegs.GPCCLEAR.bit.GPIO69 = 1));
#define GPIO_CPU_LED_COM_STA_N(x) ((x) ? (GpioDataRegs.GPCSET.bit.GPIO70 = 1) : (GpioDataRegs.GPCCLEAR.bit.GPIO70 = 1));
/* Comment Description
* [!] : 변경시 주의
* [?] : 결정이 필요
* [*] : 주의보다 더 엄중
*/
/* Firmware 버전 (Semantic Versioning) */
#define FIRMWARE_VERSION_MAJOR (0) // 하위버전과 호환 되지 않는 변화가 생길 때 증가, 대대적인 변화가 있을 때
#define FIRMWARE_VERSION_MINOR (0) // 하위버전과 호환 되면서 새로운 기능이 생길 때 증가, 기존 기능이 변경되거나 사용 방법이 변경 될 때
#define FIRMWARE_VERSION_PATCH (5) // 하위버전과 호환 되면서 버그 수정, 기능적으로 변경된것을 알아차리지 못할 정도의 소소한 변경이 있을 때
/* 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 확인 및 맵핑
*/
#define DEBUG_MENU_PASSWORD {0,0,0,0}
#define ENABLED (1)
#define DISABLED (!ENABLED)
/*
Timer Clock Per 100us
*/
#define SYSTEM_10MIN_TIME (6000000UL)
#define TIME_01MS (10U)
#define TIME_10MS (100U)
#define TIME_20MS (200U)
#define TIME_50MS (500U)
#define TIME_100MS (1000U)
#define TIME_500MS (5000U)
#define TIME_1SEC (10000U)
// 전류센서 0A 기준값 450(0.33V), 허용 오차 +/- 150
#define SENSOR_OFFSET_REF 450
#define SENSOR_TOLERANCE 150
#define SENSOR_MIN_LIMIT (SENSOR_OFFSET_REF - SENSOR_TOLERANCE) // 300
#define SENSOR_MAX_LIMIT (SENSOR_OFFSET_REF + SENSOR_TOLERANCE) // 600
#define TIME_OVER (1U)
#define ABS(x) ((x) < 0 ? -(x) : (x))
enum
{
TIMER_01MS = 0,
TIMER_10MS,
TIMER_20MS,
TIMER_50MS,
TIMER_100MS,
TIMER_500MS,
TIMER_1SEC,
TIMER_MAX
};
enum
{
SOFTTIMER_TIME_OVER = 0,
SOFTTIMER_RUNNING,
SOFTTIMER_PAUSE,
SOFTTIMER_DONT_EXIST
};
enum
{
SOFTTIMER_WAIT_INIT = 0,
SOFTTIMER_WAIT_POPUP,
SOFTTIMER_WAIT_APU_STOP,
SOFTTIMER_WAIT_SHUTDOWN,
SOFTTIMER_WAIT_MAX
};
typedef struct ClassSoftTimer
{
Uint32 ulSetValue;
Uint32 ulDecreaseValue;
int16 iTimer;
int16 iStart;
} CSoftTimer;
typedef struct ClassWaitTimer
{
Uint32 ulCountSoftClock;
Uint16 uiSoftCountTarget;
} CWaitTimer;
typedef struct ClassPowerOnCheckValue
{
Uint16 EngineHeaterSensor : 1;
Uint16 GlowPlugSensor : 1;
Uint16 SolenoidSensor : 1;
Uint16 FuelPumpSensor : 1;
Uint16 CoolantPumpSensor : 1;
Uint16 Fan1Sensor : 1;
Uint16 Fan2Sensor : 1;
} CPowerOnCheckValue;
typedef struct ClassGeneralOperValue
{
Uint16 uiPassword[4];
Uint16 uiAlarmOccured;
Uint16 uiApuState;
Uint16 uiAlarmReset;
Uint16 uiMaintenence;
Uint32 ulTotalOperationHour;
struct
{
Uint16 PlayCmd : 4;
Uint16 rsvd_padding : 4;
} GcuCommand;
struct
{
Uint16 EngineStart : 1;
Uint16 EngineStop : 1;
Uint16 rsvd : 2;
Uint16 RpmSetPoint : 2;
Uint16 Override : 1;
Uint16 Emergency : 1;
} EcuCommand;
struct
{
Uint16 CarComputer : 1;
Uint16 Gcu : 1;
Uint16 Ecu : 1;
} Conection;
struct
{
Uint16 ManualCranking : 1;
Uint16 LampTest : 1;
Uint16 KeyTest : 1;
} Maintenence;
} CGeneralOperValue;
Uint16 CSoftWaitCountProcedure(Uint16 ucIndex, Uint32 ulWaitTime);
void CActiveChipSelect(Uint16 Active);
extern CGeneralOperValue GeneralOperValue;
extern CPowerOnCheckValue PowerOnCheckValue;
#endif /* SOURCE_MAIN_H_ */