//-------------------------------------------------------// // 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; }