Browse Source

feat: 删除应用层的hwsetup.h引用
(剩余通讯与MCU故障需要抽象)

CN\guohui27 2 năm trước cách đây
mục cha
commit
85e9593472
30 tập tin đã thay đổi với 320 bổ sung329 xóa
  1. 14 12
      MSTLibraries/SelfTestLib/src/STLmain.c
  2. 34 0
      User project/1.FrameLayer/Include/sys_ctrl.h
  3. 14 14
      User project/1.FrameLayer/Source/FSM_2nd.c
  4. 3 9
      User project/1.FrameLayer/Source/app.c
  5. 5 4
      User project/1.FrameLayer/Source/gd32f30x_it.c
  6. 2 1
      User project/1.FrameLayer/Source/main.c
  7. 102 0
      User project/1.FrameLayer/Source/sys_ctrl.c
  8. 0 0
      User project/2.MotorDrive/Include/motordriveAPI.h
  9. 6 6
      User project/2.MotorDrive/Source/adc.c
  10. 13 8
      User project/2.MotorDrive/Source/alarm.c
  11. 11 11
      User project/2.MotorDrive/Source/pwm.c
  12. 1 1
      User project/2.MotorDrive/Source/spdctrFSM.c
  13. 2 2
      User project/2.MotorDrive/Source/spdctrmode.c
  14. 0 3
      User project/3.BasicFunction/Include/canAppl.h
  15. 1 3
      User project/3.BasicFunction/Source/Cadence.c
  16. 1 3
      User project/3.BasicFunction/Source/bikespeed.c
  17. 5 3
      User project/3.BasicFunction/Source/can.c
  18. 12 8
      User project/3.BasicFunction/Source/canAppl.c
  19. 4 1
      User project/3.BasicFunction/Source/spi_master.c
  20. 3 3
      User project/4.BasicHardwSoftwLayer/1.BasicHardwLayer/Include/board_config.h
  21. 26 40
      User project/4.BasicHardwSoftwLayer/1.BasicHardwLayer/Include/hwsetup.h
  22. 1 126
      User project/4.BasicHardwSoftwLayer/1.BasicHardwLayer/Source/hwsetup.c
  23. 2 1
      User project/4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Include/user.h
  24. 38 38
      User project/5.Api_rt/api_rt_pwm.c
  25. 6 3
      WLMCP.ewp
  26. 6 0
      tests/sim/sim_board/api_rt/api_rt_pwm.c
  27. 1 0
      tests/sim/sim_board/xmake.lua
  28. 6 0
      tests/unit_test/board_sim/api_rt/api_rt_pwm.c
  29. 0 29
      tests/unit_test/test_user.c
  30. 1 0
      xmake.lua

+ 14 - 12
MSTLibraries/SelfTestLib/src/STLmain.c

@@ -25,7 +25,9 @@
   */ 
 
 
-/* Includes ------------------------------------------------------------------*/
+/************************************************************************
+ Included Files
+*************************************************************************/
 #include "gd32f30x_libopt.h"
 
 #include "STLlib.h"
@@ -36,8 +38,8 @@
 #include "tbc.h" 
 #include "alarm.h"
 #include "hwsetup.h"
-//#include "adc.h"
 #include "api.h"
+#include "sys_ctrl.h"
 #if defined STL_EVAL_MODE
   #ifdef STM32F30X
     #include "stm32303c_eval.h"
@@ -297,8 +299,8 @@ if(test)
       /*----------------------------------------------------------------------*/
       control_flow_call(ADC_TEST_CALLER);
 
-      /* 力矩温度传感器 */
-      AdcReg = hw_uwADC2[4];
+      /* Ebike Torque sensor */
+      AdcReg = iAdc_GetResultPointer(0)[HW_ADC_TORQ_CH];
       if(AdcReg>3992)//((AdcReg>3992)||(AdcReg<119))
         {
             AdcTorqueErrorCnt++;
@@ -312,7 +314,7 @@ if(test)
             AdcTorqueErrorCnt = 0;
         }
 
