
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 : CPU1_Main.cpp
// Created on : 2023. 07. 07.
// Description :
// Author : KimJeongWoo
// Last modified Date :
//-------------------------------------------------------//
#include "Cpu1DeviceDefine.h"
#pragma SET_CODE_SECTION(".TI.ramfunc")
interrupt void Cpu1Epwm1Isr(void);
interrupt void Cpu1Dma1Isr(void);
#pragma SET_CODE_SECTION()
int main(void)
{
CpuInfo();
Device_init();
Device_initGPIO();
Interrupt_initModule();
Interrupt_initVectorTable();
//todo 에뮬레이터 사용중에는 해당 함수를 주석 처리하고 사용.
//추후 부트모드를 검출 할 수 있는 레지스터를 찾아서 조건문 처리 되도록 변경할 것
//-------------------------------------------------------------------------------//
// easyDSP_Boot_Sync();
//-------------------------------------------------------------------------------//
easyDSP_SCI_Init();
SetCPU2ForPeripheral(); //모든 기능 CPU1로 변경
SetCPU2ForGsRam();
InitEPwm();
//todo 임시 수정 할 것
InitTimeSharing(InvPwmFreq / 2.0);
Interrupt_enable(INT_EPWM1);
Interrupt_register(INT_EPWM1, &Cpu1Epwm1Isr);
InitAdc();
InitDma();
InitScale();
InitDigitalIOSet();
InitDspTempSensor();
IPC_clearFlagLtoR(IPC_CPU1_L_CPU2_R, IPC_FLAG_ALL);
InitRelay();
InitSystemParameter();
InitPll();
InitFaultSet();
InitLpf1st();
InitSpi(); //for EEPROM Test
InitRTC();
InitModbusSci();
InitSci();
//
//// InitAID();
/////////////////////DAC Test/////////////////
EALLOW;
DacaRegs.DACCTL.bit.DACREFSEL = 1;
DacaRegs.DACOUTEN.bit.DACOUTEN = 1;
DacbRegs.DACCTL.bit.DACREFSEL = 1;
DacbRegs.DACOUTEN.bit.DACOUTEN = 1;
DaccRegs.DACCTL.bit.DACREFSEL = 1;
DaccRegs.DACOUTEN.bit.DACOUTEN = 1;
EDIS;
/////////////////////DAC Test/////////////////
Dout.Exor.all = 0x0010; // for Test - Buzzer off
Interrupt_enableMaster();
EINT;
ERTM;
for (;;)
{
if (ModeSystem == Normal)
{
if (OS_Time.T500us.Flag == 1)
{
RoutineT500us();
OS_Time.T500us.Flag = 0;
}
else if (OS_Time.T2ms.Flag == 1)
{
RoutineT2ms(); // 2ms routine
OS_Time.T2ms.Flag = 0;
}
else if (OS_Time.T10ms.Flag == 1)
{
RoutineT10ms();
OS_Time.T10ms.Flag = 0;
}
else if (OS_Time.T100ms.Flag == 1)
{
// Dout.Data.bit.LedCpu1 ^= 1;
RoutineT100ms();
OS_Time.T100ms.Flag = 0;
}
else if (OS_Time.T500ms.Flag == 1)
{
RoutineT500ms();
OS_Time.T500ms.Flag = 0;
}
else if (OS_Time.T1s.Flag == 1)
{
RoutineT1s();
OS_Time.T1s.Flag = 0;
}
}
else
{
ModeSystem = Normal;
}
}
}
unsigned int Cpu1Dma1IsrCnt = 0;
interrupt void Cpu1Dma1Isr(void)
{
AdcIntInterruptClear(); //내부 ADC 인터럽트 전체 클리어
Cpu1Dma1IsrCnt++;
AdcResult();
// AutoOffsetCal(AdcOffsetCalCh);
//Cpu2 호출
HWREG(IPC_BASE + IPC_O_SET) = 0x000001;
if (ModeSystem == Normal)
{
if (SystemReady == 0)
{
if (FlagOffset != 3) OffsetProcess();
else SystemReady = 1;
}
else
{
RoutineTsamp();
}
}
// else if (ModeSystem == Test_Mode)
// {
// if (SystemReady == 0)
// {
// if (FlagOffset != 3) OffsetProcess();
// else SystemReady = 1;
// }
// else
// {
// TestRoutineTsamp();
// }
// }
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP7);
return;
}
unsigned int Cpu1Epwm1IsrCnt = 0;
interrupt void Cpu1Epwm1Isr(void)
{
Cpu1Epwm1IsrCnt++;
OS_Time.Sharing();
EPWM_clearEventTriggerInterruptFlag(EPWM1_BASE);
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP3);
return;
}