-      /* IBUS */ /* 70A*0.002*16 = 2.24V 余量放到2.5v(3103) */
+      /* IBUS */ /* 70A*0.002*16 = 2.24V 锟斤拷锟斤拷锟脚碉拷2.5v(3103) */
         AdcReg = iAdc_GetResultPointer(2)[HW_ADC_IDC_CH];
         if(AdcReg>3103)
         {
@@ -429,13 +431,13 @@ void stl_voRtcUpdate(void)
   */
 void stl_voInterruptChecks(void)
 {
-    static BOOL hw_blPWMOnFlgLast = FALSE;
+    static BOOL blPwmOnFlgLast = FALSE;
     if((++calss_ulIntCnt)>=1000)    /* 1s */
     {
         calss_ulIntCnt = 0;
         if(clas_blIntTestFlg == TRUE)
         {
-            if((hw_blPWMOnFlg == TRUE)&&(hw_blPWMOnFlgLast == TRUE))/* 电流采样 */
+            if((sysctrl_stPwmState.blPwmOnflg == TRUE)&&(blPwmOnFlgLast == TRUE))/* 锟斤拷锟斤拷锟斤拷锟斤拷 */
             {            
                 if(clasB_uwADCCnt<48000)
                 {
@@ -452,9 +454,9 @@ void stl_voInterruptChecks(void)
                 
                 clasB_uwADCCnt = 0;
             }
-            hw_blPWMOnFlgLast = hw_blPWMOnFlg;
+            blPwmOnFlgLast = sysctrl_stPwmState.blPwmOnflg;
 
-            if((clasB_uwTIM0Cnt<24000)&&(clasB_uwTIM0Cnt>8000))/* 电流环 */
+            if((clasB_uwTIM0Cnt<24000)&&(clasB_uwTIM0Cnt>8000))/* 锟斤拷锟斤拷锟斤拷 */
             {  
                 clasB_uwTIM0Cnt = 0;
             }
@@ -464,7 +466,7 @@ void stl_voInterruptChecks(void)
                 clasB_uwTIM0Cnt = 0;
             }
            
-            if((clasB_uwTIM1Cnt<2000)&&(clasB_uwTIM1Cnt>10))/* 踏频/车速 */
+            if((clasB_uwTIM1Cnt<2000)&&(clasB_uwTIM1Cnt>10))/* 踏频/锟斤拷锟斤拷 */
             {
                 clasB_uwTIM1Cnt = 0;
             }
@@ -486,7 +488,7 @@ void stl_voInterruptChecks(void)
             }
 #endif
 
-            if((clasB_uwTIM3Cnt<6000)&&(clasB_uwTIM3Cnt>2000))/* 速度环 */
+            if((clasB_uwTIM3Cnt<6000)&&(clasB_uwTIM3Cnt>2000))/* 锟劫度伙拷 */
             {  
                 clasB_uwTIM3Cnt = 0;
             }
@@ -496,7 +498,7 @@ void stl_voInterruptChecks(void)
                 clasB_uwTIM3Cnt = 0;      
             }
 
-            if((clasB_uwTIM5Cnt<1500)&&(clasB_uwTIM5Cnt>500))/* 1ms中断 */
+            if((clasB_uwTIM5Cnt<1500)&&(clasB_uwTIM5Cnt>500))/* 1ms锟叫讹拷 */
             {
                 clasB_uwTIM5Cnt = 0;
             }

+ 34 - 0
User project/1.FrameLayer/Include/sys_ctrl.h

@@ -0,0 +1,34 @@
+/**
+ * @file sys_ctrl.h
+ * @author 
+ * @brief 系统控制相关代码
+ * @version 0.1
+ * @date 2023-08-28
+ *
+ * @copyright Copyright (c) 2023
+ *
+ */
+
+
+#ifndef SYS_CONTROL_H
+#define SYS_CONTROL_H
+
+#include "typedefine.h"
+
+typedef struct
+{
+    UWORD uwChargeCnt; 
+    BOOL blChargeOvrFlg;
+    BOOL blPwmOnflg;
+} SysCtrl_PwmHandle;
+
+
+extern SysCtrl_PwmHandle sysctrl_stPwmState;
+
+void sysctrl_voPwmInit(void);
+void sysctrl_voPwmOn(void);
+void sysctrl_voPwmOff(void);
+void sysctrl_voCharge(void);
+void sysctrl_voThrPhsShrt(void);
+
+#endif

+ 14 - 14
User project/1.FrameLayer/Source/FSM_2nd.c

@@ -47,13 +47,13 @@ void FSM_2nd_Main(void)
             if (signal_state.Sensor == 1)
             {
                 /* PWM On */
-                pwm_stGenOut.uwNewTIM1COMPR[0] = HW_HHPWM_PERIOD;
-                pwm_stGenOut.uwNewTIM1COMPR[1] = HW_HHPWM_PERIOD;
-                pwm_stGenOut.uwNewTIM1COMPR[2] = HW_HHPWM_PERIOD;
-                pwm_stGenOut.uwNewTIM1COMPR[3] = HW_HHPWM_PERIOD;
-                pwm_stGenOut.uwNewTIM1COMPR[4] = HW_HHPWM_PERIOD;
-                pwm_stGenOut.uwNewTIM1COMPR[5] = HW_HHPWM_PERIOD;
-                hw_voPWMOn();
+                pwm_stGenOut.uwNewTIM1COMPR[0] = HW_INIT_HHPWM_PERIOD;
+                pwm_stGenOut.uwNewTIM1COMPR[1] = HW_INIT_HHPWM_PERIOD;
+                pwm_stGenOut.uwNewTIM1COMPR[2] = HW_INIT_HHPWM_PERIOD;
+                pwm_stGenOut.uwNewTIM1COMPR[3] = HW_INIT_HHPWM_PERIOD;
+                pwm_stGenOut.uwNewTIM1COMPR[4] = HW_INIT_HHPWM_PERIOD;
+                pwm_stGenOut.uwNewTIM1COMPR[5] = HW_INIT_HHPWM_PERIOD;
+                sysctrl_voPwmOn();
 
                 /* 3rd FSM Init */
                 Switch_speed_FSMInit();
@@ -65,13 +65,13 @@ void FSM_2nd_Main(void)
             {
 
                 /* PWM On */
-                pwm_stGenOut.uwNewTIM1COMPR[0] = HW_HHPWM_PERIOD;
-                pwm_stGenOut.uwNewTIM1COMPR[1] = HW_HHPWM_PERIOD;
-                pwm_stGenOut.uwNewTIM1COMPR[2] = HW_HHPWM_PERIOD;
-                pwm_stGenOut.uwNewTIM1COMPR[3] = HW_HHPWM_PERIOD;
-                pwm_stGenOut.uwNewTIM1COMPR[4] = HW_HHPWM_PERIOD;
-                pwm_stGenOut.uwNewTIM1COMPR[5] = HW_HHPWM_PERIOD;
-                hw_voPWMOn();
+                pwm_stGenOut.uwNewTIM1COMPR[0] = HW_INIT_HHPWM_PERIOD;
+                pwm_stGenOut.uwNewTIM1COMPR[1] = HW_INIT_HHPWM_PERIOD;
+                pwm_stGenOut.uwNewTIM1COMPR[2] = HW_INIT_HHPWM_PERIOD;
+                pwm_stGenOut.uwNewTIM1COMPR[3] = HW_INIT_HHPWM_PERIOD;
+                pwm_stGenOut.uwNewTIM1COMPR[4] = HW_INIT_HHPWM_PERIOD;
+                pwm_stGenOut.uwNewTIM1COMPR[5] = HW_INIT_HHPWM_PERIOD;
+                sysctrl_voPwmOn();
 
                 /* 3rd FSM Init */
                 Switch_speed_FSMInit();

+ 3 - 9
User project/1.FrameLayer/Source/app.c

@@ -126,11 +126,8 @@ void AppLoop()
 
     TimingTaskLoopServer();
 
-#ifndef RUN_ARCH_SIM
     if(cp_stFlg.SpiOffsetFirstSetFinishFlg == TRUE && switch_flg.SysRun_Flag == FALSE && cp_stFlg.SpiOffsetFirstSetFlg==0 && FSM2nd_Run_state.state == Exit)
     {
-        DISABLE_IRQ;
-        
         MC_UpcInfo.stMContorlInfo.uwSaveFlg = 1;
         cp_stFlg.SpiOffsetFirstSetFlg = 1;
         mn_voEEUperParaUpdate();
@@ -138,8 +135,6 @@ void AppLoop()
         i2c_voParaWriteBuffer();
         i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
         MC_UpcInfo.stMContorlInfo.uwSaveFlg = 0;
-
-        ENABLE_IRQ;
     }
 
     if (cp_stFlg.ParaUpdateFlg == TRUE)
@@ -153,7 +148,6 @@ void AppLoop()
         {
             if (cp_stFlg.ParaHistorySaveEEFinishFlg == FALSE)
             {
-                DISABLE_IRQ;
                 cp_stHistoryPara.uwOpenTimes++;
                 cp_stHistoryPara.ulODOTime = MC_RideLog.ODO_Time;
                 cp_stHistoryPara.ulTripSumTime = MC_RideLog.TRIP_Time;
@@ -174,11 +168,10 @@ void AppLoop()
                     cp_stFlg.ParaSaveEEFinishFlg = TRUE;
                     cp_stFlg.ParaSaveEEFlg = FALSE;
                 }
-                ENABLE_IRQ;
             }
         }
     }
-#endif
+
 }
 
 void PeripheralInit()
@@ -222,4 +215,5 @@ void PeripheralStart()
 //    iPwm_EnableCount(0);
 //    iTimer_Start(HW_TBS_TIMER);
 //    iTimer_Start(HW_SYSTICK_TIMER);
-}
+}
+

+ 5 - 4
User project/1.FrameLayer/Source/gd32f30x_it.c

@@ -18,6 +18,7 @@
 #include "can.h"
 #include "FSM_1st.h"
 #include "api_rt.h"
+#include "sys_ctrl.h"
 /******************************
  *  Parameter
  ******************************/
@@ -44,13 +45,13 @@ void NMI_Handler(void)
 */
 void HardFault_Handler(void)
 {
-    hw_blPWMOnFlg = TRUE;/* HardFault_Handler无法被屏蔽,hw_blPWMOnFlg可能被RAMtest修改 */
-    hw_voPWMOff();
+    sysctrl_stPwmState.blPwmOnflg = TRUE;/* HardFault_Handler无法被屏蔽,hw_blPWMOnFlg可能被RAMtest修改 */
+    sysctrl_voPwmOff();
     /* if Hard Fault exception occurs, go to infinite loop */
     while (1)
-	{
+    {
     	//do nothing
-	}
+    }
 }
 
 /*!

+ 2 - 1
User project/1.FrameLayer/Source/main.c

@@ -33,7 +33,8 @@
 #include "torquesensor.h"
 #include "power.h"
 #include "STLmain.h"
-#include "api.h"
+#include "api_rt.h"
+#include "hwsetup.h"
 /************************************************************************
  Exported Functions:
 ************************************************************************/

+ 102 - 0
User project/1.FrameLayer/Source/sys_ctrl.c

@@ -0,0 +1,102 @@
+#include "sys_ctrl.h"
+#include "api.h"
+#include "CodePara.h"
+
+SysCtrl_PwmHandle sysctrl_stPwmState;
+
+void sysctrl_voPwmInit(void)
+{
+    /* Set 50% duty */
+    UWORD prd = iPwm_GetCountMax(0);
+    iPwm_SetCompareValue(0, 0, prd >> 1);
+    iPwm_SetCompareValue(0, 1, prd >> 1);
+    iPwm_SetCompareValue(0, 2, prd >> 1);
+    iPwm_SetCompareValueDelay(0, 0, prd >> 1);
+    iPwm_SetCompareValueDelay(0, 1, prd >> 1);
+    iPwm_SetCompareValueDelay(0, 2, prd >> 1);
+
+    /* PWM off */
+    sysctrl_voPwmOff();
+
+    /* Charge init */
+    sysctrl_stPwmState.uwChargeCnt = 0;
+    sysctrl_stPwmState.blChargeOvrFlg = FALSE;
+}
+
+void sysctrl_voPwmOn(void)
+{
+    if (sysctrl_stPwmState.blPwmOnflg == FALSE)
+    {
+        iPwm_SetCompareMode(0, API_PWM_CH(0), ApiPwm_HigherSet);
+        iPwm_SetCompareMode(0, API_PWM_CH(1), ApiPwm_HigherSet);
+        iPwm_SetCompareMode(0, API_PWM_CH(2), ApiPwm_HigherSet);
+        iPwm_SetCompareMode(0, API_PWM_CH(3), ApiPwm_HigherSet);
+        
+        iPwm_EnableChannelOutput(0, API_PWM_CH(0));
+        iPwm_EnableChannelOutput(0, API_PWM_CH(1));
+        iPwm_EnableChannelOutput(0, API_PWM_CH(2));
+        iPwm_EnableChannelOutput(0, API_PWM_CH(3));
+
+        iPwm_EnableChannelOutput(0, API_PWM_CHN(0));
+        iPwm_EnableChannelOutput(0, API_PWM_CHN(1));
+        iPwm_EnableChannelOutput(0, API_PWM_CHN(2));
+        iPwm_EnableChannelOutput(0, API_PWM_CHN(3));
+
+        sysctrl_stPwmState.blPwmOnflg = TRUE;
+    }
+}
+
+void sysctrl_voPwmOff(void)
+{
+    if (sysctrl_stPwmState.blPwmOnflg == TRUE)
+    {
+        iPwm_SetCompareMode(0, API_PWM_CH(0), ApiPwm_ForceClear);
+        iPwm_SetCompareMode(0, API_PWM_CH(1), ApiPwm_ForceClear);
+        iPwm_SetCompareMode(0, API_PWM_CH(2), ApiPwm_ForceClear);
+        iPwm_SetCompareMode(0, API_PWM_CH(3), ApiPwm_ForceClear);
+
+        iPwm_DisableChannelOutput(0, API_PWM_CHN(0));
+        iPwm_DisableChannelOutput(0, API_PWM_CHN(1));
+        iPwm_DisableChannelOutput(0, API_PWM_CHN(2));
+        iPwm_DisableChannelOutput(0, API_PWM_CHN(3));
+
+        sysctrl_stPwmState.blPwmOnflg = FALSE;
+    }
+}
+
+void sysctrl_voCharge(void)
+{
+    /* Set 50% duty */
+    UWORD prd = iPwm_GetCountMax(0);
+    iPwm_SetCompareValue(0, 0, prd >> 1);
+    iPwm_SetCompareValue(0, 1, prd >> 1);
+    iPwm_SetCompareValue(0, 2, prd >> 1);
+    iPwm_SetCompareValueDelay(0, 0, prd >> 1);
+    iPwm_SetCompareValueDelay(0, 1, prd >> 1);
+    iPwm_SetCompareValueDelay(0, 2, prd >> 1);
+
+    sysctrl_voPwmOn();
+
+    sysctrl_stPwmState.uwChargeCnt ++;
+    if (sysctrl_stPwmState.uwChargeCnt > cp_stControlPara.swIPMHvicChrgMs)
+    {
+        sysctrl_stPwmState.uwChargeCnt = 0;
+        sysctrl_stPwmState.blChargeOvrFlg = TRUE;
+    }
+}
+
+void sysctrl_voThrPhsShrt(void)
+{
+    /* Set 0% duty */
+    iPwm_SetCompareValue(0, 0, 0);
+    iPwm_SetCompareValue(0, 1, 0);
+    iPwm_SetCompareValue(0, 2, 0);
+    iPwm_SetCompareValueDelay(0, 2, 0);
+    iPwm_SetCompareValueDelay(0, 2, 0);
+    iPwm_SetCompareValueDelay(0, 2, 0);
+    iPwm_SetCompareValueImmediate(0, 2, 0);
+    iPwm_SetCompareValueImmediate(0, 2, 0);
+    iPwm_SetCompareValueImmediate(0, 2, 0);
+
+    sysctrl_voPwmOn();
+}

+ 0 - 0
User project/2.MotorDrive/Include/motordriveAPI.h


+ 6 - 6
User project/2.MotorDrive/Source/adc.c

@@ -29,7 +29,7 @@ Revising History (ECL of this file):
 #include "user.h"
 #include "Temp.h"
 #include "api.h"
-
+#include "sys_ctrl.h"
 /************************************************************************
  Constant Table:
 *************************************************************************/
@@ -51,17 +51,17 @@ void adc_voCalibration(ADC_COF *cof, ADC_DOWN_OUT *out1, ADC_UP_OUT *out2)
 
     if (out1->blADCCalibFlg == FALSE || out2->blADCCalibFlg == FALSE)
     {
-        if (!hw_blChrgOvrFlg)
+        if (!sysctrl_stPwmState.blChargeOvrFlg)
         {
-            hw_voCharge();
+            sysctrl_voCharge();
         }
         else
         {
             if(cp_stFlg.CurrentSampleModelSelect == COMBINATION)
             {
                 ULONG samplingTick[2];
-                samplingTick[0]=HW_HHHPWM_PERIOD;
-                samplingTick[1]=129;
+                samplingTick[0] = HW_INIT_HHHPWM_PERIOD;
+                samplingTick[1] = 129;
                 iPwm_SyncMultiSamplingCountUp(0, &samplingTick[0], 2);
                 pwm_stGenOut.blSampleCalibFlag = TRUE;
                 if (out1->uwADCCalibCt < (1 << ADC_CALIB_INDEX))
@@ -74,7 +74,7 @@ void adc_voCalibration(ADC_COF *cof, ADC_DOWN_OUT *out1, ADC_UP_OUT *out2)
                 }
                 else
                 {
-                    hw_voPWMInit(); // mos up charge and adc calib over; pwm off
+                    sysctrl_voPwmInit(); // mos up charge and adc calib over; pwm off
                     cof->uwIaOffset = (UWORD)(out1->ulIaRegSum >> (ADC_CALIB_INDEX));
                     cof->uwIbOffset = (UWORD)(out1->ulIbRegSum >> (ADC_CALIB_INDEX));
                     cof->uwIcOffset = (UWORD)(out1->ulIcRegSum >> (ADC_CALIB_INDEX));

+ 13 - 8
User project/2.MotorDrive/Source/alarm.c

@@ -31,6 +31,11 @@ Included File:
 #include "FSM_2nd.h"
 #include "spdctrFSM.h"
 #include "api.h"
+#include "sys_ctrl.h"
+
+#ifndef RUN_ARCH_SIM
+#include "gd32f30x.h"
+#endif
 /************************************************************************
 Private Variables:
 ************************************************************************/
@@ -816,7 +821,7 @@ void alm_voStopTBC(const ALM_IN *in, const ALM_STOPTBC_COF *coef)
     {
         if (iPwm_GetBreakState(0) != 0)
         {
-            hw_voPWMOff();     /* PWM off */
+            sysctrl_voPwmOff();     /* PWM off */
             iPwm_ClearBreak(0); /* Clear TIME0 break flag */
             iPwm_EnableOutput(0);   /* Enable TIME0 Channel outputs */
 
@@ -826,7 +831,7 @@ void alm_voStopTBC(const ALM_IN *in, const ALM_STOPTBC_COF *coef)
                 alm_stStopCt.uwRotorStopCnt++;
                 if (alm_stStopCt.uwRotorStopCnt >= coef->ulStopCurValCt) // 100ms
                 {
-                    hw_voPWMOff(); /* PWM off */
+                    sysctrl_voPwmOff(); /* PWM off */
                     cmfsm_stFlg.blMotorStopFlg = TRUE;
                     alm_stStopCt.uwRotorStopCnt = (UWORD)coef->ulStopCurValCt;
                 }
@@ -842,12 +847,12 @@ void alm_voStopTBC(const ALM_IN *in, const ALM_STOPTBC_COF *coef)
         alm_stStopCt.ulPWMOff++;
         if (alm_stStopCt.ulPWMOffShrtSw < coef->ulPWMOffShrt1SwValCt) // 100ms
         {
-            hw_voPWMOff();
+            sysctrl_voPwmOff();
             alm_stStopCt.uwRotorStopCnt = 0;
         }
         // else if(alm_stStopCt.ulPWMOffShrtSw < coef->ulPWMOffShrt2SwValCt)
         // {
-        //   hw_voThrPhsShrt();
+        //   sysctrl_voThrPhsShrt();
         // }
         else
         {
@@ -869,11 +874,11 @@ void alm_voStopTBC(const ALM_IN *in, const ALM_STOPTBC_COF *coef)
 
         if (alm_stStopCt.ulShrtPWMOffSw < coef->ulThrPhsShrtNormValCt) // 100ms
         {
-            hw_voThrPhsShrt(); /* Three phase short */
+            sysctrl_voThrPhsShrt(); /* Three phase short */
         }
         else if (alm_stStopCt.ulShrtPWMOffSw < (coef->ulThrPhsShrtNormValCt + coef->ulShrtPWMOffSwValCt)) // 100ms + 100ms
         {
-            hw_voPWMOff();
+            sysctrl_voPwmOff();
             if (in->uwVdcPu > coef->ulOvrVltLvl1ValPu) // over vol level1 43V
             {
                 alm_stStopCt.ulShrtPWMOffSw = 0;
@@ -887,7 +892,7 @@ void alm_voStopTBC(const ALM_IN *in, const ALM_STOPTBC_COF *coef)
 
         if (alm_stStopCt.ulThrPhsShrt > coef->ulThrPhsShrtFrcValCt) // 200ms
         {
-            hw_voPWMOff(); /* PWM off */
+            sysctrl_voPwmOff(); /* PWM off */
             cmfsm_stFlg.blMotorStopFlg = TRUE;
             alm_stStopCt.ulThrPhsShrt = 0;
         }
@@ -1384,7 +1389,7 @@ void alm_voHandle1MS(const ALM_BIKE_IN *in)
           if (alm_unAction.bit.PWMOff != 0)
           {
             alm_stStopCt.ulBikePWMOff++;
-            hw_voPWMOff();
+            sysctrl_voPwmOff();
             if (alm_stStopCt.ulBikePWMOff > 200) // 200ms, SysFault_hook, Event 1ms
             {
                 cmfsm_stFlg.blMotorStopFlg = TRUE;

+ 11 - 11
User project/2.MotorDrive/Source/pwm.c

@@ -68,19 +68,19 @@ void pwm_voInit(void)
     pwm_stGenOut.swUalphaPu = 0; // Q14
     pwm_stGenOut.swUbetaPu = 0;  // Q14
     pwm_stGenOut.uwNewSectorNum = 0;
-    pwm_stGenOut.uwNewTIM1COMPR[0] = HW_HHPWM_PERIOD;
-    pwm_stGenOut.uwNewTIM1COMPR[1] = HW_HHPWM_PERIOD;
-    pwm_stGenOut.uwNewTIM1COMPR[2] = HW_HHPWM_PERIOD;
-    pwm_stGenOut.uwNewTIM1COMPR[3] = HW_HHPWM_PERIOD;
-    pwm_stGenOut.uwNewTIM1COMPR[4] = HW_HHPWM_PERIOD;
-    pwm_stGenOut.uwNewTIM1COMPR[5] = HW_HHPWM_PERIOD;
-    pwm_stGenOut.uwFirstTrigCOMPR = HW_HHHPWM_PERIOD;
-    pwm_stGenOut.uwSecondTrigCOMPR = HW_HHPWM_PERIOD + HW_HHHPWM_PERIOD;
+    pwm_stGenOut.uwNewTIM1COMPR[0] = HW_INIT_HHPWM_PERIOD;
+    pwm_stGenOut.uwNewTIM1COMPR[1] = HW_INIT_HHPWM_PERIOD;
+    pwm_stGenOut.uwNewTIM1COMPR[2] = HW_INIT_HHPWM_PERIOD;
+    pwm_stGenOut.uwNewTIM1COMPR[3] = HW_INIT_HHPWM_PERIOD;
+    pwm_stGenOut.uwNewTIM1COMPR[4] = HW_INIT_HHPWM_PERIOD;
+    pwm_stGenOut.uwNewTIM1COMPR[5] = HW_INIT_HHPWM_PERIOD;
+    pwm_stGenOut.uwFirstTrigCOMPR = HW_INIT_HHHPWM_PERIOD;
+    pwm_stGenOut.uwSecondTrigCOMPR = HW_INIT_HHPWM_PERIOD + HW_INIT_HHHPWM_PERIOD;
     pwm_stGenOut.uwOldTrig = 0;
     pwm_stGenOut.uwNewTrig = 0;
     pwm_stGenOut.uwSampleArea = IgnoreNone;
     pwm_stGenOut.uwRdsonTrig = 129;
-    pwm_stGenOut.uwSigRTrig = HW_HHHPWM_PERIOD;
+    pwm_stGenOut.uwSigRTrig = HW_INIT_HHHPWM_PERIOD;
     pwm_stGenOut.blSampleCalibFlag = FALSE;
 }
 
@@ -393,11 +393,11 @@ void pwm_voGen(PWM_GEN_IN *in, const PWM_CALC_COF *coef, PWM_GEN_OUT *out) /* pa
         else
         {
             out->blSampleCalibFlag = FALSE;
-            out->uwSigRTrig = HW_HHHPWM_PERIOD;
+            out->uwSigRTrig = HW_INIT_HHHPWM_PERIOD;
         }
 
         out->uwSingelRSampleAreaLast = out->uwSingelRSampleArea;
-        if(1)//hw_blChrgOvrFlg == TRUE)
+        if(1)//sysctrl_stPwmState.blChargeOvrFlg == TRUE)
         {
         switch (uwSector)
         {

+ 1 - 1
User project/2.MotorDrive/Source/spdctrFSM.c

@@ -341,7 +341,7 @@ void Stop_TbcdownHook(void)
     scm_swIdRefPu = 0;
     scm_swIqRefPu = 0;
 
-    hw_voPWMInit();
+    sysctrl_voPwmInit();
     cmfsm_stFlg.blMotorStopFlg = TRUE;
 }
 

+ 2 - 2
User project/2.MotorDrive/Source/spdctrmode.c

@@ -50,7 +50,7 @@ Revising History (ECL of this file):
 void scm_voSpdCtrMdInit(void)
 {
     //    /* PWM init */
-    //    hw_voPWMInit();
+    //    sysctrl_voPwmInit();
     /*cmd handle Initial */
     cmd_voCmdInit();
     /* Current PI init */
@@ -340,7 +340,7 @@ void scm_voSpdCtrMdCoef(void)
         pwm_stGenCoefIn.uwSampleSteadyPu = cp_stControlPara.swPWMSampleToSteady;
         pwm_stGenCoefIn.uwSingelResisSamplePu = cp_stControlPara.swPWMSampleSigR;
         pwm_stGenCoefIn.uwOvmNo = cp_stControlPara.swPWMOverMdlMode;
-        pwm_stGenCoefIn.uwPWMPd = HW_PWM_PERIOD;
+        pwm_stGenCoefIn.uwPWMPd = HW_INIT_PWM_PERIOD;
         pwm_voGenCoef(&pwm_stGenCoefIn, &pwm_stGenCoef);
 
         scm_uwAcrLimCof = (UWORD)((ULONG)cp_stControlPara.swPWMMaxDuty * cp_stControlPara.uwAcrCurOutLim / 1000);   // Q15

+ 0 - 3
User project/3.BasicFunction/Include/canAppl.h

@@ -16,9 +16,6 @@
 #define CANAPPL_H
 
 #include "typedefine.h"
-#ifndef RUN_ARCH_SIM
-#include "gd32f30x.h"
-#endif
 
 #ifdef __cplusplus
 extern "C" {

+ 1 - 3
User project/3.BasicFunction/Source/Cadence.c

@@ -18,9 +18,7 @@
 #include "CodePara.h"
 #include "api.h"
 #include "board_config.h"
-#ifdef RUN_ARCH_SIM
-#include "test_user.h"
-#endif
+
 /******************************
  *
  *  Parameter

+ 1 - 3
User project/3.BasicFunction/Source/bikespeed.c

@@ -18,9 +18,7 @@
 #include "CodePara.h"
 #include "api.h"
 #include "board_config.h"
-#ifdef RUN_ARCH_SIM
-#include "test_user.h"
-#endif
+
 /******************************
  *
  *  Parameter

+ 5 - 3
User project/3.BasicFunction/Source/can.c

@@ -47,10 +47,10 @@ ULONG    CRC32_Calculate(const UBYTE pData[], UWORD Length)
 {}
 
 #else
+
+#include "can.h"
 #include "stdlib.h"
 #include "string.h"
-#include "gd32f30x.h"
-#include "can.h"
 #include "canAppl.h"
 #include "CodePara.h"
 #include "flash_master.h"
@@ -58,7 +58,9 @@ ULONG    CRC32_Calculate(const UBYTE pData[], UWORD Length)
 #include "power.h"
 #include "torquesensor.h"
 #include "api.h"
-#include "api.h"
+
+#include "gd32f30x.h"
+#include "hwsetup.h"
 static const ULONG Crc32Table[256] = {
     0x00000000U, 0x04C11DB7U, 0x09823B6EU, 0x0D4326D9U, 0x130476DCU, 0x17C56B6BU, 0x1A864DB2U, 0x1E475005U, 0x2608EDB8U, 0x22C9F00FU, 0x2F8AD6D6U, 0x2B4BCB61U,
     0x350C9B64U, 0x31CD86D3U, 0x3C8EA00AU, 0x384FBDBDU, 0x4C11DB70U, 0x48D0C6C7U, 0x4593E01EU, 0x4152FDA9U, 0x5F15ADACU, 0x5BD4B01BU, 0x569796C2U, 0x52568B75U,

+ 12 - 8
User project/3.BasicFunction/Source/canAppl.c

@@ -8,21 +8,25 @@
  * @copyright Copyright (c) 2022
  *
  */
+
+/******************************
+ *
+ *  Include Files
+ *
+ ******************************/
 #include "canAppl.h"
+#include "syspar.h"
+#include "user.h"
 #include "CodePara.h"
-#include "adc.h"
-#include "alarm.h"
 #include "can.h"
 #include "flash_master.h"
-#include "glbcof.h"
-#include "spdctrmode.h"
-#include "syspar.h"
 #include "AssistCurve.h"
-#include "hwsetup.h"
 #include "spi_master.h"
 #include "torquesensor.h"
-#include "user.h"
 #include "FSM_2nd.h"
+#include "sys_ctrl.h"
+
+//#include "hwsetup.h"
 #include "fp.def"
 /******************************
  *
@@ -565,7 +569,7 @@ void Can_voMC_Run_200ms(void)
     {
         scm_swMotorPwrInLpfWt = 0;
     }
-    if (hw_blPWMOnFlg == FALSE)
+    if (sysctrl_stPwmState.blPwmOnflg == FALSE)
     {
         scm_swMotorPwrInLpfWt = 0;
     }

+ 4 - 1
User project/3.BasicFunction/Source/spi_master.c

@@ -41,10 +41,13 @@ void spi_voReadWriteSeneorReg(void)
 {}
 
 #else
-
+#include "syspar.h"
 #include "user.h"
 #include "spi_master.h"
 #include "api.h"
+
+#include "gd32f30x_libopt.h"
+
 /*************************************************************************
  Exported Functions (N/A)
 *************************************************************************/

+ 3 - 3
User project/4.BasicHardwSoftwLayer/1.BasicHardwLayer/Include/board_config.h

@@ -102,15 +102,15 @@
 #define HW_EVENT1MS_TIMER        2
 #define HW_SYSTICK_TIMER         3
 
-/* ADC0 injected group*/
+/* ADC0 injected group: API ADC1 */
 #define HW_ADC_IA_CH 0
 #define HW_ADC_IB_CH 1
 #define HW_ADC_IC_CH 2
 
-/* ADC1 injected group*/
+/* ADC1 injected group: API ADC2 */
 #define HW_ADC_IDC_CH 0
 
-/* ADC0 regular group*/
+/* ADC0 regular group: API ADC0 */
 #define HW_ADC_UDC_CH     0
 #define HW_ADC_U6V_CH     1
 #define HW_ADC_U5V_CH     2

+ 26 - 40
User project/4.BasicHardwSoftwLayer/1.BasicHardwLayer/Include/hwsetup.h

@@ -6,7 +6,7 @@
  Complier:            IAR Embedded Workbench for ARM 8.40.2
  CPU TYPE :           GD32F30x
 *************************************************************************
- Copyright (c) 2022 Welling Motor Technology(Shanghai) Co. Ltd.
+ Copyright (c) 2023 Welling Motor Technology(Shanghai) Co. Ltd.
  All rights reserved.
 *************************************************************************
 *************************************************************************
@@ -21,12 +21,17 @@
 #ifndef HWSETUP_H
 #define HWSETUP_H
 
+/************************************************************************
+ Included Files
+*************************************************************************/
+#include "typedefine.h"
+#include "syspar.h"
+#include "board_config.h"
+
 #ifndef RUN_ARCH_SIM
-#include "gd32f30x_libopt.h"
+#include "gd32f30x.h"
 #include "STLmain.h"
 #endif
-#include "syspar.h"
-#include "board_config.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -63,12 +68,12 @@ extern "C" {
 #define HW_PWM_PERIOD_INV (((ULONG)1 << 21) / HW_PWM_PERIOD) // Q21
 /* ADC trigger time */
 #define HW_ADC_TRI_TIME_US 10 /* unit: 0.1us */
-/* Timer0 DMA number */
-#define TIM1_DMA_NUM 6
-/* ADC DMA number */
-#define ADC0_DMA_NUM 8
-#define ADC1_DMA_NUM 1
-#define ADC2_DMA_NUM 7
+ /* Timer0 DMA number */
+ #define TIM1_DMA_NUM 6
+ /* ADC DMA number */
+ #define ADC0_DMA_NUM 8
+ #define ADC1_DMA_NUM 1
+ #define ADC2_DMA_NUM 7
 /* Interrupt ON/OFF define */
 #define ENABLE_IRQ  stl_voEnableIrq()
 #define DISABLE_IRQ stl_voDisableIrq()
@@ -112,23 +117,17 @@ Constant Table
 /************************************************************************
  Exported Variables
 ************************************************************************/
-#ifdef _HWSETUP_C_
-_HWSETUP_EXT BOOL  hw_blPWMOnFlg = FALSE;
-_HWSETUP_EXT BOOL  hw_blChrgOvrFlg = FALSE;
-_HWSETUP_EXT UWORD hw_uwChrgCt = 0;
-_HWSETUP_EXT UWORD hw_uwPWMCmpr[TIM1_DMA_NUM];
-_HWSETUP_EXT UWORD hw_uwADC0[ADC0_DMA_NUM];
-_HWSETUP_EXT UWORD hw_uwADC1[ADC1_DMA_NUM];
-_HWSETUP_EXT UWORD hw_uwADC2[ADC2_DMA_NUM];
-#else
-_HWSETUP_EXT BOOL  hw_blPWMOnFlg;
-_HWSETUP_EXT BOOL  hw_blChrgOvrFlg;
-_HWSETUP_EXT UWORD hw_uwChrgCt;
-_HWSETUP_EXT UWORD hw_uwPWMCmpr[TIM1_DMA_NUM];
-_HWSETUP_EXT UWORD hw_uwADC0[ADC0_DMA_NUM];
-_HWSETUP_EXT UWORD hw_uwADC1[ADC1_DMA_NUM];
-_HWSETUP_EXT UWORD hw_uwADC2[ADC2_DMA_NUM];
-#endif
+// #ifdef _HWSETUP_C_
+// _HWSETUP_EXT UWORD hw_uwPWMCmpr[TIM1_DMA_NUM];
+// _HWSETUP_EXT UWORD hw_uwADC0[ADC0_DMA_NUM];
+// _HWSETUP_EXT UWORD hw_uwADC1[ADC1_DMA_NUM];
+// _HWSETUP_EXT UWORD hw_uwADC2[ADC2_DMA_NUM];
+// #else
+// _HWSETUP_EXT UWORD hw_uwPWMCmpr[TIM1_DMA_NUM];
+// _HWSETUP_EXT UWORD hw_uwADC0[ADC0_DMA_NUM];
+// _HWSETUP_EXT UWORD hw_uwADC1[ADC1_DMA_NUM];
+// _HWSETUP_EXT UWORD hw_uwADC2[ADC2_DMA_NUM];
+// #endif
 
 /************************************************************************
  RAM ALLOCATION (N/A)
@@ -161,25 +160,12 @@ _HWSETUP_EXT void hw_voInitSPI2(void);
 _HWSETUP_EXT void hw_voInitI2C0(void);
 _HWSETUP_EXT void hw_voInitSysTick(void);
 _HWSETUP_EXT void hw_voInitCAN(void);
-
-_HWSETUP_EXT void hw_voPWMInit(void);
-_HWSETUP_EXT void hw_voPWMOn(void);
-_HWSETUP_EXT void hw_voPWMOff(void);
-_HWSETUP_EXT void hw_voCharge(void);
-_HWSETUP_EXT void hw_voThrPhsShrt(void);
-_HWSETUP_EXT void hw_voIWDGInit(UWORD prer, UWORD rlr);
 _HWSETUP_EXT void hw_voInitEXTI(void);
 #else
 _HWSETUP_EXT void hw_voHardwareSetup1(void);
 _HWSETUP_EXT void hw_voHardwareSetup2(void);
 _HWSETUP_EXT void hw_voEnInt(void);
 _HWSETUP_EXT void hw_voTimEn(void);
-
-_HWSETUP_EXT void hw_voPWMInit(void);
-_HWSETUP_EXT void hw_voPWMOn(void);
-_HWSETUP_EXT void hw_voPWMOff(void);
-_HWSETUP_EXT void hw_voCharge(void);
-_HWSETUP_EXT void hw_voThrPhsShrt(void);
 _HWSETUP_EXT void hw_voIWDGInit(UWORD prer, UWORD rlr);
 #endif
 

+ 1 - 126
User project/4.BasicHardwSoftwLayer/1.BasicHardwLayer/Source/hwsetup.c

@@ -23,6 +23,7 @@
 /************************************************************************
  Included File
 *************************************************************************/
+#include "hwsetup.h"
 #include "syspar.h"
 #include "user.h"
 #include "can.h"
@@ -1212,133 +1213,7 @@ void hw_voTimEn(void)
     /*  counter enable */
     timer_enable(TIMER6);
 }
-void hw_voPWMInit(void)
-{
-    /* Set 50% duty */
-    UWORD prd = iPwm_GetCountMax(0);
-    iPwm_SetCompareValue(0, 0, prd >> 1);
-    iPwm_SetCompareValue(0, 1, prd >> 1);
-    iPwm_SetCompareValue(0, 2, prd >> 1);
-    iPwm_SetCompareValueDelay(0, 0, prd >> 1);
-    iPwm_SetCompareValueDelay(0, 1, prd >> 1);
-    iPwm_SetCompareValueDelay(0, 2, prd >> 1);
-
-    /* PWM off */
-    hw_voPWMOff();
-
-    /* Charge init */
-    hw_uwChrgCt = 0;
-    hw_blChrgOvrFlg = FALSE;
-}
-
-void hw_voPWMOn(void)
-{
-#if (0)
-    timer_oc_parameter_struct timer_ocintpara;
-
-    if (hw_blPWMOnFlg == FALSE)
-    {
-        /* CH0, CH1 and CH2 output enable */
-        timer_ocintpara.outputstate  = TIMER_CCX_ENABLE;
-        timer_ocintpara.outputnstate = TIMER_CCXN_ENABLE;
-        timer_channel_output_config(TIMER0, TIMER_CH_0, &timer_ocintpara);
-        timer_channel_output_config(TIMER0, TIMER_CH_1, &timer_ocintpara);
-        timer_channel_output_config(TIMER0, TIMER_CH_2, &timer_ocintpara);
-
-        /* Flag set */
-        hw_blPWMOnFlg = TRUE;
-    }
-#endif
-
-    if (hw_blPWMOnFlg == FALSE)
-    {
-        /* CH0, CH1 set to "PWM mode 2" */
-        TIMER_CHCTL0(TIMER0) |= 0x7070;
-        /* CH2, CH3 set to "PWM mode 2" */
-        TIMER_CHCTL1(TIMER0) |= 0x7070;
-        /* CH0, CH1 and CH2, CH3 output enable */
-        TIMER_CHCTL2(TIMER0) |= 0x5555;
-
-        /* Flag set */
-        hw_blPWMOnFlg = TRUE;
-    }
-}
-
-void hw_voPWMOff(void)
-{
-#if (0)
-    timer_oc_parameter_struct timer_ocintpara;
 
-    if (hw_blPWMOnFlg == TRUE)
-    {
-        /* CH0, CH1 and CH2 output disable */
-        timer_ocintpara.outputstate  = TIMER_CCX_DISABLE;
-        timer_ocintpara.outputnstate = TIMER_CCXN_DISABLE;
-        timer_channel_output_config(TIMER0, TIMER_CH_0, &timer_ocintpara);
-        timer_channel_output_config(TIMER0, TIMER_CH_1, &timer_ocintpara);
-        timer_channel_output_config(TIMER0, TIMER_CH_2, &timer_ocintpara);
-
-        /* Flag set */
-        hw_blPWMOnFlg = FALSE;
-    }
-#endif
-
-    if (hw_blPWMOnFlg == TRUE)
-    {
-        /* CH0, CH1 set to "Frozen" */
-        TIMER_CHCTL0(TIMER0) &= ~0x7070;
-        /* CH2, CH3 set to "Frozen" */
-        TIMER_CHCTL1(TIMER0) &= ~0x7070;
-        /* CH0, CH1 set to "Force inactive level" */
-        TIMER_CHCTL0(TIMER0) |= 0x4040;
-        /* CH2, CH3 set to "Force inactive level" */
-        TIMER_CHCTL1(TIMER0) |= 0x4040;
-        /* CH0, CH1 and CH2 complementary output disable */
-        TIMER_CHCTL2(TIMER0) &= ~0x0444;
-
-        /* Flag set */
-        hw_blPWMOnFlg = FALSE;
-    }
-}
-
-void hw_voCharge(void)
-{
-    /* Set 50% duty */
-    UWORD prd = iPwm_GetCountMax(0);
-    iPwm_SetCompareValue(0, 0, prd >> 1);
-    iPwm_SetCompareValue(0, 1, prd >> 1);
-    iPwm_SetCompareValue(0, 2, prd >> 1);
-    iPwm_SetCompareValueDelay(0, 0, prd >> 1);
-    iPwm_SetCompareValueDelay(0, 1, prd >> 1);
-    iPwm_SetCompareValueDelay(0, 2, prd >> 1);
-
-    /* PWM on */
-    hw_voPWMOn();
-
-    ++hw_uwChrgCt;
-    if (hw_uwChrgCt > cp_stControlPara.swIPMHvicChrgMs)
-    {
-        hw_uwChrgCt = 0;
-        hw_blChrgOvrFlg = TRUE;
-    }
-}
-
-/* Three phase short */
-void hw_voThrPhsShrt(void)
-{
-    /* Set 0% duty */
-    iPwm_SetCompareValue(0, 0, 0);
-    iPwm_SetCompareValue(0, 1, 0);
-    iPwm_SetCompareValue(0, 2, 0);
-    iPwm_SetCompareValueDelay(0, 2, 0);
-    iPwm_SetCompareValueDelay(0, 2, 0);
-    iPwm_SetCompareValueDelay(0, 2, 0);
-    iPwm_SetCompareValueImmediate(0, 2, 0);
-    iPwm_SetCompareValueImmediate(0, 2, 0);
-    iPwm_SetCompareValueImmediate(0, 2, 0);
-    /* PWM on */
-    hw_voPWMOn();
-}
 /*************************************************************************
  Function
  Description: Initialize UART

+ 2 - 1
User project/4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Include/user.h

@@ -499,7 +499,8 @@ Update Time
 *************************************************************************/
 #include "classB.h"
 #include "CodePara.h"
-#include "hwsetup.h"
+//#include "hwsetup.h"
+#include "board_config.h"
 #include "mathtool.h"
 #include "main.h"
 #include "spdctrFSM.h"

+ 38 - 38
User project/5.Api_rt/api_rt_pwm.c

@@ -494,44 +494,44 @@ void iPwm_DisableOutput(uint8_t devIndex)
     Pwms[devIndex].OutputEnable = 0;
 }
 
-// // int8_t Pwm_GetChannelEnableState(uint8_t devIndex, uint8_t channelIndex)
-// // {
-
-// // }
-
-// // void Pwm_EnableChannelOutput(uint8_t devIndex, uint8_t channelIndex)
-// // {
-// //     ASSERT_LESS(devIndex, 1);
-// //     ASSERT_LESS(channelIndex, 4);
-
-// //     TIM_TypeDef *base = Pwms[devIndex].PwmBase;
-
-// //     if (channelIndex < 64)
-// //     {
-// //         base->CCER |= ((uint32_t)0x01) << (channelIndex * 4);
-// //     }
-// //     else
-// //     {
-// //         base->CCER |= ((uint32_t)0x04) << ((channelIndex - 64) * 4);
-// //     }
-// // }
-
-// // void Pwm_DisableChannelOutput(uint8_t devIndex, uint8_t channelIndex)
-// // {
-// //     ASSERT_LESS(devIndex, 1);
-// //     ASSERT_LESS(channelIndex, 4);
-
-// //     TIM_TypeDef *base = Pwms[devIndex].PwmBase;
-
-// //     if (channelIndex < 64)
-// //     {
-// //         base->CCER &= ~(((uint32_t)0x01) << (channelIndex * 4));
-// //     }
-// //     else
-// //     {
-// //         base->CCER &= ~(((uint32_t)0x04) << ((channelIndex - 64) * 4));
-// //     }
-// // }
+int8_t iPwm_GetChannelEnableState(uint8_t devIndex, uint8_t channelIndex)
+{
+
+}
+
+void iPwm_EnableChannelOutput(uint8_t devIndex, uint8_t channelIndex)
+{
+    ASSERT_LESS(devIndex, 1);
+    ////ASSERT_LESS(channelIndex, 4);
+
+    uint32_t base = Pwms[devIndex].PwmBase;
+
+    if (channelIndex < 64)
+    {
+        TIMER_CHCTL2(base)|= ((uint32_t)0x01) << (channelIndex * 4);
+    }
+    else
+    {
+        TIMER_CHCTL2(base)|= ((uint32_t)0x04) << ((channelIndex - 64) * 4);
+    }
+}
+
+void iPwm_DisableChannelOutput(uint8_t devIndex, uint8_t channelIndex)
+{
+    ASSERT_LESS(devIndex, 1);
+    ////ASSERT_LESS(channelIndex, 4);
+
+    uint32_t base = Pwms[devIndex].PwmBase;
+
+    if (channelIndex < 64)
+    {
+        TIMER_CHCTL2(base)&= ~(((uint32_t)0x01) << (channelIndex * 4));
+    }
+    else
+    {
+        TIMER_CHCTL2(base) &= ~(((uint32_t)0x04) << ((channelIndex - 64) * 4));
+    }
+}
 
 void iPwm_EnableDeviceInterrupt(uint8_t devIndex, ApiPwm_DeviceInterrupt interrupt)
 {

+ 6 - 3
WLMCP.ewp

@@ -2468,6 +2468,9 @@
                 <file>
                     <name>$PROJ_DIR$\User project\1.FrameLayer\Include\main.h</name>
                 </file>
+                <file>
+                    <name>$PROJ_DIR$\User project\1.FrameLayer\Include\sys_ctrl.h</name>
+                </file>
                 <file>
                     <name>$PROJ_DIR$\User project\1.FrameLayer\Include\sys_task.h</name>
                 </file>
@@ -2501,6 +2504,9 @@
                 <file>
                     <name>$PROJ_DIR$\User project\1.FrameLayer\Source\main.c</name>
                 </file>
+                <file>
+                    <name>$PROJ_DIR$\User project\1.FrameLayer\Source\sys_ctrl.c</name>
+                </file>
                 <file>
                     <name>$PROJ_DIR$\User project\1.FrameLayer\Source\sys_task.c</name>
                 </file>
@@ -2558,9 +2564,6 @@
                 <file>
                     <name>$PROJ_DIR$\User project\2.MotorDrive\Include\hfinj.h</name>
                 </file>
-                <file>
-                    <name>$PROJ_DIR$\User project\2.MotorDrive\Include\motordriveAPI.h</name>
-                </file>
                 <file>
                     <name>$PROJ_DIR$\User project\2.MotorDrive\Include\obs.h</name>
                 </file>

+ 6 - 0
tests/sim/sim_board/api_rt/api_rt_pwm.c

@@ -256,6 +256,12 @@ int8_t iPwm_GetEnableState(uint8_t devIndex)
     return Pwms[devIndex].OutputEnable;
 }
 
+void iPwm_EnableChannelOutput(uint8_t devIndex, uint8_t channelIndex)
+{}
+
+void iPwm_DisableChannelOutput(uint8_t devIndex, uint8_t channelIndex)
+{}
+
 void iPwm_EnableOutput(uint8_t devIndex)
 {
     ASSERT_LESS(devIndex, 1);

+ 1 - 0
tests/sim/sim_board/xmake.lua

@@ -11,6 +11,7 @@ target("sim_sfunc")
     add_files("$(projectdir)/User project/1.FrameLayer/Source/FSM_1st.c")
     add_files("$(projectdir)/User project/1.FrameLayer/Source/FSM_2nd.c")
     add_files("$(projectdir)/User project/1.FrameLayer/Source/main.c")
+    add_files("$(projectdir)/User project/1.FrameLayer/Source/sys_ctrl.c")
     add_files("$(projectdir)/User project/1.FrameLayer/Source/sys_task.c")
     add_files("$(projectdir)/User project/1.FrameLayer/Source/tbc.c")
     add_files("$(projectdir)/User project/1.FrameLayer/Source/tbs.c")

+ 6 - 0
tests/unit_test/board_sim/api_rt/api_rt_pwm.c

@@ -102,6 +102,12 @@ int8_t iPwm_GetEnableState(uint8_t devIndex)
 
 }
 
+void iPwm_EnableChannelOutput(uint8_t devIndex, uint8_t channelIndex)
+{}
+
+void iPwm_DisableChannelOutput(uint8_t devIndex, uint8_t channelIndex)
+{}
+
 void iPwm_EnableOutput(uint8_t devIndex)
 {
 

+ 0 - 29
tests/unit_test/test_user.c

@@ -43,35 +43,6 @@ void stl_voDoRunTimeChecks()
 void NVIC_SystemReset()
 {}
 
-/*====  temp  ====*/
-BOOL hw_blChrgOvrFlg = 1;
-BOOL hw_blPWMOnFlg;
-
-void hw_voPWMOn()
-{
-    hw_blPWMOnFlg = 1;
-}
-
-void hw_voPWMOff()
-{
-    hw_blPWMOnFlg = 1;
-}
-
-void hw_voPWMInit()
-{
-    hw_voPWMOff();
-    hw_blChrgOvrFlg = 0; 
-}
-
-void hw_voThrPhsShrt()
-{
-    hw_voPWMOn();
-}
-
-void hw_voCharge()
-{
-    hw_blChrgOvrFlg = 1; 
-}
 
 
 

+ 1 - 0
xmake.lua

@@ -22,6 +22,7 @@ target("unittest")
     add_files("User project/2.MotorDrive/Source/adc.c", "User project/2.MotorDrive/Source/pwm.c", "User project/2.MotorDrive/Source/packed/torqobs.c")
     add_files("User project/2.MotorDrive/Source/packed/pwrlim.c", "User project/2.MotorDrive/Source/packed/asr.c", "User project/2.MotorDrive/Source/packed/brake.c")
     add_files("User project/3.BasicFunction/Source/Temp.c")
+    add_files("User project/1.FrameLayer/Source/sys_ctrl.c")
 
     add_includedirs("User project/1.FrameLayer/Include")
     add_includedirs("User project/2.MotorDrive/Include")