ソースを参照

1.foc时序调整,避免超8k时间
2.相电流采样时间修改1us
3.过流触发改80A
4.巡航标识在进入巡航时才发送
5.开关机按键增加滤波
6.力矩增加识别塔基和自家力矩
7.增加档位限流
8默认7段,7段切换5段切换值改1000

CN\houcf5 5 ヶ月 前
コミット
8ed54e58e4

+ 1 - 1
1.FrameLayer/Source/TimeTask_Event.c

@@ -322,7 +322,7 @@ void  Event_200ms(void)
      SendData(ID_PBU_TO_BMS, MODE_READ, 0x5000, (uint8_t *)NULL);
  }
 #endif
- if((cp_stControlPara.uwControlFunEN&0xff)  ==0xaa)
+ if(((cp_stControlPara.uwControlFunEN&0xff)  ==0xaa) &&(bikeCruise.CruiseMode!=0))
  {
     if(++Cruisetime_1S>5)
     {

+ 3 - 1
1.FrameLayer/Source/main.c

@@ -150,6 +150,7 @@ int  main(void)
 
     SYSCFG_DL_init();
     SYSCFG_DL_PWM_0_COPY_init();
+    Reset_POWER_LOCK_PORT();
     //TIMA0  MOTOR_PWM
     DL_Timer_setCaptCompUpdateMethod(MOTOR_PWM_INST,DL_TIMER_CC_UPDATE_METHOD_ZERO_EVT,DL_TIMERA_CAPTURE_COMPARE_0_INDEX);
     DL_Timer_setCaptCompUpdateMethod(MOTOR_PWM_INST,DL_TIMER_CC_UPDATE_METHOD_ZERO_EVT,DL_TIMERA_CAPTURE_COMPARE_1_INDEX);
@@ -165,6 +166,7 @@ int  main(void)
     DL_Timer_clearInterruptStatus(MOTOR_PWM_INST,DL_TIMER_INTERRUPT_FAULT_EVENT|DL_TIMER_INTERRUPT_ZERO_EVENT);
     DL_Timer_clearEventsStatus(MOTOR_PWM_INST,1,DL_TIMER_EVENT_FAULT_EVENT);
 
+    DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST,2, DL_TIMER_CC_4_INDEX);
     //HALL IO
     NVIC_EnableIRQ(GPIOA_INT_IRQn);  //HALL GPIO
     NVIC_EnableIRQ(GPIOB_INT_IRQn);  //HALL GPIO
@@ -213,7 +215,7 @@ int  main(void)
 
      //---over Cur of Valut
 #if((IPM_POWER_SEL == IPM_POWER_250W_6G) ||(IPM_POWER_SEL ==IPM_POWER_350W_6G))
-     DL_COMP_setDACCode0(COMP_0_INST, 0xb5);//12G-100A-0x99-1.97V   6G-70A--0xb5-2.33V
+     DL_COMP_setDACCode0(COMP_0_INST, 0xC7);//12G-100A-0x99-1.97V   6G-70A--0xb5-2.33V
 #else
     DL_COMP_setDACCode0(COMP_0_INST, 0x99);//12G-100A-0x99-1.97V   6G-60A--0xb5-2.33V
 #endif

+ 2 - 1
1.FrameLayer/Source/tbc.c

@@ -100,7 +100,8 @@ void tbc_voUpIsr(void)
      Trigger();
 
 
-
+     /* Alarm detect */
+       alm_voDetecTBS(&alm_stIn, &alm_stDetectTbsCoef);
       FSM1st_Sys_state.Tbcup_hook(); //初始状态采集零点AD值,有故障时判断
 
 }

+ 1 - 1
1.FrameLayer/Source/tbs.c

@@ -44,7 +44,7 @@ Revising History (ECL of this file):
 void tbs_voIsr(void)
 {
     /* Alarm detect */
-    alm_voDetecTBS(&alm_stIn, &alm_stDetectTbsCoef);
+    //alm_voDetecTBS(&alm_stIn, &alm_stDetectTbsCoef);
 
     FSM1st_Sys_state.Tbs_hook();
 

+ 1 - 0
2.MotorDrive/Include/adc.h

@@ -99,6 +99,7 @@ typedef struct
     SWORD PCBTemp;        // Not Pu, centigrade
     SWORD MotorTemp;      // Not Pu, centigrade
     SWORD MosfestTempEst; // Not Pu, centigrade
+    UWORD uwPoweAdcrLpfPu;     // Q14, Vdc after LPF
 
     SWORD swCalibIaPu;
     SWORD swCalibIbPu;

+ 269 - 0
2.MotorDrive/Include/adc.h.bak

@@ -0,0 +1,269 @@
+/************************************************************************
+ Project:             Welling Motor Control Paltform
+ Filename:            adc.h
+ Partner Filename:    adc.c
+ Description:         The header file of adc.c
+ Complier:            IAR Embedded Workbench for ARM 7.80, IAR Systems.
+ CPU TYPE :           GD32F3x0
+*************************************************************************
+ Copyright (c) 2018 Welling Motor Technology(Shanghai) Co. Ltd.
+ All rights reserved.
+*************************************************************************
+*************************************************************************
+Revising History (ECL of this file):
+
+************************************************************************/
+
+/************************************************************************
+ Beginning of File, do not put anything above here except notes
+ Compiler Directives:
+*************************************************************************/
+#ifndef ADCDRV_H
+#define ADCDRV_H
+
+/************************************************************************
+ Compiler Directives
+*************************************************************************/
+#ifdef _ADCDRV_C_
+#define _ADCDRV_EXT
+#else
+#define _ADCDRV_EXT extern
+#endif
+
+#include "typedefine.h"
+/************************************************************************
+ Definitions & Macros (#define ...)
+*************************************************************************/
+#define SR_CURRENT_MAX_BAND -147  // 0.01A
+#define SR_CURRENT_MIN_BAND -4000 // 0.01A
+/************************************************************************
+ TypeDefs & Structure defines (N/A)
+*************************************************************************/
+typedef struct
+{
+    SWORD swIaPu;     // Q14, Phase A current value
+    SWORD swIbPu;     // Q14, Phase B current value
+    SWORD swIcPu;     // Q14, Phase C current value
+    SWORD swSampIaPu; // Q14, Phase A current sampling value
+    SWORD swSampIbPu; // Q14, Phase B current sampling value
+    SWORD swSampIcPu; // Q14, Phase C current sampling value
+    UWORD uwIaAbsPu;  // Q14, Phase A current absolute value
+    UWORD uwIbAbsPu;  // Q14, Phase B current absolute value
+    UWORD uwIcAbsPu;  // Q14, Phase C current absolute value
+    UWORD uwIpeakPu;  // Q14, Max value of phase current
+
+    UWORD uwIaAvgPu; // Ia register value
+    UWORD uwIbAvgPu; // Ib register value
+    UWORD uwIcAvgPu; // Ic register value
+
+    UWORD uwIaReg; // Ia register value
+    UWORD uwIbReg; // Ib register value
+    UWORD uwIcReg; // Ic register value
+
+    UWORD uwFirstCurREG;
+    UWORD uwSecondCurREG;
+
+    UWORD uwADCSector;
+
+    ULONG ulUaRegSum;  // Ua register sum value when calibrate
+    ULONG ulUbRegSum;  // Ub register sum value when calibrate
+    ULONG ulUcRegSum;  // Uc register sum value when calibrate
+    ULONG ulIdcRegSum; // Idc register sum value when calibrate
+
+    ULONG ulIaRegSum; // Ia register value
+    ULONG ulIbRegSum; // Ib register value
+    ULONG ulIcRegSum; // Ic register value
+    ULONG ulIdcAvgRegSum;
+
+    UWORD uwADCCalibCt;  // Current calib count
+    BOOL  blADCCalibFlg; // ADC calib flag
+} ADC_DOWN_OUT;
+
+typedef struct
+{
+    SWORD uwUAPu;
+    SWORD uwUBPu;
+    SWORD uwUCPu;
+    UWORD uwIbusAvgPu;    // Q14, Ibus Average
+    UWORD uwIbusAvgLpfPu; // Q14, Ibus Average after LPF
+    UWORD uwVdcPu;        // Q14, Vdc
+    UWORD uwVdcLpfPu;     // Q14, Vdc after LPF
+    UWORD uwIbusPu;        // Q14, Vdc
+    UWORD uwIbusLpfPu;     // Q14, Vdc after LPF    
+    UWORD uwU6VPu;        // Q14, 12V power
+    UWORD uwU5VPu;        // Q14, 5V power
+    UWORD uwU12VPu;       // Q14, 5V power
+    UWORD uwTrottlePu;    // Q14, 5V power
+    UWORD PCBTempR;       // Not Pu 0.1kOhm
+    UWORD MotorTempR;     // Not Pu 0.1kOhm
+    SWORD PCBTemp;        // Not Pu, centigrade
+    SWORD MotorTemp;      // Not Pu, centigrade
+    SWORD MosfestTempEst; // Not Pu, centigrade
+
+    SWORD swCalibIaPu;
+    SWORD swCalibIbPu;
+    SWORD swCalibIcPu;
+
+//    UWORD uwUAReg;
+//    UWORD uwUBReg;
+//    UWORD uwUCReg;
+    UWORD uwIbusAvgReg;  // Ibus Average register value
+    UWORD uwVdcReg;      // Vdc register value
+    UWORD uwU6VReg;      // 12 V register value
+    UWORD uwU5VReg;      // 5 V register value
+    UWORD uwU12VReg;     // Q14, 5V power
+    UWORD uwThrottleReg; // Q14, 5V power
+    UWORD PCBTempReg;
+    UWORD MotorTempReg;
+    UWORD TorqTempReg;
+    
+    UWORD uwADCCalibCt;  // Current calib count
+    BOOL  blADCCalibFlg; // ADC calib flag
+    SWORD swIPMTempCe;   // PCB Temp to trig alam
+
+    SWORD  swSampCapIaPu;
+    SWORD  swSampCapIbPu;
+} ADC_UP_OUT;
+
+typedef struct
+{
+    UWORD uwVdcReg2Pu;    // Q24, Coefficient of Vdc register value to pu value
+    UWORD uwCurReg2Pu;    // Q24, Coefficient of current register value to pu value
+    UWORD uwCurIdcReg2Pu; // Q24, Coefficient of Idc current register value to pu value
+    UWORD uwCurIdcAvgReg2Pu;
+    UWORD uwUabcReg2Pu;   // Q24, Coefficient of Ua,Ub,Uc register value to pu value
+    UWORD uwU6VReg2Pu;    // Q24, Coefficient of Ua,Ub,Uc register value to pu value
+    UWORD uwU5VReg2Pu;    // Q24, Coefficient of Ua,Ub,Uc register value to pu value
+    UWORD uwU12VReg2Pu;   // Q24, Coefficient of Ua,Ub,Uc register value to pu value
+    UWORD uwCalibcoefIA;    // Q10, Coefficient of k = single resistance/Rdson
+    UWORD uwCalibcoefIB;    // Q10, Coefficient of k = single resistance/Rdson
+    UWORD uwCalibcoefMax;
+    UWORD uwCalibcoefMin;
+
+    UWORD uwIaOffset;     // Ia offset value
+    UWORD uwIbOffset;     // Ib offset value
+    UWORD uwIcOffset;     // Ib offset value
+    UWORD uwUaOffset;     // Ua offset value
+    UWORD uwUbOffset;     // Ub offset value
+    UWORD uwUcOffset;     // Ub offset value
+    UWORD uwIdcOffset;    // Idc offset value
+    UWORD uwIdcAveOffset; // Idc offset value
+
+    SWORD swPCBTempKcof;
+    SWORD swMotorTempKcof;
+    UWORD uwCalibCoefK;
+
+} ADC_COF;
+
+
+typedef struct
+{
+      UWORD Start_Calc;
+      UWORD RdsonGainCnt;
+      UWORD RdsonGainCnt2;
+      UWORD adc_RdsonADCGainMax;
+      UWORD adc_RdsonADCGainMin;
+      UWORD adc_RdsonADCGainSum2;
+      UWORD adc_RdsonADCGainRecord[10];
+      UWORD adc_RdsonADCGainSum;
+      UWORD uwCalibcoef;
+      ULONG GainTemp;
+      UBYTE uwCalibcomplete;
+
+} ADC_SUMCOF;
+
+/************************************************************************
+Constant Table
+*************************************************************************/
+
+/************************************************************************
+ Exported Variables:
+*************************************************************************/
+#ifdef _ADCDRV_C_
+_ADCDRV_EXT ADC_COF      adc_stCof;
+_ADCDRV_EXT ADC_UP_OUT   adc_stUpOut;
+_ADCDRV_EXT ADC_DOWN_OUT adc_stDownOut;
+_ADCDRV_EXT ADC_SUMCOF  adc_LibSUMA;
+_ADCDRV_EXT ADC_SUMCOF  adc_LibSUMB;
+_ADCDRV_EXT ADC_SUMCOF  adc_LibSUMC;
+
+//_ADCDRV_EXT UWORD Start_Calc = 0;
+//_ADCDRV_EXT UWORD RdsonGainCnt = 0;
+//_ADCDRV_EXT UWORD RdsonGainCnt2 = 0;
+//_ADCDRV_EXT UWORD adc_RdsonADCGainMax;
+//_ADCDRV_EXT UWORD adc_RdsonADCGainMin;
+//_ADCDRV_EXT UWORD adc_RdsonADCGainSum2;
+//_ADCDRV_EXT UWORD adc_RdsonADCGainRecord[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+//_ADCDRV_EXT UWORD adc_RdsonADCGainSum = 0;
+_ADCDRV_EXT UWORD adc_uwADDMAPhase1;
+_ADCDRV_EXT UWORD adc_uwADDMAPhase2;
+
+_ADCDRV_EXT UWORD adc_uwRdsonUReg;
+_ADCDRV_EXT UWORD adc_uwRdsonVReg;
+_ADCDRV_EXT UWORD adc_uwRdsonWReg;
+
+_ADCDRV_EXT UWORD adc_uwIaReg;
+_ADCDRV_EXT UWORD adc_uwIbReg;
+#else
+_ADCDRV_EXT ADC_COF      adc_stCof;
+_ADCDRV_EXT ADC_UP_OUT   adc_stUpOut;
+_ADCDRV_EXT ADC_DOWN_OUT adc_stDownOut;
+_ADCDRV_EXT ADC_SUMCOF  adc_LibSUMA;
+_ADCDRV_EXT ADC_SUMCOF  adc_LibSUMB;
+_ADCDRV_EXT ADC_SUMCOF  adc_LibSUMC;
+
+//_ADCDRV_EXT UWORD Start_Calc;
+//_ADCDRV_EXT UWORD RdsonGainCnt;
+//_ADCDRV_EXT UWORD RdsonGainCnt2;
+//_ADCDRV_EXT UWORD adc_RdsonADCGainMax;
+//_ADCDRV_EXT UWORD adc_RdsonADCGainMin;
+//_ADCDRV_EXT UWORD adc_RdsonADCGainSum2;
+//_ADCDRV_EXT UWORD adc_RdsonADCGainRecord[10];
+//_ADCDRV_EXT UWORD adc_RdsonADCGainSum;
+_ADCDRV_EXT UWORD adc_uwADDMAPhase1;
+_ADCDRV_EXT UWORD adc_uwADDMAPhase2;
+
+_ADCDRV_EXT UWORD adc_uwRdsonUReg;
+_ADCDRV_EXT UWORD adc_uwRdsonVReg;
+_ADCDRV_EXT UWORD adc_uwRdsonWReg;
+
+_ADCDRV_EXT UWORD adc_uwIaReg;
+_ADCDRV_EXT UWORD adc_uwIbReg;
+
+#endif
+/************************************************************************
+ RAM ALLOCATION:
+*************************************************************************/
+
+/************************************************************************
+ Exported Function Call Prototypes (N/A)
+*************************************************************************/
+#ifdef _ADCDRV_C_
+_ADCDRV_EXT void adc_voCalibration(ADC_COF *cof, ADC_DOWN_OUT *out1, ADC_UP_OUT *out2); // Phase A and B current zero point, other A/D sample value
+_ADCDRV_EXT void adc_voSampleUp(ADC_COF *cof, ADC_UP_OUT *out);
+_ADCDRV_EXT void adc_voSampleDown(ADC_COF *cof, ADC_DOWN_OUT *out);
+_ADCDRV_EXT void adc_voSampleCoef(ADC_COF *cof);
+_ADCDRV_EXT void adc_voSampleInit(void);
+_ADCDRV_EXT void adc_voSRCalibration(ADC_COF *cof , ADC_SUMCOF *Sum_out);
+#else
+_ADCDRV_EXT void adc_voCalibration(ADC_COF *cof, ADC_DOWN_OUT *out1, ADC_UP_OUT *out2); // Phase A and B current zero point, other A/D sample value
+_ADCDRV_EXT void adc_voSampleUp(ADC_COF *cof, ADC_UP_OUT *out);
+_ADCDRV_EXT void adc_voSampleDown(ADC_COF *cof, ADC_DOWN_OUT *out);
+_ADCDRV_EXT void adc_voSampleCoef(ADC_COF *cof);
+_ADCDRV_EXT void adc_voSampleInit(void);
+_ADCDRV_EXT void adc_voSRCalibration(ADC_COF *cof , ADC_SUMCOF *Sum_out);
+#endif
+
+/************************************************************************
+ Flag Define (N/A)
+*************************************************************************/
+
+/***********************************************************************/
+#endif
+/************************************************************************
+ Copyright (c) 2018 Welling Motor Technology(Shanghai) Co. Ltd.
+ All rights reserved.
+*************************************************************************
+ End of this File (EOF):
+ !!!!!!Do not put anything after this part!!!!!!!!!!!
+*************************************************************************/

+ 1 - 1
2.MotorDrive/Include/brake.h

@@ -29,7 +29,7 @@ WLBDM_M4_SR_201809071-new FSM1.1, by mz, create this file;
 #define BRAKE_EXT extern
 #endif
 
-#include "typedefine.h"
+
 /************************************************************************
  Definitions & Macros
 *************************************************************************/

+ 139 - 0
2.MotorDrive/Include/brake.h.bak

@@ -0,0 +1,139 @@
+/************************************************************************
+ Project:             Welling Motor Control Paltform
+ Filename:            brake.h
+ Partner Filename:    brake.c
+ Description:         The header file of brake.c
+ Complier:            IAR Embedded Workbench for ARM 7.80, IAR Systems.
+ CPU TYPE :           GD32F3x0
+*************************************************************************
+ Copyright (c) 2018 Welling Motor Technology(Shanghai) Co. Ltd.
+ All rights reserved.
+*************************************************************************
+*************************************************************************
+Revising History (ECL of this file):
+WLBDM_M4_SR_201809071-new FSM1.1, by mz, create this file;
+************************************************************************/
+#include "typedefine.h"
+/************************************************************************
+ Beginning of File, do not put anything above here except notes
+ Compiler Directives:
+*************************************************************************/
+#ifndef BRAKE_H
+#define BRAKE_H
+/************************************************************************
+ Compiler Directives (N/A)
+*************************************************************************/
+#ifdef _BRAKE_C_
+#define BRAKE_EXT
+#else
+#define BRAKE_EXT extern
+#endif
+
+#include "typedefine.h"
+/************************************************************************
+ Definitions & Macros
+*************************************************************************/
+#define BRAKE_COF_DEFAULT                                        \
+    {                                                            \
+        20154, 20400, 237, 8704, -320, -4480, 2048, 10, 10, 1365 \
+    } // Default value of DBC_CALC_COF (410V,390V,Q14(0.15),Q14(1),Q14(6.8),Q14(0.25),Q14(3.5))
+#define BRAKE_OUT_DEFAULT \
+    {                     \
+        0, 0, 0, 0, FALSE \
+    } // Default value of DBC_CALC_OUT (Q14(0),Q14(0),FALSE)
+
+/************************************************************************
+             Typedefs & Structure Defines
+*************************************************************************/
+typedef struct // Input of " cvb_stBrakeCoef "
+{
+    UWORD uwVdcCvbVt;   // Real Value, unit:0.1V,	Voltage to keep for constant voltage braking
+    SWORD swIqRefMaxAp; // Real Value, unit:0.01A,	Iq limit max value
+    SWORD swIdRefMaxAp; // Real Value, unit:0.01A,	Id reference max value
+    SWORD swIdRefMinAp; // Real Value, unit:0.01A,	Id reference min value
+    UWORD uwVBaseVt;    // Real Value, unit:0.1V,	Voltage Base
+    UWORD uwIBaseAp;    // Real Value, unit:0.01A,	Current Base
+    UWORD uwFBaseHz;    // Real Value, unit:Hz,	Frequence Base
+    UWORD uwMotorPairs; // Real Value, unit:1,	    Motor Pairs
+    UWORD uwLowSpdRpm;  // Real Value, unit:rpm,	Low speed without Id
+} BRAKE_COFIN;
+
+typedef struct // Input of " cvb_stBrakeOut "
+{
+    UWORD uwVdcLpfPu;    // Q14, unit:Pu,		DC bus voltage
+    SWORD swSpdPu;       // Q15, unit:Pu,		Current speed
+    UWORD uwSpdLpfAbsPu; // Q15, unit:Pu,		Abs of Current speed feedback
+    SWORD swIqRefPu;     // Q14, unit:Pu,		Current Iq Reference
+    SWORD swIdRefPu;     // Q14, unit:Pu,		Current Id Reference
+    SWORD uwAngelPu;     // Q15, unit:Pu,		Obs angle
+    UWORD uwSpdState;
+} BRAKE_IN;
+
+typedef struct // Input of " cvb_stBrakeOut "
+{
+    UWORD uwVdcCvbPu;      // Q14, unit:Pu,		Voltage to keep for constant voltage braking
+    UWORD uwVdcLagAngelPu; // Q14, unit:Pu,		Voltage to lag angle constant voltage braking
+    UWORD uwVdcStartCvbPu; // Q14, unit:Pu,		Voltage to start iq limit of constant voltage braking
+    UWORD uwKAnglePu;      // Q8, unit:Pu,		Coefficient of delta Angle
+    SWORD swIqLimMaxPu;    // Q14, unit:Pu,		Iq limit max value
+    SWORD swIdRefMaxPu;    // Q14, unit:Pu,		Id reference max value
+    SWORD swIdRefMinPu;    // Q14, unit:Pu,		Id reference min value
+    SWORD swKcvb;          // Q14, unit:Pu,		Constant voltage braking cofficient
+    SWORD swIdDrpPu;       // Q14, unit:Pu,     delta Id drop
+    SWORD swIdRcyPu;       // Q14, unit:Pu,     delta Id recovery
+    UWORD uwLowSpdPu;      // Q15, unit:Pu,		Low speed without Id
+} BRAKE_COF;
+
+typedef struct // Output of " cvb_stBrakeOut "
+{
+    SWORD swIqRefPu; // Q14, unit:Pu,		Q axis current reference
+    SWORD swIqLimPu; // Q14, unit:Pu,		Q axis current limit
+    SWORD swIdRefPu; // Q14, unit:Pu,		D axis current reference
+    SWORD uwAngelPu; // Q15, unit:Pu,		Obs angle after brake lag
+    BOOL  blCvbFlg;  // Bool, constant voltage braking flag
+} BRAKE_OUT;
+
+/************************************************************************
+ Exported Variables
+*************************************************************************/
+#ifdef _BRAKE_C_
+BRAKE_EXT BRAKE_COF cvb_stBrakeCoef = BRAKE_COF_DEFAULT;
+BRAKE_EXT BRAKE_OUT cvb_stBrakeOut = BRAKE_OUT_DEFAULT;
+#else
+BRAKE_EXT BRAKE_COF cvb_stBrakeCoef;
+BRAKE_EXT BRAKE_OUT cvb_stBrakeOut;
+#endif
+
+/************************************************************************
+ RAM ALLOCATION (N/A)
+*************************************************************************/
+#define cvb_stBrakeIn     (*(BRAKE_IN *)TBC_BUFFER)
+#define cvb_stBrakeCoefIn (*(BRAKE_COFIN *)MN_BUFFER)
+/************************************************************************
+ Exported Function Call Prototypes
+*************************************************************************/
+#ifdef _BRAKE_C_
+BRAKE_EXT void cvb_voBrake(BRAKE_IN *in, BRAKE_COF *coef, BRAKE_OUT *out);
+BRAKE_EXT void cvb_voBrakeCoef(BRAKE_COFIN *in, BRAKE_COF *out);
+BRAKE_EXT void cvb_voBrakeInit();
+#else
+BRAKE_EXT void cvb_voBrake(BRAKE_IN *in, BRAKE_COF *coef, BRAKE_OUT *out);
+BRAKE_EXT void cvb_voBrakeCoef(BRAKE_COFIN *in, BRAKE_COF *out);
+BRAKE_EXT void cvb_voBrakeInit();
+#endif
+
+/************************************************************************
+ Local Function Call Prototypes (N/A)
+*************************************************************************/
+
+/************************************************************************
+ Flag Define (N/A)
+*************************************************************************/
+#endif
+/************************************************************************
+ Copyright (c) 2018 Welling Motor Technology(Shanghai) Co. Ltd.
+ All rights reserved.
+*************************************************************************
+ End of this File (EOF)!
+ Do not put anything after this part!
+*************************************************************************/

+ 2 - 0
2.MotorDrive/Source/adc.c

@@ -350,6 +350,8 @@ void adc_voSampleUp(ADC_COF *cof, ADC_UP_OUT *out)
     out->uwVdcPu = (SLONG)out->uwVdcReg * cof->uwVdcReg2Pu >> 10; // Q14=Q24-Q10        
     out->uwVdcLpfPu = ((out->uwVdcPu - out->uwVdcLpfPu) >> 1) + out->uwVdcLpfPu;  
     
+    out->uwPoweAdcrLpfPu=((POWERKEYVOLREG()- out->uwPoweAdcrLpfPu) >> 1) + out->uwPoweAdcrLpfPu;
+
     /* IbusAvg Pu value and lpf */   
     if(out->uwIbusAvgReg > cof->uwIdcAveOffset)
     {

+ 5 - 5
2.MotorDrive/Source/pwrlim.c

@@ -46,11 +46,11 @@ Exported Functions:
 ************************************************************************/
 void pwr_voPwrLimInit(void)
 {
-    pwr_stPwrLimOut.swIqLimPu = cof_uwCurMaxPu;
-    pwr_stPwrLimOut.swErrorZ1 = 0; // Q14
-    pwr_stPwrLimOut.slIqLimDetaSum = 0;
-    pwr_stPwrLimOut.swIqLimDetaSum = 0;
-    pwr_stPwrLimOut.swIqLimPu = 0;
+    pwr_stPwrLimOut2.swIqLimPu = cof_uwCurMaxPu;
+    pwr_stPwrLimOut2.swErrorZ1 = 0; // Q14
+    pwr_stPwrLimOut2.slIqLimDetaSum = 0;
+    pwr_stPwrLimOut2.swIqLimDetaSum = 0;
+    pwr_stPwrLimOut2.swIqLimPu = 0;
 }
 
 /************************************************************************

+ 2 - 2
3.BasicFunction/Include/Cadence.h

@@ -30,7 +30,7 @@
 #define TORQUE_LF_MINFRE                25   // Min frequency of human foot in Low frequency method, 0.01Hz
 #define TORQUE_HF_MAXTIME_MS            150  // 3000             //Min time of valid pulses, ms
 #define TORQUE_ERROR_RESETTIME_MS       5000 // TIMER PERIOD,ms
-#define TORQUE_TIM_TIMERUNIT_US         ((SLONG)1000000/FTBS_HZ)   //25   // TIMER PERIOD,ms    us
+#define TORQUE_TIM_TIMERUNIT_US         ((SLONG)1000000/FTBS_HZ/2)   //25   // TIMER PERIOD,ms    us
 #define TORQUE_LPF_GAIN                 80   //%
 #define TORQUE_MAX_FREQUENCY            5    // Hz, human foot
 //#elif (ASSIST_MODE == CADENCE_ASSIST)
@@ -42,7 +42,7 @@
 #define CADENCE_LF_MINFRE                25   // Min frequency of human foot in Low frequency method, 0.01Hz
 #define CADENCE_HF_MAXTIME_MS            ((800*12)/CADENCE_NUMBERS_PULSES)  // 3000             //Min time of valid pulses, ms
 #define CADENCE_ERROR_RESETTIME_MS       5000 // TIMER PERIOD,ms
-#define CADENCE_TIM_TIMERUNIT_US         ((SLONG)1000000/FTBS_HZ)   //25   // TIMER PERIOD,ms    us
+#define CADENCE_TIM_TIMERUNIT_US         ((SLONG)1000000/FTBS_HZ/2)   //25   // TIMER PERIOD,ms    us
 #define CADENCE_LPF_GAIN                 80   //%
 #define CADENCE_MAX_FREQUENCY            5    // Hz, human foot
 //#endif

+ 186 - 0
3.BasicFunction/Include/Cadence.h.bak

@@ -0,0 +1,186 @@
+/**
+ * @file Cadence.h
+ * @author Wang, Zhiyu(wangzy49@midea.com)
+ * @brief Cadence of ebike
+ * @version 0.1
+ * @date 2021-09-29
+ *
+ * @copyright Copyright (c) 2021
+ *
+ */
+/************************************************************************
+ Beginning of File, do not put anything above here except notes
+ Compiler Directives:
+*************************************************************************/
+#ifndef CADENCE_H
+#define CADENCE_H
+#include "user.h"
+#include "typedefine.h"
+/****************************************
+ *
+ *          Definitions & Macros
+ *
+ ****************************************/
+//#if (ASSIST_MODE == TORQUE_ASSIST)
+//力矩相关参数
+#define TORQUE_NUMBERS_PULSES           38  //24   //24 48 64(350W-bike)          //numbers of pulses per cycles
+#define TORQUE_START_INTERVALTIME_MS    1000 // 250     //interveal time of detect valid pulses to start, ms
+#define TORQUE_NUMBERS_VALIDPULSE2START  1    // numbers of valid pulses that needed to start
+#define TORQUE_LF_RECORDTIME_MS         500  // time of Recording pulses per cycle, ms
+#define TORQUE_LF_MINFRE                25   // Min frequency of human foot in Low frequency method, 0.01Hz
+#define TORQUE_HF_MAXTIME_MS            150  // 3000             //Min time of valid pulses, ms
+#define TORQUE_ERROR_RESETTIME_MS       5000 // TIMER PERIOD,ms
+#define TORQUE_TIM_TIMERUNIT_US         ((SLONG)1000000/FTBS_HZ)   //25   // TIMER PERIOD,ms    us
+#define TORQUE_LPF_GAIN                 80   //%
+#define TORQUE_MAX_FREQUENCY            5    // Hz, human foot
+//#elif (ASSIST_MODE == CADENCE_ASSIST)
+//踏频相关参数
+#define CADENCE_NUMBERS_PULSES           12   //24 48 64(350W-bike)          //numbers of pulses per cycles
+#define CADENCE_START_INTERVALTIME_MS    5000 // 250     //interveal time of detect valid pulses to start, ms
+#define CADENCE_NUMBERS_VALIDPULSE2START 1    // numbers of valid pulses that needed to start
+#define CADENCE_LF_RECORDTIME_MS         500  // time of Recording pulses per cycle, ms
+#define CADENCE_LF_MINFRE                25   // Min frequency of human foot in Low frequency method, 0.01Hz
+#define CADENCE_HF_MAXTIME_MS            ((800*12)/CADENCE_NUMBERS_PULSES)  // 3000             //Min time of valid pulses, ms
+#define CADENCE_ERROR_RESETTIME_MS       5000 // TIMER PERIOD,ms
+#define CADENCE_TIM_TIMERUNIT_US         ((SLONG)1000000/FTBS_HZ)   //25   // TIMER PERIOD,ms    us
+#define CADENCE_LPF_GAIN                 80   //%
+#define CADENCE_MAX_FREQUENCY            5    // Hz, human foot
+//#endif
+
+
+
+#define CADENCE_COF_DEFAULT       \
+    {                             \
+        0, 0, 0, 0, 0, 0, 0, 0, 0 \
+    }
+#define CADENCE_OUT_DEFAULT                                               \
+    {                                                                     \
+        0, 0, 0, 0, 0, 0, 0, FALSE, FALSE, CADENCE_DIR_IDLE, CADENCE_IDLE \
+    } // Default value of CADENCE_OUT
+
+/***************************************
+ *
+ *          Type  Definations
+ *
+ ***************************************/
+
+/**
+ * @brief Cadence FSM
+ *
+ */
+typedef enum
+{
+    CADENCE_IDLE = 0,
+    CADENCE_LFreWork = 1,
+    CADENCE_HFreWork = 2,
+    CADENCE_BACKWOR = 3,
+    CADENCE_ERROR = 4
+} CADENCE_FSM;
+
+/**
+ * @brief Cadence Direction
+ *
+ */
+typedef enum
+{
+    CADENCE_DIR_FORWARD = 0,
+    CADENCE_DIR_BACKWARD = 1,
+    CADENCE_DIR_IDLE = 2,
+    CADENCE_DIR_ERROR = 3
+} CADENCE_DIR;
+
+/**
+ * @brief Cadence coefficient
+ *
+ */
+typedef struct
+{
+    UWORD uwNumbersPulses;          //公共使用脉冲数
+    UWORD uwTorque_NumbersPulses;  // numbers of Torque pulses per cycles
+    UWORD uwCad_NumbersPulses;      //numbers of cad pulses per cycles
+    UWORD uwSartIntervalTimeCnt;     // interveal time of detect valid pulses, ms
+    UWORD uwNumbersValidPulse2Start; // numbers of valid pulses that needed to start
+    UWORD uwLfRecordTimeCnt;         // time of Recording pulses per cycle, ms
+    UWORD uwLfMinFrePu;              // Min frequency of human foot in Low frequency method, 0.01Hz
+    UWORD uwHfMaxTimeCnt;            // Min time of valid pulses, ms
+    UWORD uwErrorResetCnt;           // Min time of ERROR reset, ms
+    UWORD uwTimerUnit;               // TIMER PERIOD, ms
+    UWORD uwCadenceLPFgain;          // Hz,LPF bandwidth
+    UWORD uwMaxCadenceFre;
+} CADENCE_COF;
+
+/**
+ * @brief Cadence output
+ *
+ */
+typedef struct
+{                                        // Output of " cadence_voFreGet "
+    ULONG       ulTimer2CntErr;
+    ULONG       ulCaputureCntErr;
+    UWORD       uwFrequencyPu;           // Q20, Real value of Cadence frequecy result (human foot)
+    UWORD       uwCntErrLast;           // Q20, Real value of Cadence frequecy result (human foot)
+    UWORD       uwFrequencyLastPu;       // Q20, Real value of Cadence frequecy result (human foot)
+    UWORD       uwLPFFrequencyPu;        // Q20, Real value of Cadence frequecy result (human foot)
+    SWORD       uwLPFFrequencyPuLast;    // Q20, Real value of Cadence frequecy result (human foot)
+    UWORD       uwCaputure1Cnt;          // The cnt of the first pulse
+    UWORD       uwCaputure2Cnt;          // The cnt of the second pulse
+    UWORD       uwCaputureNumCnt;        // The current sequece of the pulse
+    UWORD       uwCaputureErrorCnt;      // The current sequece of the pulse
+    UWORD       uwCaputureOverflowCnt;   // number of TIM4 CNT Overflow between two capture
+    BOOL        blCadenceSensorErrorFlg; // The falg of sensor error
+    BOOL        blCadenceCalStartState;  // TRUE = START   FALSE = STOP
+    CADENCE_DIR cadence_dir;             // Direction of cadence
+    CADENCE_FSM cadence_fsm;
+    UWORD       uwFreqPercent; // Q14;
+    UWORD       uwForwardCnt;  // Q14;
+    UWORD       uwTaPinPortSta;
+} CADENCE_OUT;
+
+typedef struct
+{
+    UWORD uwIqCurLimitMax;
+    UWORD uwIqCurLimitMin;
+    UWORD uwbikespeedCal;
+    UWORD uwBikeSpdThresHold1;
+    UWORD uwBikeSpdThresHold2;
+    UWORD uwLimitdSpeed_S[6];
+    UWORD uwAssistLimitSpdStart[6];
+    UWORD uwAssistLimitSpdStop[6];
+    UWORD uwLimitdSpeed_E[6];
+
+}CADPOWER_STRUCT;
+
+typedef struct
+{
+    UWORD  uwPortHightcnt;
+    UWORD  uwPortLowcnt;
+    UWORD  uwPortSta;
+
+
+}CADDIR_STRUCT;
+
+#define CAD_IS_MIN_AP    500           //
+
+/****************************************
+ *
+ *           Exported variable
+ *
+ ****************************************/
+extern CADENCE_OUT cadence_stFreGetOut;
+
+/***************************************
+ *
+ *          Function  Definations
+ *
+ ***************************************/
+void cadence_voCadenceInit(void);
+void cadence_voCadenceCof(void);
+void cadence_voCadenceCal(UWORD source);
+
+/************************************************************************/
+
+#endif
+/************************************************************************
+ End of this File (EOF):
+ Do not put anything after this part!
+*************************************************************************/

+ 1 - 1
3.BasicFunction/Include/bikespeed.h

@@ -27,7 +27,7 @@ typedef _Bool  BOOL;
 #define BIKESPEED_NUMBERS_VALIDPULSE2START 1  // numbers of valid pulses that needed to start
 #define BIKESPEED_HF_MINTIME_MS               5000  // Min time of valid pulses, ms
 #define BIKESPEED_ERROR_RESETTIME_MS          5000  // TIMER PERIOD,ms
-#define BIKESPEED_TIM_TIMERUNIT_US            ((SLONG)1000000/FTBS_HZ)    // TIMER PERIOD,us
+#define BIKESPEED_TIM_TIMERUNIT_US            ((SLONG)1000000/FTBS_HZ/2)    // TIMER PERIOD,us
 #define BIKESPEED_LPF_GAIN                 80    //
 #define BIKESPEED_MAX_FREQUENCY            20    // Hz, ebike wheel
 

+ 156 - 0
3.BasicFunction/Include/bikespeed.h.bak

@@ -0,0 +1,156 @@
+/**
+ * @file Bikespeed.h
+ * @author Wang, Zhiyu(wangzy49@midea.com)
+ * @brief Speed of ebike wheel
+ * @version 0.1
+ * @date 2021-10-09
+ *
+ * @copyright Copyright (c) 2021
+ *
+ */
+/************************************************************************
+ Beginning of File, do not put anything above here except notes
+ Compiler Directives:
+*************************************************************************/
+#include "mathtool.h"
+#include "typedefine.h"
+typedef _Bool  BOOL;
+#ifndef BIKESPEED_H
+#define BIKESPEED_H
+/****************************************
+ *
+ *          Definitions & Macros
+ *
+ ****************************************/
+#define BIKESPEED_NUMBERS_PULSES           1  // numbers of pulses per cycles
+#define BIKESPEED_START_INTERVALTIME_MS       10000 // interveal time of detect valid pulses, ms
+#define BIKESPEED_NUMBERS_VALIDPULSE2START 1  // numbers of valid pulses that needed to start
+#define BIKESPEED_HF_MINTIME_MS               5000  // Min time of valid pulses, ms
+#define BIKESPEED_ERROR_RESETTIME_MS          5000  // TIMER PERIOD,ms
+#define BIKESPEED_TIM_TIMERUNIT_US            ((SLONG)1000000/FTBS_HZ)    // TIMER PERIOD,us
+#define BIKESPEED_LPF_GAIN                 80    //
+#define BIKESPEED_MAX_FREQUENCY            20    // Hz, ebike wheel
+
+#define BIKESPEED_POWER_ERROR_VOLTAGE_UP   60   // 0.1v
+#define BIKESPEED_POWER_ERROR_VOLTAGE_DOWN 40   // 0.1v
+#define BIKESPEED_POWER_ERROR_DETECT_MS       4000 // ms
+#define BIKESPEED_POWER_ERROR_RECOVER_MS      4000 // ms
+#define BIKESPEED_POWER_ERROR_TIMEUNIT_MS     200  // ms
+
+#define BIKESPEED_COF_DEFAULT  \
+    {                          \
+        0, 0, 0, 0, 0, 0, 0, 0 \
+    }
+#define BIKESPEED_OUT_DEFAULT                                          \
+    {                                                                  \
+        0, 0, 0, 0, 0, 0, 0, 0, 0, FALSE, FALSE, FALSE, BIKESPEED_IDLE \
+    } // Default value of BIKESPEED_OUT
+
+/***************************************
+ *
+ *          Type  Definations
+ *
+ ***************************************/
+
+/**
+ * @brief Bikespeed FSM
+ *
+ */
+typedef enum
+{
+    BIKESPEED_IDLE = 0,
+    BIKESPEED_WORK = 1,
+    BIKESPEED_ERROR = 3
+} BIKESPEED_FSM;
+
+/**
+ * @brief Bikespeed COF
+ *
+ */
+typedef struct
+{
+    UWORD uwNumbersPulses;           // numbers of pulses per cycles
+    UWORD uwSartIntervalTimeCnt;     // interveal time of detect valid pulses, ms
+    UWORD uwNumbersValidPulse2Start; // numbers of valid pulses that needed to start
+    UWORD uwHfMinTimeCnt;            // Min time of valid pulses, ms
+    UWORD uwErrorResetCnt;           // Min time of ERROR reset, ms
+    UWORD uwTimerUnit;               // Timer , ms
+    UWORD uwBikeSpeedLPFGain;        // Hz,LPF bandwidth
+    UWORD uwMaxBikeSpeedFre;         //
+
+    UWORD uwBikespeedPwrErrorCnt;           // Cnt of detect GPIO low voltage
+    UWORD uwBikespeedPwrRecoverCnt;         // Cnt of detect GPIO high voltage
+    UWORD uwBikespeedPwrErrorVoltagePuDown; // flag of light error
+    UWORD uwBikespeedPwrErrorVoltagePuUp;   // flag of light error
+
+    UWORD uwWheelPerimeter;   // the back wheel Diameter 0.1 cm
+    UWORD uwMinTriptoUpdate; // the minimum trip to update m
+} BIKESPEED_COF;
+
+/**
+ * @brief Bikespeed OUT
+ *
+ */
+typedef struct
+{
+                                // Output of " cadence_voFreGet "
+    UWORD uwFrequencyPu;         // Q20, Real value of Bike speed frequecy result
+    ULONG ulCaputureCntErr;
+    UWORD uwFrequencyPuLast;
+    SWORD swBikeSpeedFreAcc;     // Q8
+    UWORD uwLPFFrequencyPu;      // Q20, Real value of Bike speed frequecy result
+    UWORD uwCaputure1Cnt;        // The cnt of the first pulse
+    UWORD uwCaputure2Cnt;        // The cnt of the second pulse
+    UWORD uwCaputureNumCnt;      // The current sequece of the pulse
+    UWORD uwCaputureOverflowCnt; // number of TIM4 CNT Overflow between two capture
+    UWORD uwCaputureOverflowCntLast; // number of TIM4 CNT Overflow between two capture
+    UWORD uwCaputureErrorCnt;    // number of ERROR
+    UWORD uwFreTimesCnt;    // number of frequency 1.5 or 3.0 times
+
+    UWORD uwBikespeedPwrErrorCnt;   // Cnt of detect GPIO low voltage
+    UWORD uwBikespeedPwrRecoverCnt; // Cnt of detect GPIO high voltage
+
+    BOOL          blBikeSpeedSensorErrorFlg;    // The falg of sensor error
+    BOOL          blBikeSpeedSensorPwrErrorFlg; // The falg of sensor error
+    BOOL          blBikeSpeedCalStartState;     // TRUE = START   FALSE = STOP
+    BOOL          blBikeSpeedPortState;     //
+    BOOL          blBikeSpeedPort;   //speed IO
+    BIKESPEED_FSM bikespeed_fsm;
+    
+    UWORD uwCaputureOverflowMinCnt;
+    UWORD uwBikeForwardCnt;   // Count number to calculate trip
+    BOOL  blUpdateTripCntFlg; // Unit the same as BIKESPEED_COF.uwMinTriptoUpdate ��need clear after update trip.
+    UWORD DECvnt;
+    UWORD uwBikeSpeedStopFlag;
+
+} BIKESPEED_OUT;
+
+/****************************************
+ *
+ *           Exported variable
+ *
+ ****************************************/
+extern BIKESPEED_OUT bikespeed_stFreGetOut;
+extern BIKESPEED_COF bikespeed_stFreGetCof;
+
+/***************************************
+ *
+ *          Function  Definations
+ *
+ ***************************************/
+void bikespeed_voBikeSpeedInit(void); // interface function
+void bikespeed_voBikeSpeedCof(void);
+void bikespeed_voBikeSpeedCal(UWORD source);
+void bikespeed_voGetBikeSpeedPwrError(UWORD BikeSpeedPwrVolPu);
+void bikespeed_votempTripCal(void);
+/************************************************************************
+ Flag Define (N/A)
+*************************************************************************/
+#endif
+/************************************************************************
+ Copyright (c) 2018 Welling Motor Technology(Shanghai) Co. Ltd.
+ All rights reserved.
+*************************************************************************
+ End of this File (EOF):
+ Do not put anything after this part!
+*************************************************************************/

+ 1 - 0
3.BasicFunction/Include/power.h

@@ -100,6 +100,7 @@ typedef struct
     UWORD uwPowerStartEndCnt;       // Cnt of transfering to fully Power On
     UWORD uwPowerShutEndCnt;        // Cnt of transfering to fully Power Off
     UWORD uwPowerOn2OffTimeCnt;     // Cnt On 2 off Cnt
+    SWORD uwPowerModeTime;
 } POWER_COF;
 
 /****************************************

+ 126 - 0
3.BasicFunction/Include/power.h.bak

@@ -0,0 +1,126 @@
+/**
+ * @file Power.h
+ * @author Wang, Zhiyu(wangzy49@midea.com)
+ * @brief Power Managemant of ebike
+ * @version 0.1
+ * @date 2021-09-29
+ *
+ * @copyright Copyright (c) 2021
+ *
+ */
+/************************************************************************
+ Beginning of File, do not put anything above here except notes
+ Compiler Directives:
+*************************************************************************/
+#ifndef POWER_H
+#define POWER_H
+#include "typedefine.h"
+typedef _Bool  BOOL;
+/****************************************
+ *
+ *          Definitions & Macros
+ *
+ ****************************************/
+
+#define POWERMINVOLT  (250<<14)/480  //25V min volt
+
+#define POWER_START_TOUCHING_TIME 600 // ms
+#define POWER_START_FULLYON_TIME  1000 // ms
+#define POWER_SHUT_TOUCHING_TIME  20   // ms
+#define POWER_SHUT_FULLYOFF_TIME  1000   // ms
+#define POWER_ON2OFF_TIME         500 // ms
+#define POWER_START_TIMERUNIT     1    // ms
+#define POWER_SHUT_TIMERUNIT      1    // ms
+#define POWER_SHUT_STOPDELAY_TIME  (2000/POWER_SHUT_TIMERUNIT)   // ms
+
+#define POWER_OUT_DEFAULT                  \
+    {                                      \
+        0, 0, 0, FALSE, FALSE, POWER_START \
+    } // Default value of BIKELIGHT_OUT
+#define POWER_COF_DEFAULT \
+    {                     \
+        0, 0, 0, 0, 0     \
+    }
+
+#define POWER_LOCK_PORT    GPIOB // PC1
+#define POWER_LOCK_PIN    GPIO_Pin_4 // PC1
+#define POWER_SWSTATE_PORT GPIOC // PC0
+#define POWER_SWSTATE_PIN    GPIO_Pin_12 // PC1
+
+
+#define High_KEYVOL             2730  //2.2V
+#define LOW_KEYVOL              1241// 1V
+
+#define NULL_KEYMAXVOL          2730  //2.2V
+#define NULL_KEYMINVOL          2110  // 1.7V
+/***************************************
+ *
+ *          Type  Definations
+ *
+ ***************************************/
+
+/**
+ * @brief Cadence FSM
+ *
+ */
+typedef enum
+{
+    POWER_START = 0,
+    POWER_ON = 1,
+    POWER_ON_END = 2,
+    POWER_OFF = 3,
+    POWER_OFF_END = 4
+} POWER_STATE;
+
+/**
+ * @brief Cadence FSM
+ *
+ */
+typedef struct
+{
+    UWORD       uwPowerStartupCnt;  // Cnt of Startup
+    UWORD       uwPowerShutdnCnt;   // Cnt of Shutdown
+    UWORD       uwPowerOn2OffCnt;   // On 2 off Cnt
+    UWORD       uwPOwerForceShutdnCnt;   // Cnt of Shutdown
+    UWORD       uwPowerKeySta;   // key sta
+    UWORD       uwPowerKeyMode;   //key high or low
+    BOOL        blPowerStartupFlg;  // Flg of Startup
+    BOOL        blPowerShutdownFlg; // Flg of Shutdown
+    POWER_STATE powerstate;
+} POWER_OUT;
+
+/**
+ * @brief Cadence FSM
+ *
+ */
+typedef struct
+{
+    UWORD uwPowerStartTouchTimeCnt; // Cnt of Startup button touching
+    UWORD uwPowerShutTouchTimeCnt;  // Cnt of Shutdown button touching
+    UWORD uwPowerStartEndCnt;       // Cnt of transfering to fully Power On
+    UWORD uwPowerShutEndCnt;        // Cnt of transfering to fully Power Off
+    UWORD uwPowerOn2OffTimeCnt;     // Cnt On 2 off Cnt
+} POWER_COF;
+
+/****************************************
+ *
+ *           Exported variable
+ *
+ ****************************************/
+
+extern POWER_OUT power_stPowStateOut;
+/***************************************
+ *
+ *          Function  Definations
+ *
+ ***************************************/
+void power_voPowerInit(void);
+void power_voPowerManagement(BOOL ParaSaveEEFlg, BOOL PowerSleepFlg);
+
+/************************************************************************/
+
+#endif
+/************************************************************************
+ End of this File (EOF):
+ Do not put anything after this part!
+*************************************************************************/

+ 20 - 1
3.BasicFunction/Source/AssistCurve.c

@@ -405,6 +405,7 @@ void AssitCuvApplPerVolt(void)
     /* 启动标志判断 */
     if(ass_CalIn.uwtorquePer > ass_CalCoef.uwAssThreshold)
     {
+#if (TORG4BBTORQU_ENABLE == 1)
         if(CadGpioSta != TORG4BB_Get_CAD_PORT()   )
         {
  			CadGpioSta = TORG4BB_Get_CAD_PORT();
@@ -418,6 +419,21 @@ void AssitCuvApplPerVolt(void)
             }
            
         }
+#else
+        if(CadGpioSta !=Get_CAD_PORT()   )
+            {
+                CadGpioSta = Get_CAD_PORT();
+                if(ass_CalIn.uwStartRunPulse < 100)
+                {
+                    ass_CalIn.uwStartRunPulse ++;
+                }
+                else
+                {
+                    ass_CalIn.uwStartRunPulse = 100;
+                }
+
+            }
+#endif
     }
     else if (ass_CalIn.uwtorquePer < ass_CalCoef.uwAssStopThreshold)
     {
@@ -460,8 +476,11 @@ void AssitCuvApplPerVolt(void)
     {
         exit_pulse_cnt = 200;
     }
-    
+#if (TORG4BBTORQU_ENABLE == 1)
     if( TORG4BB_Get_CAD_PORT() == 0)
+#else
+        if( Get_CAD_PORT() == 0)
+#endif
     {
         if(ass_CalIn.uwcadLowStopCnt<=4000)
         {

+ 44 - 9
3.BasicFunction/Source/CadAssist.c

@@ -1807,32 +1807,67 @@ void GearLimitCurHandle(void)
         {
             GearCur.swAccCurLimitMax=cp_stControlPara.swPwrLimitValWt;
         }
+
+        cp_stControlPara.swPwrLimitValWtCALC= GearCur.swAccCurLimitMax;
+
+        pwr_voPwrLimInit();
+        pwr_stPwrLimCofIn.swPwrLimW = cp_stControlPara.swPwrLimitValWtCALC; // Q0, unit: 0.1w, Power limit value
+        pwr_stPwrLimCofIn.uwPwrErrW = cp_stControlPara.swPwrLimitErrWt; // Q0, unit: 0.1w, Start power limit when "VAL - ERR"
+        pwr_stPwrLimCofIn.swIqMaxAp = cp_stMotorPara.swIpeakMaxA;       // Q0, unit: 0.01A, Max phase current (peak value)
+        pwr_stPwrLimCofIn.uwIBaseAp = IBASE;                            // Q0,unit: 0.01A, Base Current
+        pwr_stPwrLimCofIn.uwUbVt = VBASE;                               // Q0,unit: 0.1V, Voltage base
+        pwr_stPwrLimCofIn.uwPwrLimPIKp = cp_stControlPara.swPwrLimitKpPu;
+        pwr_stPwrLimCofIn.uwPwrLimPIKi = cp_stControlPara.swPwrLimitKiPu;
+        pwr_stPwrLimCofIn.uwPwrLimSTARTCe = cp_stControlPara.swAlmPwrLimitStartTempVal;
+        pwr_stPwrLimCofIn.uwPwrLimENDCe = cp_stControlPara.swAlmOverHeatCeVal;
+        pwr_stPwrLimCofIn.uwPwrLimMotTempSTARTCe = cp_stControlPara.swAlmPwrLimitMotorStartTempVal;
+        pwr_stPwrLimCofIn.uwPwrLimMotTempENDCe = cp_stControlPara.swAlmMotorOverHeatCeVal;
+        pwr_stPwrLimCofIn.uwPwrLimStartBatCap = PWRLIM_START_BATCAP;
+        pwr_stPwrLimCofIn.uwPwrLimEndBatCap = PWRLIM_END_BATCAP;
+        pwr_voPwrLimCof(&pwr_stPwrLimCofIn, &pwr_stPwrLimCof);
     #elif(GEAR_CUR_UART5S!=0)
 
 
         if(stOBC_RunInfo.ucPWM!=GearCur.uwUart5SPWM)
         {
-        GearCur.uwUart5SPWM=stOBC_RunInfo.ucPWM;
-        if(GearCur.uwUart5SPWM>256)
-             GearCur.uwUart5SPWM=256;
-        GearCur.swAccCurLimitMax= (cp_stControlPara.swPwrLimitValWt>>8)* GearCur.uwUart5SPWM;
-        if(GearCur.swAccCurLimitMax<720)
-            GearCur.swAccCurLimitMax=720;
+            GearCur.uwUart5SPWM=stOBC_RunInfo.ucPWM;
+
+            GearCur.swAccCurLimitMax= (SWORD)(((SLONG)cp_stControlPara.swPwrLimitValWt * GearCur.uwUart5SPWM)>>8);
+            if(GearCur.swAccCurLimitMax<720)
+                GearCur.swAccCurLimitMax=720;
+
+            cp_stControlPara.swPwrLimitValWtCALC= GearCur.swAccCurLimitMax;
+
+            pwr_voPwrLimInit();
+            pwr_stPwrLimCofIn.swPwrLimW = cp_stControlPara.swPwrLimitValWtCALC; // Q0, unit: 0.1w, Power limit value
+            pwr_stPwrLimCofIn.uwPwrErrW = cp_stControlPara.swPwrLimitErrWt; // Q0, unit: 0.1w, Start power limit when "VAL - ERR"
+            pwr_stPwrLimCofIn.swIqMaxAp = cp_stMotorPara.swIpeakMaxA;       // Q0, unit: 0.01A, Max phase current (peak value)
+            pwr_stPwrLimCofIn.uwIBaseAp = IBASE;                            // Q0,unit: 0.01A, Base Current
+            pwr_stPwrLimCofIn.uwUbVt = VBASE;                               // Q0,unit: 0.1V, Voltage base
+            pwr_stPwrLimCofIn.uwPwrLimPIKp = cp_stControlPara.swPwrLimitKpPu;
+            pwr_stPwrLimCofIn.uwPwrLimPIKi = cp_stControlPara.swPwrLimitKiPu;
+            pwr_stPwrLimCofIn.uwPwrLimSTARTCe = cp_stControlPara.swAlmPwrLimitStartTempVal;
+            pwr_stPwrLimCofIn.uwPwrLimENDCe = cp_stControlPara.swAlmOverHeatCeVal;
+            pwr_stPwrLimCofIn.uwPwrLimMotTempSTARTCe = cp_stControlPara.swAlmPwrLimitMotorStartTempVal;
+            pwr_stPwrLimCofIn.uwPwrLimMotTempENDCe = cp_stControlPara.swAlmMotorOverHeatCeVal;
+            pwr_stPwrLimCofIn.uwPwrLimStartBatCap = PWRLIM_START_BATCAP;
+            pwr_stPwrLimCofIn.uwPwrLimEndBatCap = PWRLIM_END_BATCAP;
+            pwr_voPwrLimCof(&pwr_stPwrLimCofIn, &pwr_stPwrLimCof);
         }
 
     #endif
 
 
 #else
-    GearCur.swAccCurLimitMax= cp_stControlPara.swPwrLimitValWt;
-
 
+        GearCur.swAccCurLimitMax= cp_stControlPara.swPwrLimitValWt;
+        cp_stControlPara.swPwrLimitValWtCALC= GearCur.swAccCurLimitMax;
 
 #endif
 
 
 
-    cp_stControlPara.swPwrLimitValWtCALC= GearCur.swAccCurLimitMax;
+
 
 }
 

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

@@ -247,7 +247,7 @@ static void cadence_voCadenceHighFrequencyWork(UWORD source)
 
             ulCaputureCntErr = (((ULONG)cadence_stFreGetOut.uwCaputureOverflowCnt * (72 * cadence_stFreGetCof.uwTimerUnit))  )>>8;
             cadence_stFreGetOut.ulCaputureCntErr = ulCaputureCntErr;
-            if (cadence_stFreGetOut.ulCaputureCntErr > 1000)//1000
+            if (cadence_stFreGetOut.ulCaputureCntErr > 2000)//1000
             {
                 tmp_uwFrequencyPu = (UWORD)(((SQWORD)72000000 << 12) / (((SQWORD)cadence_stFreGetOut.ulCaputureCntErr + cadence_stFreGetOut.ulTimer2CntErr) * cadence_stFreGetCof.uwNumbersPulses * FBASE));
                 cadence_stFreGetOut.uwCntErrLast = cadence_stFreGetOut.uwCaputureOverflowCnt;

+ 4 - 2
3.BasicFunction/Source/bikelight.c

@@ -394,17 +394,19 @@ void bikelight_voBikeLightCoef(UWORD volt)
 //前灯
     BikeLedCheck_F.uwBike_LedVolt =volt & 0x0f;
     BikeLedCheck_F.uwBike_LedMode=8; //前灯模式
-    BikeLedCheck_F.uwBike_LedFun=1;
+    BikeLedCheck_F.uwBike_LedFun=0;
 //尾灯
     BikeLedCheck_B.uwBike_LedMode = (volt & 0xf000)>>12;//尾灯模式
    BikeLedCheck_B.uwBike_LedVolt =(volt & 0x0f00)>>8;
-   BikeLedCheck_B.uwBike_LedFun=1;
+   BikeLedCheck_B.uwBike_LedFun=0;
 
 
 //左灯模式
    BikeLedCheck_L.uwBike_LedMode=5;
+   BikeLedCheck_L.uwBike_LedFun=0;
 //右灯模式
    BikeLedCheck_R.uwBike_LedMode=5;
+   BikeLedCheck_L.uwBike_LedFun=0;
 
    if( BikeLedCheck_F.uwBike_LedVolt == 12) //拉低短路
     {

+ 47 - 4
3.BasicFunction/Source/power.c

@@ -32,7 +32,7 @@
  ******************************/
 POWER_OUT        power_stPowStateOut = POWER_OUT_DEFAULT;
 static POWER_COF power_stPowStateCof = POWER_COF_DEFAULT;
-
+void Power_KeyChangeHandle(void);
 /***************************************************************
  Function: power_voPowerInit;
  Description: cadence frequency get initialization
@@ -159,11 +159,20 @@ void power_voPowerManagement( _Bool ParaSaveEEFlg, _Bool PowerSleepFlg)
 
 #else
 
-      if((POWERKEYVOLREG() < NULL_KEYMAXVOL)&&(POWERKEYVOLREG() > NULL_KEYMINVOL))
+      if((adc_stUpOut.uwPoweAdcrLpfPu < NULL_KEYMAXVOL)&&(adc_stUpOut.uwPoweAdcrLpfPu > NULL_KEYMINVOL))
       {
        power_stPowStateOut.uwPowerKeySta=0;
+       if(power_stPowStateCof.uwPowerModeTime>0)
+           power_stPowStateCof.uwPowerModeTime--;
       }
-      else if(POWERKEYVOLREG() > High_KEYVOL)
+      else if(adc_stUpOut.uwPoweAdcrLpfPu > High_KEYVOL)
+      {
+
+          if(power_stPowStateCof.uwPowerModeTime<10)
+          {
+              power_stPowStateCof.uwPowerModeTime++;
+          }
+          else
       {
           power_stPowStateOut.uwPowerKeySta=1;
           if(power_stPowStateOut.powerstate == POWER_START)
@@ -171,7 +180,14 @@ void power_voPowerManagement( _Bool ParaSaveEEFlg, _Bool PowerSleepFlg)
               power_stPowStateOut.uwPowerKeyMode=1;
           }
       }
-      else if(POWERKEYVOLREG() < LOW_KEYVOL)
+      }
+      else if(adc_stUpOut.uwPoweAdcrLpfPu < LOW_KEYVOL)
+       {
+          if(++power_stPowStateCof.uwPowerModeTime<10)
+          {
+              power_stPowStateCof.uwPowerModeTime++;
+          }
+          else
        {
           power_stPowStateOut.uwPowerKeySta=1;
           if(power_stPowStateOut.powerstate == POWER_START)
@@ -179,6 +195,7 @@ void power_voPowerManagement( _Bool ParaSaveEEFlg, _Bool PowerSleepFlg)
                power_stPowStateOut.uwPowerKeyMode=2;
            }
        }
+       }
 
 
 
@@ -255,6 +272,7 @@ if( power_stPowStateOut.uwPowerKeyMode ==1)
             power_stPowStateOut.blPowerShutdownFlg = TRUE;
             power_stPowStateOut.uwPowerShutdnCnt = 0;
          Reset_POWER_LOCK_PORT();//  GPIO_ResetBits(POWER_LOCK_PORT,POWER_LOCK_PIN);//  iGpio_Write(HW_GPIO_POWERLOCK_PIN,ApiGpio_LowLevel);
+         Power_KeyChangeHandle();
         }
     }
     else
@@ -335,6 +353,7 @@ else if(power_stPowStateOut.uwPowerKeyMode==2)
               power_stPowStateOut.blPowerShutdownFlg = TRUE;
               power_stPowStateOut.uwPowerShutdnCnt = 0;
               Reset_POWER_LOCK_PORT();
+              Power_KeyChangeHandle;
           }
           if(power_stPowStateOut.uwPowerKeySta != 0)
           {
@@ -343,6 +362,7 @@ else if(power_stPowStateOut.uwPowerKeyMode==2)
                   power_stPowStateOut.blPowerShutdownFlg = TRUE;
                    power_stPowStateOut.uwPowerShutdnCnt = 0;
                    Reset_POWER_LOCK_PORT();
+                   Power_KeyChangeHandle;
               }
           }
           else
@@ -367,6 +387,29 @@ else if(power_stPowStateOut.uwPowerKeyMode==2)
 
 
 #endif
+}
+void Power_KeyChangeHandle(void)
+{
+static  UWORD uWPtime=0;
+
+if(uWPtime<=5000)
+{
+    uWPtime++;
+   DL_GPIO_initDigitalOutput(IOMUX_PINCM60);
+   DL_GPIO_clearPins(GPIOA,DL_GPIO_PIN_27);
+    DL_GPIO_enableOutput(GPIOA,  DL_GPIO_PIN_27);
+    DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_27);
+}
+else
+{
+ if(uWPtime<5002)
+ {
+     uWPtime=5005;
+     SYSCFG_DL_ADC12_0_init();
+ }
+
+}
+
 }
 
 /*************************************************************************

+ 1 - 1
4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Include/syspar.h

@@ -217,7 +217,7 @@ Update Time
 *=======================================================================*/
 #define FPWM_HZ        16000
 #define FTBC_HZ        8000
-#define FTBS_HZ        8000 //4000
+#define FTBS_HZ        4000 //4000
 #define FSYSTICK_HZ    1000
 #define PWM_PERIOD_CNT 4500
 #define PWM_PERIOD_US  625

+ 2 - 2
4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Include/user.h

@@ -694,7 +694,7 @@ Update Time
 #define ALM_THROTTLE_MIN_VOL 3  // unit: 0.1V
 #define ALM_THROTTLE_FLT_TS  1  // unit: s
 #define ALM_NTC_MAX_VOL      32 // unit: 0.1V
-#define ALM_NTC_MIN_VOL      3  // unit: 0.1V
+#define ALM_NTC_MIN_VOL      1  // unit: 0.1V
 #define ALM_MOTORNTC_FLT_TS  1  // unit: s
 #define ALM_PCBNTC_FLT_TS    1  // unit: s
 
@@ -767,7 +767,7 @@ Update Time
    PWM generation
 *=======================================================================*/
 #define PWM_MAX_DUTY_CYLE_IPM   900// 900// 900                        // 938      // unit: 0.1%,Max duty cyle for compare value
-#define PWM_7SVM_TO_5SVM_DUTY_IPM 700                        // unit: 0.1%, Switch ratio from 7 to 5 svpwm
+#define PWM_7SVM_TO_5SVM_DUTY_IPM 1000                        // unit: 0.1%, Switch ratio from 7 to 5 svpwm
 #define PWM_MIN_SAMPLE_DUTY1_IPM  5 * 10000 / PWM_PERIOD_US  // unit: 0.1%, 5us TWO MIN ZERO VECTOR = two sample current steady time
 #define PWM_MIN_SAMPLE_DUTY2_IPM  10 * 10000 / PWM_PERIOD_US // unit: 0.1%, 10us TWO (one sample current steady time + one sample time)
 #define PWM_MIN_SAMPLE_DUTY3_IPM \

+ 1 - 0
4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Source/CodePara.c

@@ -195,6 +195,7 @@ void CodeParaInit(void)
     cp_stControlPara.swCvbConstantVolBrakeV = CVB_CONSTANT_VOL_BRAKE_V;
     cp_stControlPara.swCvbConstantSpdLowRpm = CVB_CONSTANT_SPD_LOW_RPM;
 
+    cp_stControlPara.swPwrLimitValWtCALC=PWRLIM_VAL;
     cp_stControlPara.swPwrLimitValWt = PWRLIM_VAL;
     cp_stControlPara.swPwrLimitErrWt = PWRLIM_ERR;
     cp_stControlPara.swPwrLimitLPFFre = PWRLIM_LPF_FRQ;

+ 34 - 36
m0g3507_int.c

@@ -414,7 +414,7 @@ void ADC12_0_INST_IRQHandler(void)//void ADC1_CMP_IRQHandler(void)
 //    DL_GPIO_togglePins(LED_PORT, LED_LED1_PIN);
 //    DL_GPIO_togglePins(LED_PORT, LED_LED2_PIN);
 #if(SampleModelSelect == DOUBLERESISTANCE)
-    if (DL_ADC12_getPendingInterrupt(ADC12_0_INST) &DL_ADC12_IIDX_MEM4_RESULT_LOADED)//  if (adc_flag_get(ADC1,ADC_PCCE_FLAG)) //ADCx->SR & 0x04 娉ㄥ叆缁勪腑鏂爣蹇�
+    if (DL_ADC12_getPendingInterrupt(ADC12_0_INST) &DL_ADC12_IIDX_MEM1_RESULT_LOADED)//  if (adc_flag_get(ADC1,ADC_PCCE_FLAG)) //ADCx->SR & 0x04 娉ㄥ叆缁勪腑鏂爣蹇�
         {
 
 //
@@ -1581,31 +1581,16 @@ void TIMA1_IRQHandler(void) //void TMR1_BRK_OVF_TRG_HALL_IRQHandler(void)
              break;
              case 3:
                  /* ADC Rdson calibration with single resistance*/
-                 if (TimingDelay != 0)
-                      {
-                          TimingDelay--;
-                      }
-                 if(bikespeed_stFreGetOut.uwCaputureOverflowCnt<60000)
-                 bikespeed_stFreGetOut.uwCaputureOverflowCnt++; //
-                 if(cadence_stFreGetOut.uwCaputureOverflowCnt<60000)
-                 cadence_stFreGetOut.uwCaputureOverflowCnt++;
-                 tbs_voIsr();//20241017
-//                 if(BikeLedGloFun.blBike_ForwardLedSta==TRUE)
-//                 {
-//                     BikeLedGloFun.uwBikeLight_L_PWM +=100;
-//                    if(BikeLedGloFun.uwBikeLight_L_PWM>720)
-//                     {
-//                        BikeLedGloFun.uwBikeLight_L_PWM=720;
-//                     }
-//
-//                    BikeLedGloFun.uwBikeLight_F_PWM +=100;
-//                    if(BikeLedGloFun.uwBikeLight_F_PWM>1800)
-//                    {
-//                       BikeLedGloFun.uwBikeLight_F_PWM=1800;
-//                    }
-//                    DL_TimerG_setCaptureCompareValue(PWM_2_INST, BikeLedGloFun.uwBikeLight_L_PWM, GPIO_PWM_2_C1_IDX);
-//                    DL_TimerG_setCaptureCompareValue(PWM_3_INST, BikeLedGloFun.uwBikeLight_F_PWM, GPIO_PWM_3_C1_IDX);//max=1800
-//                 }
+//                 if (TimingDelay != 0)
+//                      {
+//                          TimingDelay--;
+//                      }
+//                 if(bikespeed_stFreGetOut.uwCaputureOverflowCnt<60000)
+//                 bikespeed_stFreGetOut.uwCaputureOverflowCnt++; //
+//                 if(cadence_stFreGetOut.uwCaputureOverflowCnt<60000)
+//                 cadence_stFreGetOut.uwCaputureOverflowCnt++;
+//                 tbs_voIsr();//20241017
+
              break;
               default:
 
@@ -1647,7 +1632,20 @@ void TIMA1_IRQHandler(void) //void TMR1_BRK_OVF_TRG_HALL_IRQHandler(void)
                case 2:
                   // gpio_bits_set(GPIOB,GPIO_PINS_11);
         //                    adc_enable(ADC1,FALSE);//
+           //---------------------2
                    tbc_voDownIsr(); //鐢垫祦 /鐢靛帇鑾峰彇 锛岃绠楁牎鍑嗙數娴侀噰鏍风偣  TMR1->c4dt=1000;// tmpSigRTrigZ1;
+         //-----------------------    3
+                   if(bikespeed_stFreGetOut.uwCaputureOverflowCnt<60000)
+                       bikespeed_stFreGetOut.uwCaputureOverflowCnt++; //
+                   if(cadence_stFreGetOut.uwCaputureOverflowCnt<60000)
+                       cadence_stFreGetOut.uwCaputureOverflowCnt++;
+                     tbs_voIsr();//20241017
+          //--------------------4
+                   TIMER_CC_A_INDEX(pwm_stGenOut.uwNewTIM1COMPR[0]);//     DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[0], DL_TIMER_CC_0_INDEX);//A
+                   TIMER_CC_B_INDEX(pwm_stGenOut.uwNewTIM1COMPR[1]);// DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[1], DL_TIMER_CC_2_INDEX); //B
+                   TIMER_CC_C_INDEX(pwm_stGenOut.uwNewTIM1COMPR[2]);// DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[2], DL_TIMER_CC_1_INDEX);//C
+
+         //------------------------
                   // gpio_bits_reset(GPIOB,GPIO_PINS_11);
             #if(JSCOPE_EN!=0)
                   Jscope_WtiteData();
@@ -1656,12 +1654,12 @@ void TIMA1_IRQHandler(void) //void TMR1_BRK_OVF_TRG_HALL_IRQHandler(void)
               case 4:
                  // GPIOC->odt  ^= GPIO_PINS_13;
 
-                      hw_uwPWMCmpr[0] = pwm_stGenOut.uwNewTIM1COMPR[0];
-                       hw_uwPWMCmpr[1] = pwm_stGenOut.uwNewTIM1COMPR[1];
-                       hw_uwPWMCmpr[2] = pwm_stGenOut.uwNewTIM1COMPR[2];
-                       hw_uwPWMCmpr[3] = pwm_stGenOut.uwNewTIM1COMPR[3];
-                       hw_uwPWMCmpr[4] = pwm_stGenOut.uwNewTIM1COMPR[4];
-                       hw_uwPWMCmpr[5] = pwm_stGenOut.uwNewTIM1COMPR[5];
+//                      hw_uwPWMCmpr[0] = pwm_stGenOut.uwNewTIM1COMPR[0];
+//                       hw_uwPWMCmpr[1] = pwm_stGenOut.uwNewTIM1COMPR[1];
+//                       hw_uwPWMCmpr[2] = pwm_stGenOut.uwNewTIM1COMPR[2];
+//                       hw_uwPWMCmpr[3] = pwm_stGenOut.uwNewTIM1COMPR[3];
+//                       hw_uwPWMCmpr[4] = pwm_stGenOut.uwNewTIM1COMPR[4];
+//                       hw_uwPWMCmpr[5] = pwm_stGenOut.uwNewTIM1COMPR[5];
                        /* Enable PWM DMA,  hw_uwPWMCmpr[0/1/2] at underflow update */
         //                        tmr_dma_request_enable(TMR1,TMR_OVERFLOW_DMA_REQUEST,TRUE);// TIM_DMACmd(TIM1, TIM_DMA_Update, ENABLE);
         //                       dma_channel_enable(DMA1_CHANNEL5,TRUE); //DMA_Cmd(DMA1_Channel5, ENABLE);
@@ -1671,12 +1669,12 @@ void TIMA1_IRQHandler(void) //void TMR1_BRK_OVF_TRG_HALL_IRQHandler(void)
 //                       pwm_stGenOut.uwNewTIM1COMPR[2]=450 ;
 
 
-                       TIMER_CC_A_INDEX(pwm_stGenOut.uwNewTIM1COMPR[0]);//     DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[0], DL_TIMER_CC_0_INDEX);//A
-                       TIMER_CC_B_INDEX(pwm_stGenOut.uwNewTIM1COMPR[1]);// DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[1], DL_TIMER_CC_2_INDEX); //B
-                       TIMER_CC_C_INDEX(pwm_stGenOut.uwNewTIM1COMPR[2]);// DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[2], DL_TIMER_CC_1_INDEX);//C
+//                       TIMER_CC_A_INDEX(pwm_stGenOut.uwNewTIM1COMPR[0]);//     DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[0], DL_TIMER_CC_0_INDEX);//A
+//                       TIMER_CC_B_INDEX(pwm_stGenOut.uwNewTIM1COMPR[1]);// DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[1], DL_TIMER_CC_2_INDEX); //B
+//                       TIMER_CC_C_INDEX(pwm_stGenOut.uwNewTIM1COMPR[2]);// DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[2], DL_TIMER_CC_1_INDEX);//C
 
         //                       adc_enable(ADC1,TRUE);//
-                         DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST,2, DL_TIMER_CC_4_INDEX); //采样点设置
+                       //  DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST,2, DL_TIMER_CC_4_INDEX); //采样点设置
                  break;
                   default:
 

+ 1697 - 0
m0g3507_int.c.bak

@@ -0,0 +1,1697 @@
+/* add user code begin Header */
+/**
+  **************************************************************************
+  * @file     .c
+  * @brief    main interrupt service routines.
+  **************************************************************************
+  *                       Copyright notice & Disclaimer
+  *
+  * The software Board Support Package (BSP) that is made available to
+  * download from Artery official website is the copyrighted work of Artery.
+  * Artery authorizes customers to use, copy, and distribute the BSP
+  * software and its related documentation for the purpose of design and
+  * development in conjunction with Artery microcontrollers. Use of the
+  * software is governed by this copyright notice and the following disclaimer.
+  *
+  * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES,
+  * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS,
+  * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR
+  * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS,
+  * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
+  * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
+  *
+  **************************************************************************
+  */
+/* add user code end Header */
+
+/* includes ------------------------------------------------------------------*/
+//#include "at32f421_int.h"
+
+/* private includes ----------------------------------------------------------*/
+/* add user code begin private includes */
+//#include "at32f421_wk_config.h"
+ #include "TimeTask_Event.h"
+#include "syspar.h"
+#include "user.h"
+//#include "at32f421_adc.h"
+//#include "at32f421_tmr.h"
+#include "usart.h"
+#include "can.h"
+//#include "SEGGER_RTT.h"
+#include "bikelight.h"
+#include "UserGpio_Config.h"
+
+#include "ti_msp_dl_config.h"
+/* add user code end private includes */
+
+/* private typedef -----------------------------------------------------------*/
+/* add user code begin private typedef */
+
+/* add user code end private typedef */
+
+/* private define ------------------------------------------------------------*/
+/* add user code begin private define */
+
+/* add user code end private define */
+
+/* private macro -------------------------------------------------------------*/
+/* add user code begin private macro */
+
+/* add user code end private macro */
+
+/* private variables ---------------------------------------------------------*/
+/* add user code begin private variables */
+
+/* add user code end private variables */
+
+/* private function prototypes --------------------------------------------*/
+/* add user code begin function prototypes */
+
+/* add user code end function prototypes */
+
+/* private user code ---------------------------------------------------------*/
+/* add user code begin 0 */
+//__IO uint16_t adc1_ordinary_valuetab[5][7] = {0};
+__IO uint16_t adc1_preempt_valuetab[5][3] = {0};
+__IO uint16_t chanel_trans_complete_flag = 0;
+__IO uint16_t adc_trans_complete_flag = 0;
+__IO uint16_t preempt_conversion_count = 0;
+
+ 
+unsigned int BCnt;   // Variable: speed control period tick
+unsigned int CCnt;
+unsigned int DCnt;
+unsigned int ECnt,FCnt,GCnt,CMPF,CLMPF;
+unsigned int CHMPF=0;
+unsigned int  HALLACnt,HALLBCnt,HALLCCnt;
+unsigned int DAC_value;
+unsigned int SPEED_edgeCapture,TIPIN_edgeCapture;
+unsigned int  HGcnt;
+
+//#define DAC12_REF_VOLTAGE_mV (3300)
+//#define DAC12_OUTPUT_VOLTAGE_mV (1650)
+
+
+volatile bool gCheckADC;
+unsigned int i = 0;
+#define RESULT_SIZE (10)
+ uint16_t gAdcResult0[12]; //OPA0 OUTPUT
+//volatile uint16_t gAdcResult1[RESULT_SIZE]; // PA25 pcb temp
+//volatile uint16_t gAdcResult2[RESULT_SIZE];// PA24 motor temp
+//volatile uint16_t gAdcResult3[RESULT_SIZE]; // PB24 zhuanba
+//volatile uint16_t gAdcResult4[RESULT_SIZE];// PB20 bus current
+//volatile uint16_t gAdcResult5[RESULT_SIZE]; // PA14 BAT VOLTAGE
+//volatile uint16_t gAdcResult6[RESULT_SIZE]; //OPA1 OUTPUT
+//volatile uint16_t gAdcResult7[RESULT_SIZE]; //PB19 A1_6 Liju
+ 
+//                 DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);
+//             gAdcResult1[i] =
+//                 DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_1);
+//             gAdcResult2[i] =
+//                 DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_2);
+//             gAdcResult3[i] =
+//                 DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_3);
+//
+//             gAdcResult4[i] =
+//                 DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_4);
+//             gAdcResult5[i] =
+//                 DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_5);
+//
+//
+//             gAdcResult6[i] =
+//                 DL_ADC12_getMemResult(ADC12_1_INST, DL_ADC12_MEM_IDX_0);
+//            DL_GPIO_clearPins(OUTPUT_CAN_STB_PORT, OUTPUT_CAN_STB_PIN);
+//            gAdcResult7[i] =
+//                DL_ADC12_getMemResult(ADC12_1_INST, DL_ADC12_MEM_IDX_1);
+ 
+
+/* add user code end 0 */
+
+/* external variables ---------------------------------------------------------*/
+/* add user code begin external variables */
+#if 0
+
+  if(adc_interrupt_flag_get(ADC1, ADC_PCCE_FLAG) != RESET)
+  {
+    adc_flag_clear(ADC1, ADC_PCCE_FLAG);
+    if(preempt_conversion_count < 5){
+      adc1_preempt_valuetab[preempt_conversion_count][0] = adc_preempt_conversion_data_get(ADC1, ADC_PREEMPT_CHANNEL_1);
+      adc1_preempt_valuetab[preempt_conversion_count][1] = adc_preempt_conversion_data_get(ADC1, ADC_PREEMPT_CHANNEL_2);
+      adc1_preempt_valuetab[preempt_conversion_count][2] = adc_preempt_conversion_data_get(ADC1, ADC_PREEMPT_CHANNEL_3);
+      preempt_conversion_count++;
+    }
+  }
+
+  if(adc_interrupt_flag_get(ADC1, ADC_CCE_FLAG) != RESET)
+  {
+    adc_flag_clear(ADC1, ADC_CCE_FLAG);
+    if(chanel_trans_complete_flag < 7){
+      adc1_ordinary_valuetab[adc_trans_complete_flag][chanel_trans_complete_flag++] = adc_ordinary_conversion_data_get(ADC1);
+    }
+  }
+#endif
+/* add user code end external variables */
+
+///**
+//  * @brief  this function handles nmi exception.
+//  * @param  none
+//  * @retval none
+//  */
+//void NMI_Handler(void)
+//{
+//  /* add user code begin NonMaskableInt_IRQ 0 */
+//
+//  /* add user code end NonMaskableInt_IRQ 0 */
+//
+//  /* add user code begin NonMaskableInt_IRQ 1 */
+//
+//  /* add user code end NonMaskableInt_IRQ 1 */
+//}
+
+/**
+  * @brief  this function handles hard fault exception.
+  * @param  none
+  * @retval none
+  */
+void HardFault_Handler(void)
+{
+  /* add user code begin HardFault_IRQ 0 */
+hw_voPWMOff();
+  /* add user code end HardFault_IRQ 0 */
+  /* go to infinite loop when hard fault exception occurs */
+  while (1)
+  {
+    /* add user code begin W1_HardFault_IRQ 0 */
+
+    /* add user code end W1_HardFault_IRQ 0 */
+  }
+}
+
+///**
+//  * @brief  this function handles memory manage exception.
+//  * @param  none
+//  * @retval none
+//  */
+//void MemManage_Handler(void)
+//{
+//  /* add user code begin MemoryManagement_IRQ 0 */
+//
+//  /* add user code end MemoryManagement_IRQ 0 */
+//  /* go to infinite loop when memory manage exception occurs */
+//  while (1)
+//  {
+//    /* add user code begin W1_MemoryManagement_IRQ 0 */
+//
+//    /* add user code end W1_MemoryManagement_IRQ 0 */
+//  }
+//}
+//
+///**
+//  * @brief  this function handles bus fault exception.
+//  * @param  none
+//  * @retval none
+//  */
+//void BusFault_Handler(void)
+//{
+//  /* add user code begin BusFault_IRQ 0 */
+//
+//  /* add user code end BusFault_IRQ 0 */
+//  /* go to infinite loop when bus fault exception occurs */
+//  while (1)
+//  {
+//    /* add user code begin W1_BusFault_IRQ 0 */
+//
+//    /* add user code end W1_BusFault_IRQ 0 */
+//  }
+//}
+//
+///**
+//  * @brief  this function handles usage fault exception.
+//  * @param  none
+//  * @retval none
+//  */
+//void UsageFault_Handler(void)
+//{
+//  /* add user code begin UsageFault_IRQ 0 */
+//
+//  /* add user code end UsageFault_IRQ 0 */
+//  /* go to infinite loop when usage fault exception occurs */
+//  while (1)
+//  {
+//    /* add user code begin W1_UsageFault_IRQ 0 */
+//
+//    /* add user code end W1_UsageFault_IRQ 0 */
+//  }
+//}
+//
+///**
+//  * @brief  this function handles svcall exception.
+//  * @param  none
+//  * @retval none
+//  */
+//void SVC_Handler(void)
+//{
+//  /* add user code begin SVCall_IRQ 0 */
+//
+//  /* add user code end SVCall_IRQ 0 */
+//  /* add user code begin SVCall_IRQ 1 */
+//
+//  /* add user code end SVCall_IRQ 1 */
+//}
+//
+///**
+//  * @brief  this function handles debug monitor exception.
+//  * @param  none
+//  * @retval none
+//  */
+//void DebugMon_Handler(void)
+//{
+//  /* add user code begin DebugMonitor_IRQ 0 */
+//
+//  /* add user code end DebugMonitor_IRQ 0 */
+//  /* add user code begin DebugMonitor_IRQ 1 */
+//
+//  /* add user code end DebugMonitor_IRQ 1 */
+//}
+//
+///**
+//  * @brief  this function handles pendsv_handler exception.
+//  * @param  none
+//  * @retval none
+//  */
+//void PendSV_Handler(void)
+//{
+//  /* add user code begin PendSV_IRQ 0 */
+//
+//  /* add user code end PendSV_IRQ 0 */
+//  /* add user code begin PendSV_IRQ 1 */
+//
+//  /* add user code end PendSV_IRQ 1 */
+//}
+
+/**
+  * @brief  this function handles systick handler.
+  * @param  none
+  * @retval none
+  */
+void SysTick_Handler(void)
+{
+  /* add user code begin SysTick_IRQ 0 */
+
+  /* add user code end SysTick_IRQ 0 */
+  /* add user code begin SysTick_IRQ 1 */
+    //clas_ubSystickFlg = 1; // for TUV
+    cp_ulSystickCnt++;
+    /* Add your code below */
+    
+    /* 1ms and Timing Event */
+    TimingTaskTimerServer();
+     Event_1ms();
+
+    /* TBT interrupt */
+    tbt_voIsr();
+
+    /* UART */
+   // UART_voApplTimer();
+
+    /* LED */
+
+    // at32_led_toggle();
+   //  GPIOF->odt ^= GPIO_PINS_7;
+  /* add user code end SysTick_IRQ 1 */
+}
+
+///**
+//  * @brief  this function handles DMA1 Channel 1 handler.
+//  * @param  none
+//  * @retval none
+//  */
+//void DMA1_Channel1_IRQHandler(void)
+//{
+//  /* add user code begin DMA1_Channel1_IRQ 0 */
+//  if(dma_interrupt_flag_get(DMA1_FDT1_FLAG) != RESET)
+//  {
+//      // adc_enable(ADC1,FALSE);
+//    dma_flag_clear(DMA1_FDT1_FLAG);
+//    //dma_trans_complete_flag++;
+//  }
+//  /* add user code end DMA1_Channel1_IRQ 0 */
+//  /* add user code begin DMA1_Channel1_IRQ 1 */
+//
+//  /* add user code end DMA1_Channel1_IRQ 1 */
+//}
+
+/**
+  * @brief  this function handles ADC1 & Comparator handler.
+  * @param  none
+  * @retval none
+  */
+UWORD tmpSCir = 0;
+
+//void ADC12_0_INST_IRQHandler(void)
+//{
+//    switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST)) {
+//        case DL_ADC12_IIDX_MEM5_RESULT_LOADED:
+//            gCheckADC = true;
+//            DL_GPIO_setPins(OUTPUT_CAN_STB_PORT, OUTPUT_CAN_STB_PIN);
+////            DL_GPIO_togglePins(OUTPUT_CAN_STB_PORT, OUTPUT_CAN_STB_PIN);
+//            delay_cycles(1000);
+//            gAdcResult0[i] =
+//                 DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);
+//             gAdcResult1[i] =
+//                 DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_1);
+//             gAdcResult2[i] =
+//                 DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_2);
+//             gAdcResult3[i] =
+//                 DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_3);
+//
+//             gAdcResult4[i] =
+//                 DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_4);
+//             gAdcResult5[i] =
+//                 DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_5);
+//
+//
+//             gAdcResult6[i] =
+//                 DL_ADC12_getMemResult(ADC12_1_INST, DL_ADC12_MEM_IDX_0);
+//            DL_GPIO_clearPins(OUTPUT_CAN_STB_PORT, OUTPUT_CAN_STB_PIN);
+//            gAdcResult7[i] =
+//                DL_ADC12_getMemResult(ADC12_1_INST, DL_ADC12_MEM_IDX_1);
+//           DL_GPIO_clearPins(OUTPUT_CAN_STB_PORT, OUTPUT_CAN_STB_PIN);
+//             i++;
+//             if (i >= RESULT_SIZE) {
+//     //            __BKPT(0);
+//                 i = 0;
+//             }
+//             else{
+//                 ;/*No action required*/
+//             }
+//            break;
+//        default:
+//            break;
+//    }
+//}
+
+void ADC12_0_INST_IRQHandler(void)//void ADC1_CMP_IRQHandler(void)
+{
+  /* add user code begin ADC1_CMP_IRQ 0 */
+//  if(adc_interrupt_flag_get(ADC1, ADC_CCE_FLAG) != RESET)
+//  {
+//    adc_flag_clear(ADC1, ADC_CCE_FLAG);
+//  }
+//  if(adc_interrupt_flag_get(ADC1, ADC_PCCE_FLAG) != RESET)
+//  {
+//    adc_flag_clear(ADC1, ADC_PCCE_FLAG);
+//    //if(preempt_conversion_count < 5)
+//   // {
+//      adc1_preempt_valuetab[0][0] = adc_preempt_conversion_data_get(ADC1, ADC_PREEMPT_CHANNEL_1);
+//      adc1_preempt_valuetab[0][1] = adc_preempt_conversion_data_get(ADC1, ADC_PREEMPT_CHANNEL_2);
+//      adc1_preempt_valuetab[0][2] = adc_preempt_conversion_data_get(ADC1, ADC_PREEMPT_CHANNEL_3);
+//    //  preempt_conversion_count++;
+//    //}
+//  }
+
+    BCnt++;
+//    DL_GPIO_togglePins(LED_PORT, LED_LED1_PIN);
+//    DL_GPIO_togglePins(LED_PORT, LED_LED2_PIN);
+#if(SampleModelSelect == DOUBLERESISTANCE)
+    if (DL_ADC12_getPendingInterrupt(ADC12_0_INST) &DL_ADC12_IIDX_MEM4_RESULT_LOADED)//  if (adc_flag_get(ADC1,ADC_PCCE_FLAG)) //ADCx->SR & 0x04 娉ㄥ叆缁勪腑鏂爣蹇�
+        {
+
+//
+//        gAdcResult0[0] =
+//             DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);
+//        gAdcResult0[1] =
+//             DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_1);
+//        gAdcResult0[2] =
+//             DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_2);
+//        gAdcResult0[3] =
+//             DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_3);
+//
+////        gAdcResult0[4] =
+////             DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_4);
+//        gAdcResult0[5] =
+//             DL_ADC12_getMemResult(ADC12_1_INST, DL_ADC12_MEM_IDX_0);
+//
+//
+//        gAdcResult0[6] =
+//             DL_ADC12_getMemResult(ADC12_1_INST, DL_ADC12_MEM_IDX_1);
+//
+//        gAdcResult0[7] =
+//            DL_ADC12_getMemResult(ADC12_1_INST, DL_ADC12_MEM_IDX_2);
+//        gAdcResult0[8] =
+//             DL_ADC12_getMemResult(ADC12_1_INST, DL_ADC12_MEM_IDX_3);
+//        gAdcResult0[9] =
+//             DL_ADC12_getMemResult(ADC12_1_INST, DL_ADC12_MEM_IDX_4);
+
+      // GPIOC->odt  ^= GPIO_PINS_13;
+     // GPIOC->odt  ^= GPIO_PINS_15;
+          // IO_PC10_TEST_ENABLE; //PC10鎵撳嵃鎸囩ず
+//        if( (((uint8_t)DL_Timer_getTimerCount(MOTOR_PWM_INST)) & 0x10) ==0)//        if( (((uint8_t)TMR1->ctrl1) & 0x10) ==0)//    //TIME1 鍚戜笂璁℃暟璇诲彇鐩哥數娴丄D鍊�
+            {
+               // GPIOC->odt  ^= GPIO_PINS_13;
+              //  if(hw_blPWMOnFlg == TRUE)
+                {
+#if((IPM_POWER_SEL == IPM_POWER_250W_6G) ||(IPM_POWER_SEL ==IPM_POWER_350W_6G))
+                    adc_uwRdsonUReg =RDSON_U_REG();//  DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);//
+                    adc_uwRdsonVReg =RDSON_V_REG();//
+#else
+                //    adc_uwRdsonUReg =RDSON_U_REG();//  DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);//
+                   adc_uwRdsonVReg = RDSON_V_REG();//
+                   adc_uwRdsonWReg = RDSON_W_REG();//
+#endif
+            }
+//                else
+//                {
+//                    adc_uwRdsonUReg =adc_stCof.uwIaOffset;//
+//                    adc_uwRdsonVReg =adc_stCof.uwIbOffset;//
+//                    adc_uwRdsonWReg = adc_stCof.uwIcOffset;//
+//                }
+            }
+//           adc_flag_clear(ADC1,ADC_PCCE_FLAG);//    //娓匒DC娉ㄥ叆缁勪腑鏂爣蹇�
+          // IO_PC10_TEST_DISABLE; //PC10鎵撳嵃鎸囩ず
+
+        }
+#elif(SampleModelSelect == COMBINATION)
+   if (adc_flag_get(ADC1,ADC_PCCE_FLAG)) //ADCx->SR & 0x04 娉ㄥ叆缁勪腑鏂爣蹇�
+        {
+           if( (((uint8_t)TMR1->ctrl1) & 0x10) ==0)//    //TIME1 鍚戜笂璁℃暟璇诲彇鐩哥數娴丄D鍊�
+            {
+                //   GPIOC->odt  ^= GPIO_PINS_13;// gpio_bits_reset(GPIOC,GPIO_PINS_13);
+               adc_uwRdsonUReg = ADC1->pdt1_bit.pdt1;//
+               adc_uwRdsonVReg = ADC1->pdt2_bit.pdt2;//
+               adc_uwRdsonWReg = ADC1->pdt3_bit.pdt3;//
+                /* CH4 set to "Frozen" */
+                   TMR1->cm2 &= ~0x7000;
+                /* CH4 set to "PWM mode 1" */
+                 TMR1->cm2 |= 0x6000;
+                 hw_SetRdsonSample(ADC_CHANNEL_6);
+
+            }
+            else
+            {
+
+               // GPIOB->odt  ^= GPIO_PINS_11; // gpio_bits_set(GPIOC,GPIO_PINS_13);//
+                if( (pwm_stGenOut.blSampleCalibFlag == TRUE)&&(TMR1->c4dt!=pwm_stGenCoef.uwHPWMPd))
+                {
+                    adc_uwADDMAPhase1 = ADC1->pdt1_bit.pdt1;//
+
+
+
+                    if(pwm_stGenOut.uwSingelRSampleArea == SampleA)
+                    {
+                        adc_uwIaReg = ADC1->pdt2_bit.pdt2;////
+                        GPIOC->odt  ^= GPIO_PINS_15;
+                    }
+                    if(pwm_stGenOut.uwSingelRSampleArea == SampleB)
+                    {
+                        adc_uwIbReg = ADC1->pdt3_bit.pdt3;//
+                    }
+                }
+//                /* CH4 set to "Frozen" */
+                   TMR1->cm2 &= ~0x7000;
+//                /* CH4 set to "PWM mode 2" */
+                  TMR1->cm2 |= 0x7000;
+//
+                 hw_SetIphaseSample();
+              //   adc_enable(ADC1,FALSE);
+//
+//                 adc_flag_clear(ADC1,ADC_PCCE_FLAG);//    //娓匒DC娉ㄥ叆缁勪腑鏂爣蹇�
+             }
+
+           adc_flag_clear(ADC1,ADC_PCCE_FLAG);//    //娓匒DC娉ㄥ叆缁勪腑鏂爣蹇�
+
+        }
+
+
+
+#endif
+  /* add user code end ADC1_CMP_IRQ 0 */
+  /* add user code begin ADC1_CMP_IRQ 1 */
+
+  /* add user code end ADC1_CMP_IRQ 1 */
+}
+
+/**
+  * @brief  this function handles TMR1 brake overflow trigger and hall handler.
+  * @param  none
+  * @retval none
+  */
+UWORD tmpSigRTrigZ1 = 0;
+UWORD SampUpTige = 0;
+UWORD SampDowmTige = 0;
+UWORD Samp_Step =0;
+void MOTOR_PWM_INST_IRQHandler(void) //void TMR1_BRK_OVF_TRG_HALL_IRQHandler(void)
+{
+//    ECnt++;
+  /* add user code begin TMR1_BRK_OVF_TRG_HALL_IRQ 0 */
+//if(0)//if(tmr_flag_get(TMR1,TMR_BRK_FLAG))//if (TIM_GetFlagStatus(TIM1, TIM_FLAG_Break))
+//    {
+////        tmr_flag_clear(TMR1,TMR_BRK_FLAG);//TIM_ClearFlag(TIM1, TIM_FLAG_Break);
+//
+//    }
+   // IO_CHECKIO_H();
+    switch (DL_TimerA_getPendingInterrupt(MOTOR_PWM_INST))
+    {
+
+    case DL_TIMER_IIDX_FAULT:
+        FCnt++;
+        //DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_31);
+        DL_Timer_overrideCCPOut(MOTOR_PWM_INST, DL_TIMER_FORCE_OUT_LOW, DL_TIMER_FORCE_CMPL_OUT_LOW, DL_TIMER_CC_0_INDEX);
+        DL_Timer_overrideCCPOut(MOTOR_PWM_INST, DL_TIMER_FORCE_OUT_LOW, DL_TIMER_FORCE_CMPL_OUT_LOW, DL_TIMER_CC_1_INDEX);
+         DL_Timer_overrideCCPOut(MOTOR_PWM_INST, DL_TIMER_FORCE_OUT_LOW, DL_TIMER_FORCE_CMPL_OUT_LOW, DL_TIMER_CC_2_INDEX);
+
+
+         hw_voPWMOff();
+        // IO_FTESTLED_ON(); //
+
+         alm_unCode.bit.IPMFlt = TRUE;
+
+    break;
+        case DL_TIMER_IIDX_ZERO:
+
+            ECnt++;
+
+//            if(( Samp_Step==0) ||( Samp_Step>=4))
+//                 Samp_Step=1;
+//            else
+//                Samp_Step++;
+//           switch (Samp_Step)
+//           {
+//           case 1:
+////                        adc_enable(ADC1,TRUE);
+//               // GPIOB->odt  ^= GPIO_PINS_11;
+//                    /* Set Rdson sample trigger */
+//                //TMR1->c4dt= 108;//108;//pwm_stGenOut.uwRDSONTrig;//  TIM_SetCompare4(TIM1, pwm_stGenOut.uwRDSONTrig); //pwm鏈�澶у嚡90%锛屽湪娉㈣胺3us浣嶇疆閲囬泦姣嶇嚎鐢甸樆鐢垫祦
+//                    /* ADC1 regular channel trigger */
+////                         adc_ordinary_software_trigger_enable(ADC1,TRUE);//  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
+//
+//                 tbc_voUpIsr();
+//                // DL_GPIO_togglePins(LED_PORT, LED_LED1_PIN);
+//             break;
+//             case 3:
+//                 /* ADC Rdson calibration with single resistance*/
+//                 if (TimingDelay != 0)
+//                      {
+//                          TimingDelay--;
+//                      }
+//                 if(bikespeed_stFreGetOut.uwCaputureOverflowCnt<60000)
+//                 bikespeed_stFreGetOut.uwCaputureOverflowCnt++; //
+//                 cadence_stFreGetOut.uwCaputureOverflowCnt++;
+//                 tbs_voIsr();//20241017
+////                 if(BikeLedGloFun.blBike_ForwardLedSta==TRUE)
+////                 {
+////                     BikeLedGloFun.uwBikeLight_L_PWM +=100;
+////                    if(BikeLedGloFun.uwBikeLight_L_PWM>720)
+////                     {
+////                        BikeLedGloFun.uwBikeLight_L_PWM=720;
+////                     }
+////
+////                    BikeLedGloFun.uwBikeLight_F_PWM +=100;
+////                    if(BikeLedGloFun.uwBikeLight_F_PWM>1800)
+////                    {
+////                       BikeLedGloFun.uwBikeLight_F_PWM=1800;
+////                    }
+////                    DL_TimerG_setCaptureCompareValue(PWM_2_INST, BikeLedGloFun.uwBikeLight_L_PWM, GPIO_PWM_2_C1_IDX);
+////                    DL_TimerG_setCaptureCompareValue(PWM_3_INST, BikeLedGloFun.uwBikeLight_F_PWM, GPIO_PWM_3_C1_IDX);//max=1800
+////                 }
+//             break;
+//              default:
+//
+//                break;
+//           }
+
+//         gpio_bits_reset(GPIOC,GPIO_PINS_15);//  GPIOC->odt  ^= GPIO_PINS_15;
+//            /* ADC1 regular channel trigger */
+//           adc_ordinary_software_trigger_enable(ADC1,TRUE);// ADC_SoftwareStartConvCmd(ADC1, ENABLE);
+//           tbc_voUpIsr();
+//           tmr_flag_clear(TMR1,TMR_OVF_FLAG);//  TIM_ClearFlag(TIM1, TIM_FLAG_Update);
+//           if((cp_stBikeRunInfoPara.uwLightSwitch!=0) &&(BikeLedGloFun.blBike_ForwardLedStart==TRUE))
+//                  {
+//                      if(BikeLedGloFun.blBike_ForwardLedDetErr==TRUE)
+//                      {
+//                       BikeLedGloFun.blBike_ForwardLedDetErr=FALSE ;
+//                       IO_FORWARDLED_ON(); //寮�鍓嶇伅
+//                        BikeLedGloFun.blBike_ForwardLedSta=TRUE;
+//                        BikeLedGloFun.uwlBike_ForwardLedDetErrTime++;
+//                        if(BikeLedGloFun.uwlBike_ForwardLedDetErrTime>=64)
+//                         {
+//                             BikeLedGloFun.blBike_ForwardLedStart=FALSE;
+//                         }
+//                      }
+//                  }
+//          if(( BikeLedGloFun.blBike_BackLedSta==TRUE) &&(BikeLedGloFun.blBike_BackLedStart==TRUE))
+//          {
+//              if( BikeLedGloFun.blBike_BackLedDetErr==TRUE)
+//
+//              {
+//                  BikeLedGloFun.blBike_BackLedDetErr=FALSE;
+//                  IO_BACKLED_ON();
+//                  BikeLedGloFun.uwBike_BackLedDetErrTime++;
+//                  if( BikeLedGloFun.uwBike_BackLedDetErrTime>=64)
+//                  {
+//                      BikeLedGloFun.blBike_BackLedStart=FALSE;
+//                  }
+//              }
+//          }
+
+            break;
+
+        case DL_TIMER_IIDX_LOAD:
+
+//            GCnt++;
+
+//            DL_GPIO_togglePins(LED_PORT, LED_LED2_PIN);
+//            Samp_Step++;
+////            DL_Timer_clearInterruptStatus(MOTOR_PWM_INST,GPTIMER_CPU_INT_IMASK_L_SET);//
+//              switch (Samp_Step)
+//               {
+//               case 2:
+//                  // gpio_bits_set(GPIOB,GPIO_PINS_11);
+//        //                    adc_enable(ADC1,FALSE);//
+//                   tbc_voDownIsr(); //鐢垫祦 /鐢靛帇鑾峰彇 锛岃绠楁牎鍑嗙數娴侀噰鏍风偣  TMR1->c4dt=1000;// tmpSigRTrigZ1;
+//                  // gpio_bits_reset(GPIOB,GPIO_PINS_11);
+//            #if(JSCOPE_EN!=0)
+//                  Jscope_WtiteData();
+//           #endif
+//                  break;
+//              case 4:
+//                 // GPIOC->odt  ^= GPIO_PINS_13;
+//
+//                      hw_uwPWMCmpr[0] = pwm_stGenOut.uwNewTIM1COMPR[0];
+//                       hw_uwPWMCmpr[1] = pwm_stGenOut.uwNewTIM1COMPR[1];
+//                       hw_uwPWMCmpr[2] = pwm_stGenOut.uwNewTIM1COMPR[2];
+//                       hw_uwPWMCmpr[3] = pwm_stGenOut.uwNewTIM1COMPR[3];
+//                       hw_uwPWMCmpr[4] = pwm_stGenOut.uwNewTIM1COMPR[4];
+//                       hw_uwPWMCmpr[5] = pwm_stGenOut.uwNewTIM1COMPR[5];
+//                       /* Enable PWM DMA,  hw_uwPWMCmpr[0/1/2] at underflow update */
+//        //                        tmr_dma_request_enable(TMR1,TMR_OVERFLOW_DMA_REQUEST,TRUE);// TIM_DMACmd(TIM1, TIM_DMA_Update, ENABLE);
+//        //                       dma_channel_enable(DMA1_CHANNEL5,TRUE); //DMA_Cmd(DMA1_Channel5, ENABLE);
+//
+////                       pwm_stGenOut.uwNewTIM1COMPR[0]=900 ;
+////                       pwm_stGenOut.uwNewTIM1COMPR[1]=1250;
+////                       pwm_stGenOut.uwNewTIM1COMPR[2]=450 ;
+//
+//
+//                       TIMER_CC_A_INDEX(pwm_stGenOut.uwNewTIM1COMPR[0]);//     DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[0], DL_TIMER_CC_0_INDEX);//A
+//                       TIMER_CC_B_INDEX(pwm_stGenOut.uwNewTIM1COMPR[1]);// DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[1], DL_TIMER_CC_2_INDEX); //B
+//                       TIMER_CC_C_INDEX(pwm_stGenOut.uwNewTIM1COMPR[2]);// DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[2], DL_TIMER_CC_1_INDEX);//C
+//
+//        //                       adc_enable(ADC1,TRUE);//
+//                         DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST,2, DL_TIMER_CC_4_INDEX); //采样点设置
+//                 break;
+//                  default:
+//
+//                    break;
+//               }
+
+            break;
+
+
+        default:
+            break;
+
+    }
+  //  IO_CHECKIO_L();
+//    IO_CHECKIO_L();
+////if(DL_TimerA_getPendingInterrupt(MOTOR_PWM_INST) & DL_TIMER_IIDX_ZERO )
+//  {
+//  //  GPIOC->scr = GPIO_PINS_13;  // GPIOC->odt  ^= GPIO_PINS_13;
+//
+// #if(SampleModelSelect == DOUBLERESISTANCE)
+//    // ULONG OVtimeCnt = 0;
+////     if( (((uint8_t)TMR1->ctrl1) & 0x10) ==0) //  if ((TIM1->CR1 & TIM_CR1_DIR) == 0) // When Counting Up
+//        if(DL_TimerA_getPendingInterrupt(MOTOR_PWM_INST) & DL_TIMER_IIDX_ZERO )//   if( (((uint8_t)DL_Timer_getTimerCount(MOTOR_PWM_INST)) & 0x10) ==0) //  if ((TIM1->CR1 & TIM_CR1_DIR) == 0) // When Counting Up
+//        {
+//
+//        DL_Timer_clearInterruptStatus(MOTOR_PWM_INST,GPTIMER_CPU_INT_IMASK_Z_SET);//         tmr_flag_clear(TMR1,TMR_OVF_FLAG);//
+//                  // gpio_bits_reset(GPIOC,GPIO_PINS_15);
+//                    if(( Samp_Step==0) ||( Samp_Step>=4))
+//                         Samp_Step=1;
+//                    else
+//                        Samp_Step++;
+//                   switch (Samp_Step)
+//                   {
+//                   case 1:
+////                        adc_enable(ADC1,TRUE);
+//                       // GPIOB->odt  ^= GPIO_PINS_11;
+//                            /* Set Rdson sample trigger */
+//                        //TMR1->c4dt= 108;//108;//pwm_stGenOut.uwRDSONTrig;//  TIM_SetCompare4(TIM1, pwm_stGenOut.uwRDSONTrig); //pwm鏈�澶у嚡90%锛屽湪娉㈣胺3us浣嶇疆閲囬泦姣嶇嚎鐢甸樆鐢垫祦
+//                            /* ADC1 regular channel trigger */
+////                         adc_ordinary_software_trigger_enable(ADC1,TRUE);//  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
+//
+//                         tbc_voUpIsr();
+//
+//                     break;
+//                     case 3:
+//                         /* ADC Rdson calibration with single resistance*/
+//                         if (TimingDelay != 0)
+//                              {
+//                                  TimingDelay--;
+//                              }
+//                     break;
+//                      default:
+//
+//                        break;
+//                   }
+//
+////         gpio_bits_reset(GPIOC,GPIO_PINS_15);//  GPIOC->odt  ^= GPIO_PINS_15;
+////            /* ADC1 regular channel trigger */
+////           adc_ordinary_software_trigger_enable(ADC1,TRUE);// ADC_SoftwareStartConvCmd(ADC1, ENABLE);
+////           tbc_voUpIsr();
+////           tmr_flag_clear(TMR1,TMR_OVF_FLAG);//  TIM_ClearFlag(TIM1, TIM_FLAG_Update);
+//           if((cp_stBikeRunInfoPara.uwLightSwitch!=0) &&(BikeLedGloFun.blBike_ForwardLedStart==TRUE))
+//                  {
+//                      if(BikeLedGloFun.blBike_ForwardLedDetErr==TRUE)
+//                      {
+//                       BikeLedGloFun.blBike_ForwardLedDetErr=FALSE ;
+//                       IO_FORWARDLED_ON(); //寮�鍓嶇伅
+//                        BikeLedGloFun.blBike_ForwardLedSta=TRUE;
+//                        BikeLedGloFun.uwlBike_ForwardLedDetErrTime++;
+//                        if(BikeLedGloFun.uwlBike_ForwardLedDetErrTime>=64)
+//                         {
+//                             BikeLedGloFun.blBike_ForwardLedStart=FALSE;
+//                         }
+//                      }
+//                  }
+//          if(( BikeLedGloFun.blBike_BackLedSta==TRUE) &&(BikeLedGloFun.blBike_BackLedStart==TRUE))
+//          {
+//              if( BikeLedGloFun.blBike_BackLedDetErr==TRUE)
+//
+//              {
+//                  BikeLedGloFun.blBike_BackLedDetErr=FALSE;
+//                  IO_BACKLED_ON();
+//                  BikeLedGloFun.uwBike_BackLedDetErrTime++;
+//                  if( BikeLedGloFun.uwBike_BackLedDetErrTime>=64)
+//                  {
+//                      BikeLedGloFun.blBike_BackLedStart=FALSE;
+//                  }
+//              }
+//          }
+//        }
+//        else if(DL_TimerA_getPendingInterrupt(MOTOR_PWM_INST) & DL_TIMER_IIDX_LOAD )
+//        {
+//              //  gpio_bits_set(GPIOC,GPIO_PINS_15);
+////            if(DL_TimerA_getPendingInterrupt(MOTOR_PWM_INST) & DL_TIMER_IIDX_LOAD )//            DL_Timer_clearInterruptStatus(MOTOR_PWM_INST,GPTIMER_CPU_INT_IMASK_L_SET);//               tmr_flag_clear(TMR1,TMR_OVF_FLAG);//
+//               //---------------------------
+//                    Samp_Step++;
+//            DL_Timer_clearInterruptStatus(MOTOR_PWM_INST,GPTIMER_CPU_INT_IMASK_L_SET);//
+//              switch (Samp_Step)
+//               {
+//               case 2:
+//                  // gpio_bits_set(GPIOB,GPIO_PINS_11);
+////                    adc_enable(ADC1,FALSE);//
+//                   tbc_voDownIsr(); //鐢垫祦 /鐢靛帇鑾峰彇 锛岃绠楁牎鍑嗙數娴侀噰鏍风偣  TMR1->c4dt=1000;// tmpSigRTrigZ1;
+//                  // gpio_bits_reset(GPIOB,GPIO_PINS_11);
+//            #if(JSCOPE_EN!=0)
+//                  Jscope_WtiteData();
+//           #endif
+//                  break;
+//              case 4:
+//                 // GPIOC->odt  ^= GPIO_PINS_13;
+//
+//                      hw_uwPWMCmpr[0] = pwm_stGenOut.uwNewTIM1COMPR[0];
+//                       hw_uwPWMCmpr[1] = pwm_stGenOut.uwNewTIM1COMPR[1];
+//                       hw_uwPWMCmpr[2] = pwm_stGenOut.uwNewTIM1COMPR[2];
+//                       hw_uwPWMCmpr[3] = pwm_stGenOut.uwNewTIM1COMPR[3];
+//                       hw_uwPWMCmpr[4] = pwm_stGenOut.uwNewTIM1COMPR[4];
+//                       hw_uwPWMCmpr[5] = pwm_stGenOut.uwNewTIM1COMPR[5];
+//                       /* Enable PWM DMA,  hw_uwPWMCmpr[0/1/2] at underflow update */
+////                        tmr_dma_request_enable(TMR1,TMR_OVERFLOW_DMA_REQUEST,TRUE);// TIM_DMACmd(TIM1, TIM_DMA_Update, ENABLE);
+////                       dma_channel_enable(DMA1_CHANNEL5,TRUE); //DMA_Cmd(DMA1_Channel5, ENABLE);
+//
+//                       DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[1], DL_TIMER_CC_0_INDEX); //B
+//                        DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[2], DL_TIMER_CC_2_INDEX);//C
+//                        DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[0], DL_TIMER_CC_3_INDEX);//A
+////                       adc_enable(ADC1,TRUE);//
+//                 break;
+//                  default:
+//
+//                    break;
+//               }
+//
+//            //   adc_enable(ADC1,TRUE);// ADC_Cmd(ADC1, ENABLE);
+////            gpio_bits_set(GPIOC,GPIO_PINS_15);
+////          tmr_counter_value_set(TMR6,0);    // TIM4->CNT = 0;
+////           adc_enable(ADC1,FALSE);//  ADC_Cmd(ADC1, DISABLE);    //鍏抽棴ADC瑙勫垯缁�
+////            tbc_voDownIsr();
+////            while ((tmr_counter_value_get(TMR6) < (HW_PWM_PERIOD)) && (OVtimeCnt < ((HW_HHPWM_PERIOD * FPWM_HZ))))  //36M  clk
+////            {
+////                OVtimeCnt++;
+////            };
+////
+////            /* Load PWM Compare value */
+////            hw_uwPWMCmpr[0] = pwm_stGenOut.uwNewTIM1COMPR[0];
+////            hw_uwPWMCmpr[1] = pwm_stGenOut.uwNewTIM1COMPR[1];
+////            hw_uwPWMCmpr[2] = pwm_stGenOut.uwNewTIM1COMPR[2];
+////            hw_uwPWMCmpr[3] = pwm_stGenOut.uwNewTIM1COMPR[3];
+////            hw_uwPWMCmpr[4] = pwm_stGenOut.uwNewTIM1COMPR[4];
+////            hw_uwPWMCmpr[5] = pwm_stGenOut.uwNewTIM1COMPR[5];
+////            /* Enable PWM DMA,  hw_uwPWMCmpr[0/1/2] at underflow update */
+////           tmr_dma_request_enable(TMR1,TMR_OVERFLOW_DMA_REQUEST,TRUE);// TIM_DMACmd(TIM1, TIM_DMA_Update, ENABLE);
+////           dma_channel_enable(DMA1_CHANNEL5,TRUE); //DMA_Cmd(DMA1_Channel5, ENABLE);
+////
+////            adc_enable(ADC1,TRUE);// ADC_Cmd(ADC1, ENABLE);
+////
+////          tmr_flag_clear(TMR1,TMR_OVF_FLAG);//  TIM_ClearFlag(TIM1, TIM_FLAG_Update);
+//        }
+//        else
+//        {
+//            if(DL_TimerA_getPendingInterrupt(MOTOR_PWM_INST) & DL_TIMER_IIDX_FAULT )
+//            {
+//                DL_Timer_clearInterruptStatus(MOTOR_PWM_INST,GPTIMER_CPU_INT_IMASK_F_SET);//
+//                GCnt++;
+//                hw_voPWMOff();
+//            }
+//
+//        }
+//
+//
+//#elif(SampleModelSelect == COMBINATION)
+//
+//      //  ULONG OVtimeCnt = 0;
+//
+//       if( (((uint8_t)TMR1->ctrl1) & 0x10) ==0)// When Counting Up 璁℃暟鍣ㄥ悜涓婅鏁帮紝鐜板湪娉㈣胺
+//        {
+//           tmr_flag_clear(TMR1,TMR_OVF_FLAG);//
+//          // gpio_bits_reset(GPIOC,GPIO_PINS_15);
+//            if(( Samp_Step==0) ||( Samp_Step>=4))
+//                 Samp_Step=1;
+//            else
+//                Samp_Step++;
+//           switch (Samp_Step)
+//           {
+//           case 1:
+//                adc_enable(ADC1,TRUE);
+//               // GPIOB->odt  ^= GPIO_PINS_11;
+//                    /* Set Rdson sample trigger */
+//                TMR1->c4dt= 108;//108;//pwm_stGenOut.uwRDSONTrig;//  TIM_SetCompare4(TIM1, pwm_stGenOut.uwRDSONTrig); //pwm鏈�澶у嚡90%锛屽湪娉㈣胺3us浣嶇疆閲囬泦姣嶇嚎鐢甸樆鐢垫祦
+//                    /* ADC1 regular channel trigger */
+//                 adc_ordinary_software_trigger_enable(ADC1,TRUE);//  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
+//
+//                 tbc_voUpIsr();
+//
+//             break;
+//             case 3:
+//                 /* ADC Rdson calibration with single resistance*/
+//
+//             break;
+//              default:
+//
+//                break;
+//           }
+//
+//
+//    #if(JSCOPE_EN!=0)
+//            Jscope_WtiteData();
+//    #endif
+//        }
+//       else  //鍚戜笅璁℃暟锛屾尝宄�
+//         {
+//         //  gpio_bits_set(GPIOC,GPIO_PINS_15);
+//           tmr_flag_clear(TMR1,TMR_OVF_FLAG);//
+//           //---------------------------
+//                Samp_Step++;
+//
+//          switch (Samp_Step)
+//           {
+//           case 2:
+//              // gpio_bits_set(GPIOB,GPIO_PINS_11);
+//               adc_enable(ADC1,FALSE);//
+//               tbc_voDownIsr(); //鐢垫祦 /鐢靛帇鑾峰彇 锛岃绠楁牎鍑嗙數娴侀噰鏍风偣  TMR1->c4dt=1000;// tmpSigRTrigZ1;
+//              // gpio_bits_reset(GPIOB,GPIO_PINS_11);
+//              break;
+//          case 4:
+//             // GPIOC->odt  ^= GPIO_PINS_13;
+//              adc_enable(ADC1,TRUE);//
+////              if(tmpSigRTrigZ1>700)
+////              {
+////                  TMR1->c4dt=  tmpSigRTrigZ1;///TIM_SetCompare4(TIM1, tmpSigRTrigZ1);
+////              }
+////              else
+////              {
+////                  TMR1->c4dt= 1500;
+////              }
+//              TMR1->c4dt=  tmpSigRTrigZ1;
+//              tmpSigRTrigZ1 = pwm_stGenOut.uwSigRTrig;
+//                  hw_uwPWMCmpr[0] = pwm_stGenOut.uwNewTIM1COMPR[0];
+//                   hw_uwPWMCmpr[1] = pwm_stGenOut.uwNewTIM1COMPR[1];
+//                   hw_uwPWMCmpr[2] = pwm_stGenOut.uwNewTIM1COMPR[2];
+//                   hw_uwPWMCmpr[3] = pwm_stGenOut.uwNewTIM1COMPR[3];
+//                   hw_uwPWMCmpr[4] = pwm_stGenOut.uwNewTIM1COMPR[4];
+//                   hw_uwPWMCmpr[5] = pwm_stGenOut.uwNewTIM1COMPR[5];
+//                   /* Enable PWM DMA,  hw_uwPWMCmpr[0/1/2] at underflow update */
+//                    tmr_dma_request_enable(TMR1,TMR_OVERFLOW_DMA_REQUEST,TRUE);// TIM_DMACmd(TIM1, TIM_DMA_Update, ENABLE);
+//                   dma_channel_enable(DMA1_CHANNEL5,TRUE); //DMA_Cmd(DMA1_Channel5, ENABLE);
+//
+//             break;
+//              default:
+//
+//                break;
+//           }
+//
+//
+//           //---------------------------
+//
+//
+////                tmr_counter_value_set(TMR6,0); //  TIM4->CNT = 0;
+////                gpio_bits_set(GPIOC,GPIO_PINS_15);
+////                adc_enable(ADC1,FALSE);//
+////
+////                tbc_voDownIsr(); //鐢垫祦 /鐢靛帇鑾峰彇 锛岃绠楁牎鍑嗙數娴侀噰鏍风偣
+////
+////                while ((tmr_counter_value_get(TMR6) < (HW_PWM_PERIOD)) && (OVtimeCnt < ((HW_HHPWM_PERIOD * FPWM_HZ))))  //36M  clk
+////                  {
+////                     OVtimeCnt++;
+////                  };
+////
+////                /* Set Ibus sample trigger */
+////                adc_enable(ADC1,TRUE);//   ADC_Cmd(ADC2, ENABLE);
+////                 TMR1->c4dt= 500;// tmpSigRTrigZ1;///TIM_SetCompare4(TIM1, tmpSigRTrigZ1);
+////                tmpSigRTrigZ1 = pwm_stGenOut.uwSigRTrig;
+////                /* Load PWM Compare value */
+////                hw_uwPWMCmpr[0] = pwm_stGenOut.uwNewTIM1COMPR[0];
+////                hw_uwPWMCmpr[1] = pwm_stGenOut.uwNewTIM1COMPR[1];
+////                hw_uwPWMCmpr[2] = pwm_stGenOut.uwNewTIM1COMPR[2];
+////                hw_uwPWMCmpr[3] = pwm_stGenOut.uwNewTIM1COMPR[3];
+////                hw_uwPWMCmpr[4] = pwm_stGenOut.uwNewTIM1COMPR[4];
+////                hw_uwPWMCmpr[5] = pwm_stGenOut.uwNewTIM1COMPR[5];
+////                /* Enable PWM DMA,  hw_uwPWMCmpr[0/1/2] at underflow update */
+////                 tmr_dma_request_enable(TMR1,TMR_OVERFLOW_DMA_REQUEST,TRUE);// TIM_DMACmd(TIM1, TIM_DMA_Update, ENABLE);
+////                dma_channel_enable(DMA1_CHANNEL5,TRUE); //DMA_Cmd(DMA1_Channel5, ENABLE);
+////
+////                adc_enable(ADC1,TRUE);//
+//
+//
+//            }
+//
+//
+//#endif
+//    }
+
+        
+   // BrkFlg++;
+  /* add user code end TMR1_BRK_OVF_TRG_HALL_IRQ 0 */
+  /* add user code begin TMR1_BRK_OVF_TRG_HALL_IRQ 1 */
+
+  /* add user code end TMR1_BRK_OVF_TRG_HALL_IRQ 1 */
+}
+
+/**
+  * @brief  this function handles TMR1 channel handler.
+  * @param  none
+  * @retval none
+  */
+//void TMR1_CH_IRQHandler(void)
+//{
+//  /* add user code begin TMR1_CH_IRQ 0 */
+// // if(tmr_interrupt_flag_get(TMR1,TMR_OVF_FLAG))
+// // {
+////    if(tmr_cnt_dir_get(TMR1))
+////    {
+////      gpio_bits_set(Break_GPIO_PORT,Break_PIN);
+////    }else{
+////      gpio_bits_reset(Break_GPIO_PORT,Break_PIN);
+////    }
+//    //Break_GPIO_PORT->odt ^= Break_PIN;
+// // }
+//
+//
+//  /* add user code end TMR1_CH_IRQ 0 */
+//  /* add user code begin TMR1_CH_IRQ 1 */
+//
+//  /* add user code end TMR1_CH_IRQ 1 */
+//}
+
+
+/**
+  * @brief  this function handles TMR3 handler.
+  * @param  none
+  * @retval none
+  */
+void GROUP1_IRQHandler(void) //void TMR3_GLOBAL_IRQHandler(void)
+{
+
+//    switch (DL_COMP_getPendingInterrupt(COMP_0_INST)) {  // over Cur
+//                 case DL_COMP_IIDX_OUTPUT_EDGE:
+//
+//                     hw_voPWMOff();
+//                //     IO_FTESTLED_ON();
+//
+//                     alm_unCode.bit.IPMFlt = TRUE;
+//
+//                     break;
+//                 case DL_COMP_IIDX_OUTPUT_EDGE_INV:
+//
+//                     break;
+//                 default:
+//                     break;
+//             }
+//F_LED
+    switch (DL_COMP_getPendingInterrupt(COMP_FLEDCHECK_INST)) {
+           case DL_COMP_IIDX_OUTPUT_EDGE:
+           if(BikeLedCheck_F.uwBike_LedFun!=1)
+              {
+               if(BikeLedCheck_F.uwBike_OpenLedEn!=0)
+                   {
+                       DL_TimerG_setCaptureCompareValue(PWM_F_INST, 0, GPIO_PWM_F_C1_IDX);//max=2304
+                   }
+                   else
+                   {
+                       if (BikeLedCheck_F.blBike_LedSta == TRUE)
+                       {
+                           if(BikeLedCheck_F.uwBike_OpenPreTime<=2)
+                           {
+                               BikeLedCheck_F.uwBike_OpenPreTime=2;
+                           //    CMPF++;
+                               BikeLedCheck_F.uwBikeLight_PWM=LIGHT_SECTPWM;//LIGHT_SECTPWM;
+                               DL_TimerG_setCaptureCompareValue(PWM_F_INST, BikeLedCheck_F.uwBikeLight_PWM, GPIO_PWM_F_C1_IDX);//max=2304
+                           }
+                       }
+
+                   }
+                   if (BikeLedCheck_F.blBike_LedSta == TRUE)
+                   {
+                       BikeLedCheck_F.blBike_LedCurErr=TRUE;
+                   }
+              }
+                     //  CHMPF++;
+                   break;
+               case DL_COMP_IIDX_OUTPUT_EDGE_INV:
+                   if((BikeLedCheck_F.uwBike_OpenLedEn!=0)&&(BikeLedCheck_F.uwBike_LedFun!=1))
+                      {
+                       DL_TimerG_stopCounter(PWM_F_INST);
+                         BikeLedCheck_F.uwBikeLight_PWM=0;
+                         DL_TimerG_setCaptureCompareValue(PWM_F_INST, 0, GPIO_PWM_F_C1_IDX);//max=2304
+                      }
+                  // CLMPF++;
+                   break;
+               default:
+                   break;
+           }
+    uint32_t gpioA = DL_GPIO_getEnabledInterruptStatus(
+            GPIOA,DL_GPIO_PIN_8 | DL_GPIO_PIN_3    );
+
+
+     uint32_t gpioB = DL_GPIO_getEnabledInterruptStatus(
+         GPIOB, DL_GPIO_PIN_3 | DL_GPIO_PIN_2| DL_GPIO_PIN_8| DL_GPIO_PIN_15);
+
+//B_LED
+
+    if (((gpioB & DL_GPIO_PIN_15) ==  DL_GPIO_PIN_15) &&(BikeLedCheck_B.uwBike_LedFun!=1))
+    {
+        if(BikeLedCheck_B.uwBike_OpenLedEn!=0)
+         {
+            // DL_TimerG_stopCounter(PWM_B_L_INST);
+            DL_Timer_overrideCCPOut(PWM_B_L_INST, DL_TIMER_FORCE_OUT_LOW, DL_TIMER_FORCE_CMPL_OUT_LOW, GPIO_PWM_B_L_C1_IDX);
+            BikeLedCheck_B.uwBikeLight_PWM=0;
+              DL_TimerG_setCaptureCompareValue(PWM_B_L_INST, 0, GPIO_PWM_B_L_C1_IDX);//max=2304
+               CLMPF++;
+         }
+         else
+         {
+             if( BikeLedCheck_B.blBike_LedSta==TRUE)
+             {
+             if(BikeLedCheck_B.uwBike_OpenPreTime<=2)
+             {
+                 BikeLedCheck_B.uwBike_OpenPreTime=2;
+                  CMPF++;
+                 BikeLedCheck_B.uwBikeLight_PWM=LIGHT_SECTPWM;//LIGHT_SECTPWM;
+                 DL_TimerG_setCaptureCompareValue(PWM_B_L_INST, BikeLedCheck_B.uwBikeLight_PWM, GPIO_PWM_B_L_C1_IDX);//max=2304
+             }
+             }
+
+         }
+        if( BikeLedCheck_B.blBike_LedSta==TRUE)
+         BikeLedCheck_B.blBike_LedCurErr=TRUE;
+
+           CHMPF++;
+
+
+            DL_GPIO_clearInterruptStatus(GPIOB, DL_GPIO_PIN_15);
+    }
+
+//R_LED
+     if (((gpioB & DL_GPIO_PIN_8) ==  DL_GPIO_PIN_8)&&(BikeLedCheck_R.uwBike_LedFun!=1))
+          {
+             if(BikeLedCheck_R.uwBike_OpenLedEn!=0)
+                  {
+                      DL_TimerG_stopCounter(PWM_R_INST);
+                      BikeLedCheck_R.uwBikeLight_PWM=0;
+                       DL_TimerG_setCaptureCompareValue(PWM_R_INST, 0, GPIO_PWM_R_C1_IDX);//max=2304
+                     //  CLMPF++;
+                  }
+                  else
+                  {
+                    if(BikeLedCheck_R.blBike_LedSta==TRUE)
+                    {
+                      if(BikeLedCheck_R.uwBike_OpenPreTime<=2)
+                      {
+                          BikeLedCheck_R.uwBike_OpenPreTime=2;
+                        //  CMPF++;
+                          BikeLedCheck_R.uwBikeLight_PWM=LIGHT_SECTPWM;//LIGHT_SECTPWM;
+                          DL_TimerG_setCaptureCompareValue(PWM_R_INST, BikeLedCheck_R.uwBikeLight_PWM, GPIO_PWM_R_C1_IDX);//max=2304
+                      }
+                    }
+
+                  }
+             if(BikeLedCheck_R.blBike_LedSta==TRUE)
+              BikeLedCheck_R.blBike_LedCurErr=TRUE;
+
+            //  CHMPF++;
+              DL_GPIO_clearInterruptStatus(GPIOB, DL_GPIO_PIN_8);
+          }
+//-L-LED
+     if (((gpioA & DL_GPIO_PIN_3) ==  DL_GPIO_PIN_3) &&(BikeLedCheck_L.uwBike_LedFun!=1))
+         {
+             if(BikeLedCheck_L.uwBike_OpenLedEn!=0)
+              {
+                //  DL_TimerG_stopCounter(PWM_B_L_INST);
+                 DL_Timer_overrideCCPOut(PWM_B_L_INST, DL_TIMER_FORCE_OUT_LOW, DL_TIMER_FORCE_CMPL_OUT_LOW, GPIO_PWM_B_L_C0_IDX);
+                  BikeLedCheck_L.uwBikeLight_PWM=0;
+                   DL_TimerG_setCaptureCompareValue(PWM_B_L_INST, 0, GPIO_PWM_B_L_C0_IDX);//max=2304
+                  // CLMPF++;
+              }
+              else
+              {
+                  if(BikeLedCheck_L.blBike_LedSta==TRUE)
+                  {
+                  if(BikeLedCheck_L.uwBike_OpenPreTime<=2)
+                  {
+                      BikeLedCheck_L.uwBike_OpenPreTime=2;
+                      CMPF++;
+                      BikeLedCheck_L.uwBikeLight_PWM=LIGHT_SECTPWM;//LIGHT_SECTPWM;
+                      DL_TimerG_setCaptureCompareValue(PWM_B_L_INST, BikeLedCheck_L.uwBikeLight_PWM, GPIO_PWM_B_L_C0_IDX);//max=2304
+                  }
+                  }
+
+              }
+             if(BikeLedCheck_L.blBike_LedSta==TRUE)
+                 BikeLedCheck_L.blBike_LedCurErr=TRUE;
+
+        //  CHMPF++;
+
+             DL_GPIO_clearInterruptStatus(GPIOA, DL_GPIO_PIN_3);
+         }
+
+  /* add user code begin TMR3_GLOBAL_IRQ 0 */
+ if( ((gpioA & DL_GPIO_PIN_8) ==  DL_GPIO_PIN_8) || ((gpioB & DL_GPIO_PIN_3) ==  DL_GPIO_PIN_3) ||((gpioB & DL_GPIO_PIN_2) ==  DL_GPIO_PIN_2))
+   {
+       HGcnt++;
+       switchhall_voTim3Int();
+       DL_GPIO_clearInterruptStatus(GPIOA, DL_GPIO_PIN_8);
+       DL_GPIO_clearInterruptStatus(GPIOB, DL_GPIO_PIN_3);
+       DL_GPIO_clearInterruptStatus(GPIOB, DL_GPIO_PIN_2);
+
+
+   }
+
+
+
+//      if ((gpioA & DL_GPIO_PIN_26) ==  DL_GPIO_PIN_26)
+//      {
+//          DL_GPIO_clearInterruptStatus(GPIOA, DL_GPIO_PIN_26);
+//      }
+
+
+
+
+
+
+
+  /* add user code end TMR3_GLOBAL_IRQ 0 */
+  /* add user code begin TMR3_GLOBAL_IRQ 1 */
+
+  /* add user code end TMR3_GLOBAL_IRQ 1 */
+
+   /*
+    * Get the pending interrupt for the GPIOA port and store for
+    * comparisons later
+    */
+}
+
+/**
+  * @brief  this function handles TMR16 handler.
+  * @param  none
+  * @retval none
+  */
+//void SPEED_INST_IRQHandler(void) //void TMR16_GLOBAL_IRQHandler(void)
+//{
+//
+//  /* add user code begin TMR16_GLOBAL_IRQ 0 */
+////Bike Speed
+//   UWORD uwIntSource = 0;
+//
+//
+//   switch (DL_TimerG_getPendingInterrupt(SPEED_INST))
+//   {
+//       case DL_TIMER_IIDX_CC0_DN:
+//           SPEED_edgeCapture = DL_Timer_getCaptureCompareValue(SPEED_INST, DL_TIMER_CC_0_INDEX);
+//
+////           tmr_flag_clear(TMR16,TMR_C1_FLAG);//TIM_ClearFlag(TIM2, TIM_FLAG_CC4);
+//                   uwIntSource = 3;
+//                  // tempIO2 = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11);
+////                   if(gpio_input_data_bit_read(GPIOB,GPIO_PINS_8))//(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11))
+//                   {
+////                      tmr_output_channel_polarity_set(TMR16,TMR_SELECT_CHANNEL_1,TMR_POLARITY_ACTIVE_LOW); // TIM_OC4PolarityConfig(TIM2,TIM_ICPolarity_Falling);
+//                   }
+////                   else
+//                   {
+////                      tmr_output_channel_polarity_set(TMR16,TMR_SELECT_CHANNEL_1,TMR_POLARITY_ACTIVE_HIGH);  // TIM_OC4PolarityConfig(TIM2,TIM_ICPolarity_Rising);
+//                   }
+//
+//                 //  bikespeed_voBikeSpeedCal(uwIntSource);
+//
+//           break;
+//       case DL_TIMER_IIDX_ZERO:
+//           uwIntSource = 1;
+//           /* TBS interrupt */
+//          // tbs_voIsr();
+//
+//           /* CadenceCal and BikespeedCal */
+//
+//          // bikespeed_voBikeSpeedCal(uwIntSource);
+//           DCnt++;
+//           break;
+//       default:
+//           break;
+//   }
+//
+//
+////   if(tmr_flag_get(TMR16,TMR_OVF_FLAG))// if (TIM_GetFlagStatus(TIM2, TIM_FLAG_Update))
+////    {
+////       tmr_flag_clear(TMR16,TMR_OVF_FLAG);//
+////        uwIntSource = 1;
+////        /* TBS interrupt */
+////        tbs_voIsr();
+////
+////        /* CadenceCal and BikespeedCal */
+////
+////        bikespeed_voBikeSpeedCal(uwIntSource);
+////
+////    }
+////     else if (tmr_flag_get(TMR16,TMR_C1_FLAG))//(TIM_GetFlagStatus(TIM2, TIM_FLAG_CC4))
+////    {
+////       tmr_flag_clear(TMR16,TMR_C1_FLAG);//TIM_ClearFlag(TIM2, TIM_FLAG_CC4);
+////        uwIntSource = 3;
+////       // tempIO2 = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11);
+////        if(gpio_input_data_bit_read(GPIOB,GPIO_PINS_8))//(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11))
+////        {
+////           tmr_output_channel_polarity_set(TMR16,TMR_SELECT_CHANNEL_1,TMR_POLARITY_ACTIVE_LOW); // TIM_OC4PolarityConfig(TIM2,TIM_ICPolarity_Falling);
+////        }
+////        else
+////        {
+////           tmr_output_channel_polarity_set(TMR16,TMR_SELECT_CHANNEL_1,TMR_POLARITY_ACTIVE_HIGH);  // TIM_OC4PolarityConfig(TIM2,TIM_ICPolarity_Rising);
+////        }
+////
+////        bikespeed_voBikeSpeedCal(uwIntSource);
+////   }
+//  /* add user code end TMR16_GLOBAL_IRQ 0 */
+//  /* add user code begin TMR16_GLOBAL_IRQ 1 */
+//
+//  /* add user code end TMR16_GLOBAL_IRQ 1 */
+//}
+
+/**
+  * @brief  this function handles TMR17 handler.
+  * @param  none
+  * @retval none
+  */
+//void TAPIN_INST_IRQHandler(void)//void TMR17_GLOBAL_IRQHandler(void)
+//{
+//  /* add user code begin TMR17_GLOBAL_IRQ 0 */
+////韪忛牷
+//UWORD uwIntSource = 0;
+//
+//
+//    switch (DL_TimerG_getPendingInterrupt(TAPIN_INST))
+//    {
+//        case DL_TIMERG_IIDX_CC0_DN:
+//            TIPIN_edgeCapture = DL_Timer_getCaptureCompareValue(TAPIN_INST, DL_TIMER_CC_0_INDEX);
+//            uwIntSource = 2;
+//           // tempIO1 = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10);
+//    //        if(gpio_input_data_bit_read(GPIOB,GPIO_PINS_9))//(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10))
+//    //        {
+//    //           tmr_output_channel_polarity_set(TMR17,TMR_SELECT_CHANNEL_1,TMR_POLARITY_ACTIVE_LOW); //  TIM_OC3PolarityConfig(TIM2,TIM_ICPolarity_Falling);
+//    //        }
+//    //        else
+//    //        {
+//    //          tmr_output_channel_polarity_set(TMR17,TMR_SELECT_CHANNEL_1,TMR_POLARITY_ACTIVE_HIGH); //   TIM_OC3PolarityConfig(TIM2,TIM_ICPolarity_Rising);
+//    //        }
+//            cadence_voCadenceCal(uwIntSource);
+//
+//            break;
+//        case DL_TIMER_IIDX_ZERO:
+//            uwIntSource = 1;
+//            /* TBS interrupt */
+//           // tbs_voIsr();
+//
+//            /* CadenceCal and BikespeedCal */
+//            cadence_voCadenceCal(uwIntSource);
+//            ECnt++;
+//            break;
+//        default:
+//            break;
+//    }
+//
+////    if(tmr_flag_get(TMR17,TMR_OVF_FLAG))// if (TIM_GetFlagStatus(TIM2, TIM_FLAG_Update))
+////    {
+////        uwIntSource = 1;
+////        /* TBS interrupt */
+////       // tbs_voIsr();
+////
+////        /* CadenceCal and BikespeedCal */
+////        cadence_voCadenceCal(uwIntSource);
+////
+////       tmr_flag_clear(TMR17,TMR_OVF_FLAG);// TIM_ClearFlag(TIM2, TIM_FLAG_Update);
+////    }
+////    else if (tmr_flag_get(TMR17,TMR_C1_FLAG))//(TIM_GetFlagStatus(TIM2, TIM_FLAG_CC3))
+////    {
+////        uwIntSource = 2;
+////       // tempIO1 = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10);
+//////        if(gpio_input_data_bit_read(GPIOB,GPIO_PINS_9))//(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10))
+//////        {
+//////           tmr_output_channel_polarity_set(TMR17,TMR_SELECT_CHANNEL_1,TMR_POLARITY_ACTIVE_LOW); //  TIM_OC3PolarityConfig(TIM2,TIM_ICPolarity_Falling);
+//////        }
+//////        else
+//////        {
+//////          tmr_output_channel_polarity_set(TMR17,TMR_SELECT_CHANNEL_1,TMR_POLARITY_ACTIVE_HIGH); //   TIM_OC3PolarityConfig(TIM2,TIM_ICPolarity_Rising);
+//////        }
+////        cadence_voCadenceCal(uwIntSource);
+////         tmr_flag_clear(TMR17,TMR_C1_FLAG);//TIM_ClearFlag(TIM2, TIM_FLAG_CC3);
+////    }
+////
+////  /* add user code end TMR17_GLOBAL_IRQ 0 */
+////  /* add user code begin TMR17_GLOBAL_IRQ 1 */
+////
+////  /* add user code end TMR17_GLOBAL_IRQ 1 */
+//}
+
+/**
+  * @brief  this function handles USART1 handler.
+  * @param  none
+  * @retval none
+  */
+void UART0_IRQHandler(void)
+{
+ //   USARTx_Rx_IRQ(&UART_RxBuff_Struct_OBC);
+ //   USARTx_Tx_IRQ(&UART_TxBuff_Struct_OBC);
+
+    USARTx_RxTX_IRQ(&UART_RxBuff_Struct_OBC,&UART_TxBuff_Struct_OBC,&stUSART_FrameBuf_OBC);
+
+}
+//
+///**
+//  * @brief  this function handles USART2 handler.
+//  * @param  none
+//  * @retval none
+//  */
+//void UART_BAT_INST_IRQHandler(void)
+//{
+//    USARTx_Rx_IRQ(&UART_RxBuff_Struct_BMS);
+//    USARTx_Tx_IRQ(&UART_TxBuff_Struct_BMS);
+//}
+//
+ULONG id = 0;
+void MCAN0_INST_IRQHandler(void)
+{
+    volatile ULONG gInterruptLine1Status = 0;
+    DL_MCAN_RxFIFOStatus rxFS;
+
+    switch (DL_MCAN_getPendingInterrupt(MCAN0_INST)) {
+            case DL_MCAN_IIDX_LINE1:
+                /* Check MCAN interrupts fired during TX/RX of CAN package */
+                gInterruptLine1Status |= DL_MCAN_getIntrStatus(MCAN0_INST);
+                DL_MCAN_clearIntrStatus(MCAN0_INST, gInterruptLine1Status,DL_MCAN_INTR_SRC_MCAN_LINE_1);
+
+                if ((gInterruptLine1Status & MCAN_IR_RF0N_MASK) == MCAN_IR_RF0N_MASK)
+                {
+                    rxFS.fillLvl = 0;
+                    rxFS.num = DL_MCAN_RX_FIFO_NUM_0;
+                    while ((rxFS.fillLvl) == 0)
+                    {
+                        DL_MCAN_getRxFIFOStatus(MCAN0_INST, &rxFS);
+                    }
+
+                    DL_MCAN_readMsgRam(MCAN0_INST, DL_MCAN_MEM_TYPE_FIFO, 0U, rxFS.num, pRxMsg);
+
+                    DL_MCAN_writeRxFIFOAck(MCAN0_INST, rxFS.num, rxFS.getIdx);
+
+                    if(pRxMsg->xtd == 0)
+                    {
+                        id = ((pRxMsg->id) & 0x1FFC0000)>>18;
+                    }
+                    else
+                    {
+                        id = pRxMsg->id & 0x1FFFFFFF;
+                    }
+
+                    if(pRxMsg->xtd == ID_MODE_STANDARD)
+                    {
+                        //11-bit standard identifier
+                        switch (id)
+                        {
+                            case ID_PBU_BC:
+                            case ID_PBU_TO_MC: //接收PBU数据
+                            {
+                                CAN_RxBuf_Struct_PBU.ulBufID = id;
+                                CAN_Rx_ISR(&CAN_RxBuf_Struct_PBU, pRxMsg->dlc);
+                                break;
+                            }
+                            case ID_BMS_BC:
+                            case ID_BMS_TO_MC: //接收BMS数据
+                            {
+                                CAN_RxBuf_Struct_BMS.ulBufID = id;
+                                CAN_Rx_ISR(&CAN_RxBuf_Struct_BMS, pRxMsg->dlc);
+                                break;
+                            }
+                            case ID_HMI_BC:
+                            case ID_HMI_TO_MC: //接收HMI数据
+                            {
+                                CAN_RxBuf_Struct_HMI.ulBufID = id;
+                                CAN_Rx_ISR(&CAN_RxBuf_Struct_HMI, pRxMsg->dlc);
+                                break;
+                            }
+                            case ID_CDL_BC:
+                            case ID_CDL_TO_MC: // case ID_CDL_TO_MC_TE://接收CDL数据
+                            {
+                                CAN_RxBuf_Struct_CDL.ulBufID = id;
+                                CAN_Rx_ISR(&CAN_RxBuf_Struct_CDL, pRxMsg->dlc);
+                                break;
+                            }
+                            default:
+                                break;
+                        }
+                    }
+                    else
+                    {
+                        //29-bit extended identifier
+                    }
+
+                    gInterruptLine1Status &= ~(MCAN_IR_RF0N_MASK);
+                }
+                break;
+            default:
+                break;
+        }
+}
+///**
+//  * @brief  this function handles EXINT Line 1 & 0 handler.
+//  * @param  none
+//  * @retval none
+//  */
+//void EXINT1_0_IRQHandler(void)
+//{
+//    UWORD lightCnt=0;
+//    UWORD lightCntTime=0;
+//    UWORD lightTime=0;
+//    UWORD BacklightTime=0;
+//
+//  /* add user code begin EXINT1_0_IRQ 0 */
+//    if(exint_interrupt_flag_get(EXINT_LINE_0) != RESET)
+//     {
+//
+//        for(lightCnt=0;lightCnt<=12;lightCnt++)
+//        {
+//            if(IO_FORWARDLEDCHECK_PORT()==0)
+//               lightCntTime++;
+//        }
+//
+//        if(lightCntTime>=(11))
+//        {
+//         IO_FORWARDLED_OFF();
+//        BikeLedGloFun.blBike_ForwardLedDetErr=TRUE;
+//          lightCntTime=0;
+//        }
+//       exint_flag_clear(EXINT_LINE_0);
+//     }
+//  /* add user code end EXINT1_0_IRQ 0 */
+//  /* add user code begin EXINT1_0_IRQ 1 */
+//    if(exint_interrupt_flag_get(EXINT_LINE_1) != RESET)
+//     {
+//        for(lightTime=0;lightTime<=12;lightTime++)//40
+//           {
+//               if(IO_BACKLEDCHECK_PORT()==0)
+//                   BacklightTime++;
+//           }
+//           if(BacklightTime>=(11))
+//           {
+//               IO_BACKLED_OFF();
+//               BikeLedGloFun.blBike_BackLedDetErr=TRUE ;
+//               BacklightTime=0;
+//           }
+//
+//       exint_flag_clear(EXINT_LINE_1);
+//     }
+//  /* add user code end EXINT1_0_IRQ 1 */
+//}
+void TIMA1_IRQHandler(void) //void TMR1_BRK_OVF_TRG_HALL_IRQHandler(void)
+{
+//    ECnt++;
+  /* add user code begin TMR1_BRK_OVF_TRG_HALL_IRQ 0 */
+//if(0)//if(tmr_flag_get(TMR1,TMR_BRK_FLAG))//if (TIM_GetFlagStatus(TIM1, TIM_FLAG_Break))
+//    {
+////        tmr_flag_clear(TMR1,TMR_BRK_FLAG);//TIM_ClearFlag(TIM1, TIM_FLAG_Break);
+//
+//    }
+
+    switch (DL_TimerA_getPendingInterrupt(TIMA1))
+    {
+
+
+        case DL_TIMER_IIDX_ZERO:
+
+            ECnt++;
+
+            if(( Samp_Step==0) ||( Samp_Step>=4))
+                 Samp_Step=1;
+            else
+                Samp_Step++;
+           switch (Samp_Step)
+           {
+           case 1:
+//                        adc_enable(ADC1,TRUE);
+               // GPIOB->odt  ^= GPIO_PINS_11;
+                    /* Set Rdson sample trigger */
+                //TMR1->c4dt= 108;//108;//pwm_stGenOut.uwRDSONTrig;//  TIM_SetCompare4(TIM1, pwm_stGenOut.uwRDSONTrig); //pwm鏈�澶у嚡90%锛屽湪娉㈣胺3us浣嶇疆閲囬泦姣嶇嚎鐢甸樆鐢垫祦
+                    /* ADC1 regular channel trigger */
+//                         adc_ordinary_software_trigger_enable(ADC1,TRUE);//  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
+
+                 tbc_voUpIsr();
+                // DL_GPIO_togglePins(LED_PORT, LED_LED1_PIN);
+             break;
+             case 3:
+                 /* ADC Rdson calibration with single resistance*/
+                 if (TimingDelay != 0)
+                      {
+                          TimingDelay--;
+                      }
+                 if(bikespeed_stFreGetOut.uwCaputureOverflowCnt<60000)
+                 bikespeed_stFreGetOut.uwCaputureOverflowCnt++; //
+                 if(cadence_stFreGetOut.uwCaputureOverflowCnt<60000)
+                 cadence_stFreGetOut.uwCaputureOverflowCnt++;
+                 tbs_voIsr();//20241017
+//                 if(BikeLedGloFun.blBike_ForwardLedSta==TRUE)
+//                 {
+//                     BikeLedGloFun.uwBikeLight_L_PWM +=100;
+//                    if(BikeLedGloFun.uwBikeLight_L_PWM>720)
+//                     {
+//                        BikeLedGloFun.uwBikeLight_L_PWM=720;
+//                     }
+//
+//                    BikeLedGloFun.uwBikeLight_F_PWM +=100;
+//                    if(BikeLedGloFun.uwBikeLight_F_PWM>1800)
+//                    {
+//                       BikeLedGloFun.uwBikeLight_F_PWM=1800;
+//                    }
+//                    DL_TimerG_setCaptureCompareValue(PWM_2_INST, BikeLedGloFun.uwBikeLight_L_PWM, GPIO_PWM_2_C1_IDX);
+//                    DL_TimerG_setCaptureCompareValue(PWM_3_INST, BikeLedGloFun.uwBikeLight_F_PWM, GPIO_PWM_3_C1_IDX);//max=1800
+//                 }
+             break;
+              default:
+
+                break;
+           }
+
+//         gpio_bits_reset(GPIOC,GPIO_PINS_15);//  GPIOC->odt  ^= GPIO_PINS_15;
+//            /* ADC1 regular channel trigger */
+//           adc_ordinary_software_trigger_enable(ADC1,TRUE);// ADC_SoftwareStartConvCmd(ADC1, ENABLE);
+//           tbc_voUpIsr();
+//           tmr_flag_clear(TMR1,TMR_OVF_FLAG);//  TIM_ClearFlag(TIM1, TIM_FLAG_Update);
+//           if((cp_stBikeRunInfoPara.uwLightSwitch!=0) &&(BikeLedGloFun.blBike_ForwardLedStart==TRUE))
+//                  {
+//                      if(BikeLedGloFun.blBike_ForwardLedDetErr==TRUE)
+//                      {
+//                       BikeLedGloFun.blBike_ForwardLedDetErr=FALSE ;
+//                       IO_FORWARDLED_ON(); //寮�鍓嶇伅
+//                        BikeLedGloFun.blBike_ForwardLedSta=TRUE;
+//                        BikeLedGloFun.uwlBike_ForwardLedDetErrTime++;
+//                        if(BikeLedGloFun.uwlBike_ForwardLedDetErrTime>=64)
+//                         {
+//                             BikeLedGloFun.blBike_ForwardLedStart=FALSE;
+//                         }
+//                      }
+//                  }
+
+
+            break;
+
+        case DL_TIMER_IIDX_LOAD:
+
+            GCnt++;
+
+//            DL_GPIO_togglePins(LED_PORT, LED_LED2_PIN);
+            Samp_Step++;
+//            DL_Timer_clearInterruptStatus(MOTOR_PWM_INST,GPTIMER_CPU_INT_IMASK_L_SET);//
+              switch (Samp_Step)
+               {
+               case 2:
+                  // gpio_bits_set(GPIOB,GPIO_PINS_11);
+        //                    adc_enable(ADC1,FALSE);//
+                   tbc_voDownIsr(); //鐢垫祦 /鐢靛帇鑾峰彇 锛岃绠楁牎鍑嗙數娴侀噰鏍风偣  TMR1->c4dt=1000;// tmpSigRTrigZ1;
+                  // gpio_bits_reset(GPIOB,GPIO_PINS_11);
+            #if(JSCOPE_EN!=0)
+                  Jscope_WtiteData();
+           #endif
+                  break;
+              case 4:
+                 // GPIOC->odt  ^= GPIO_PINS_13;
+
+                      hw_uwPWMCmpr[0] = pwm_stGenOut.uwNewTIM1COMPR[0];
+                       hw_uwPWMCmpr[1] = pwm_stGenOut.uwNewTIM1COMPR[1];
+                       hw_uwPWMCmpr[2] = pwm_stGenOut.uwNewTIM1COMPR[2];
+                       hw_uwPWMCmpr[3] = pwm_stGenOut.uwNewTIM1COMPR[3];
+                       hw_uwPWMCmpr[4] = pwm_stGenOut.uwNewTIM1COMPR[4];
+                       hw_uwPWMCmpr[5] = pwm_stGenOut.uwNewTIM1COMPR[5];
+                       /* Enable PWM DMA,  hw_uwPWMCmpr[0/1/2] at underflow update */
+        //                        tmr_dma_request_enable(TMR1,TMR_OVERFLOW_DMA_REQUEST,TRUE);// TIM_DMACmd(TIM1, TIM_DMA_Update, ENABLE);
+        //                       dma_channel_enable(DMA1_CHANNEL5,TRUE); //DMA_Cmd(DMA1_Channel5, ENABLE);
+
+//                       pwm_stGenOut.uwNewTIM1COMPR[0]=900 ;
+//                       pwm_stGenOut.uwNewTIM1COMPR[1]=1250;
+//                       pwm_stGenOut.uwNewTIM1COMPR[2]=450 ;
+
+
+                       TIMER_CC_A_INDEX(pwm_stGenOut.uwNewTIM1COMPR[0]);//     DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[0], DL_TIMER_CC_0_INDEX);//A
+                       TIMER_CC_B_INDEX(pwm_stGenOut.uwNewTIM1COMPR[1]);// DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[1], DL_TIMER_CC_2_INDEX); //B
+                       TIMER_CC_C_INDEX(pwm_stGenOut.uwNewTIM1COMPR[2]);// DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, pwm_stGenOut.uwNewTIM1COMPR[2], DL_TIMER_CC_1_INDEX);//C
+
+        //                       adc_enable(ADC1,TRUE);//
+                         DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST,2, DL_TIMER_CC_4_INDEX); //采样点设置
+                 break;
+                  default:
+
+                    break;
+               }
+
+            break;
+
+
+        default:
+            break;
+
+    }
+   // DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_31);
+}
+/* add user code begin 1 */
+
+/* add user code end 1 */

+ 5 - 6
ti_msp_dl_config.c

@@ -427,8 +427,7 @@ SYSCONFIG_WEAK void SYSCFG_DL_MOTOR_PWM_init(void) {
     DL_TimerA_setRepeatCounter(MOTOR_PWM_INST, MOTOR_PWM_REPEAT_COUNT_2);
 
     DL_TimerA_enableClock(MOTOR_PWM_INST);
-    DL_TimerA_enableEvent(MOTOR_PWM_INST, DL_TIMERA_EVENT_ROUTE_1, (DL_TIMERA_EVENT_CC4_DN_EVENT |
-		DL_TIMERA_EVENT_CC4_UP_EVENT));
+    DL_TimerA_enableEvent(MOTOR_PWM_INST, DL_TIMERA_EVENT_ROUTE_1, (DL_TIMERA_EVENT_CC4_UP_EVENT));
 
     DL_TimerA_setPublisherChanID(MOTOR_PWM_INST, DL_TIMERA_PUBLISHER_INDEX_0, MOTOR_PWM_INST_PUB_0_CH);
 
@@ -767,8 +766,8 @@ SYSCONFIG_WEAK void SYSCFG_DL_ADC12_0_init(void)
         DL_ADC12_INPUT_CHAN_0, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0, DL_ADC12_AVERAGING_MODE_DISABLED,
         DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_TRIGGER_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
     DL_ADC12_setPowerDownMode(ADC12_0_INST,DL_ADC12_POWER_DOWN_MODE_MANUAL);
-    DL_ADC12_setSampleTime0(ADC12_0_INST,8);
-    DL_ADC12_setSampleTime1(ADC12_0_INST,96);
+    DL_ADC12_setSampleTime0(ADC12_0_INST,32);
+    DL_ADC12_setSampleTime1(ADC12_0_INST,32);
     DL_ADC12_setSubscriberChanID(ADC12_0_INST,ADC12_0_INST_SUB_CH);
     /* Enable ADC12 interrupt */
     DL_ADC12_clearInterruptStatus(ADC12_0_INST,(DL_ADC12_INTERRUPT_MEM1_RESULT_LOADED));
@@ -805,8 +804,8 @@ SYSCONFIG_WEAK void SYSCFG_DL_ADC12_1_init(void)
     DL_ADC12_configConversionMem(ADC12_1_INST, ADC12_1_ADCMEM_4,
         DL_ADC12_INPUT_CHAN_7, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0, DL_ADC12_AVERAGING_MODE_DISABLED,
         DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_TRIGGER_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
-    DL_ADC12_setSampleTime0(ADC12_1_INST,8);
-    DL_ADC12_setSampleTime1(ADC12_1_INST,96);
+    DL_ADC12_setSampleTime0(ADC12_1_INST,32);
+    DL_ADC12_setSampleTime1(ADC12_1_INST,32);
     DL_ADC12_setSubscriberChanID(ADC12_1_INST,ADC12_1_INST_SUB_CH);
     DL_ADC12_enableConversions(ADC12_1_INST);
 }

+ 1123 - 0
ti_msp_dl_config.c.bak

@@ -0,0 +1,1123 @@
+/*
+ * Copyright (c) 2023, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ *  ============ ti_msp_dl_config.c =============
+ *  Configured MSPM0 DriverLib module definitions
+ *
+ *  DO NOT EDIT - This file is generated for the MSPM0G350X
+ *  by the SysConfig tool.
+ */
+
+#include "ti_msp_dl_config.h"
+#include "syspar.h"
+DL_TimerA_backupConfig gMOTOR_PWMBackup;
+DL_TimerG_backupConfig gPWM_FBackup;
+DL_TimerG_backupConfig gHALLTIMERBackup;
+
+/*
+ *  ======== SYSCFG_DL_init ========
+ *  Perform any initialization needed before using any board APIs
+ */
+SYSCONFIG_WEAK void SYSCFG_DL_init(void)
+{
+    SYSCFG_DL_initPower();
+    SYSCFG_DL_GPIO_init();
+    /* Module-Specific Initializations*/
+#if (SIMULATION == 0)
+    SYSCFG_DL_DEBUG_init();
+#endif
+    SYSCFG_DL_SYSCTL_init();
+    SYSCFG_DL_MOTOR_PWM_init();
+    SYSCFG_DL_PWM_F_init();
+    SYSCFG_DL_PWM_B_L_init();
+    SYSCFG_DL_PWM_R_init();
+    SYSCFG_DL_HALLTIMER_init();
+    SYSCFG_DL_HALL_CNT_init();
+    SYSCFG_DL_UART_HMI_init();
+    SYSCFG_DL_ADC12_0_init();
+    SYSCFG_DL_ADC12_1_init();
+    SYSCFG_DL_COMP_0_init();
+    SYSCFG_DL_COMP_FLEDCHECK_init();
+    SYSCFG_DL_OPA_BPHASE_init();
+    SYSCFG_DL_OPA_CPHASE_init();
+    SYSCFG_DL_SYSTICK_init();
+    SYSCFG_DL_DAC12_init();
+    SYSCFG_DL_WWDT0_init();
+    SYSCFG_DL_MCAN0_init();
+    /* Ensure backup structures have no valid state */
+	gMOTOR_PWMBackup.backupRdy 	= false;
+	gPWM_FBackup.backupRdy 	= false;
+	gHALLTIMERBackup.backupRdy 	= false;
+
+
+
+}
+/*
+ * User should take care to save and restore register configuration in application.
+ * See Retention Configuration section for more details.
+ */
+SYSCONFIG_WEAK bool SYSCFG_DL_saveConfiguration(void)
+{
+    bool retStatus = true;
+
+	retStatus &= DL_TimerA_saveConfiguration(MOTOR_PWM_INST, &gMOTOR_PWMBackup);
+	retStatus &= DL_TimerG_saveConfiguration(PWM_F_INST, &gPWM_FBackup);
+	retStatus &= DL_TimerG_saveConfiguration(HALLTIMER_INST, &gHALLTIMERBackup);
+
+    return retStatus;
+}
+
+
+SYSCONFIG_WEAK bool SYSCFG_DL_restoreConfiguration(void)
+{
+    bool retStatus = true;
+
+	retStatus &= DL_TimerA_restoreConfiguration(MOTOR_PWM_INST, &gMOTOR_PWMBackup, false);
+	retStatus &= DL_TimerG_restoreConfiguration(PWM_F_INST, &gPWM_FBackup, false);
+	retStatus &= DL_TimerG_restoreConfiguration(HALLTIMER_INST, &gHALLTIMERBackup, false);
+
+    return retStatus;
+}
+
+SYSCONFIG_WEAK void SYSCFG_DL_initPower(void)
+{
+    DL_GPIO_reset(GPIOA);
+    DL_GPIO_reset(GPIOB);
+    DL_TimerA_reset(MOTOR_PWM_INST);
+    DL_TimerG_reset(PWM_F_INST);
+    DL_TimerG_reset(PWM_B_L_INST);
+    DL_TimerG_reset(PWM_R_INST);
+    DL_TimerG_reset(HALLTIMER_INST);
+    DL_TimerG_reset(HALL_CNT_INST);
+    DL_UART_Main_reset(UART_HMI_INST);
+    DL_ADC12_reset(ADC12_0_INST);
+    DL_ADC12_reset(ADC12_1_INST);
+    DL_COMP_reset(COMP_0_INST);
+    DL_COMP_reset(COMP_FLEDCHECK_INST);
+    DL_OPA_reset(OPA_BPHASE_INST);
+    DL_OPA_reset(OPA_CPHASE_INST);
+
+    DL_DAC12_reset(DAC0);
+    DL_WWDT_reset(WWDT0_INST);
+    DL_MathACL_reset(MATHACL);
+    DL_MCAN_reset(MCAN0_INST);
+
+    DL_GPIO_enablePower(GPIOA);
+    DL_GPIO_enablePower(GPIOB);
+    DL_TimerA_enablePower(MOTOR_PWM_INST);
+    DL_TimerG_enablePower(PWM_F_INST);
+    DL_TimerG_enablePower(PWM_B_L_INST);
+    DL_TimerG_enablePower(PWM_R_INST);
+    DL_TimerG_enablePower(HALLTIMER_INST);
+    DL_TimerG_enablePower(HALL_CNT_INST);
+    DL_UART_Main_enablePower(UART_HMI_INST);
+    DL_ADC12_enablePower(ADC12_0_INST);
+    DL_ADC12_enablePower(ADC12_1_INST);
+    DL_COMP_enablePower(COMP_0_INST);
+    DL_COMP_enablePower(COMP_FLEDCHECK_INST);
+    DL_OPA_enablePower(OPA_BPHASE_INST);
+    DL_OPA_enablePower(OPA_CPHASE_INST);
+
+    DL_DAC12_enablePower(DAC0);
+    DL_WWDT_enablePower(WWDT0_INST);
+    DL_MathACL_enablePower(MATHACL);
+    DL_MCAN_enablePower(MCAN0_INST);
+    delay_cycles(POWER_STARTUP_DELAY);
+}
+
+SYSCONFIG_WEAK void SYSCFG_DL_GPIO_init(void)
+{
+
+    DL_GPIO_initPeripheralOutputFunction(GPIO_MOTOR_PWM_C0_IOMUX,GPIO_MOTOR_PWM_C0_IOMUX_FUNC);
+    DL_GPIO_enableOutput(GPIO_MOTOR_PWM_C0_PORT, GPIO_MOTOR_PWM_C0_PIN);
+    DL_GPIO_initPeripheralOutputFunction(GPIO_MOTOR_PWM_C0_CMPL_IOMUX,GPIO_MOTOR_PWM_C0_CMPL_IOMUX_FUNC);
+    DL_GPIO_enableOutput(GPIO_MOTOR_PWM_C0_CMPL_PORT, GPIO_MOTOR_PWM_C0_CMPL_PIN);
+    DL_GPIO_initPeripheralOutputFunction(GPIO_MOTOR_PWM_C1_IOMUX,GPIO_MOTOR_PWM_C1_IOMUX_FUNC);
+    DL_GPIO_enableOutput(GPIO_MOTOR_PWM_C1_PORT, GPIO_MOTOR_PWM_C1_PIN);
+    DL_GPIO_initPeripheralOutputFunction(GPIO_MOTOR_PWM_C1_CMPL_IOMUX,GPIO_MOTOR_PWM_C1_CMPL_IOMUX_FUNC);
+    DL_GPIO_enableOutput(GPIO_MOTOR_PWM_C1_CMPL_PORT, GPIO_MOTOR_PWM_C1_CMPL_PIN);
+    DL_GPIO_initPeripheralOutputFunction(GPIO_MOTOR_PWM_C2_IOMUX,GPIO_MOTOR_PWM_C2_IOMUX_FUNC);
+    DL_GPIO_enableOutput(GPIO_MOTOR_PWM_C2_PORT, GPIO_MOTOR_PWM_C2_PIN);
+    DL_GPIO_initPeripheralOutputFunction(GPIO_MOTOR_PWM_C2_CMPL_IOMUX,GPIO_MOTOR_PWM_C2_CMPL_IOMUX_FUNC);
+    DL_GPIO_enableOutput(GPIO_MOTOR_PWM_C2_CMPL_PORT, GPIO_MOTOR_PWM_C2_CMPL_PIN);
+    DL_GPIO_initPeripheralOutputFunction(GPIO_PWM_F_C1_IOMUX,GPIO_PWM_F_C1_IOMUX_FUNC);
+    DL_GPIO_enableOutput(GPIO_PWM_F_C1_PORT, GPIO_PWM_F_C1_PIN);
+    DL_GPIO_initPeripheralOutputFunction(GPIO_PWM_B_L_C0_IOMUX,GPIO_PWM_B_L_C0_IOMUX_FUNC);
+    DL_GPIO_enableOutput(GPIO_PWM_B_L_C0_PORT, GPIO_PWM_B_L_C0_PIN);
+    DL_GPIO_initPeripheralOutputFunction(GPIO_PWM_B_L_C1_IOMUX,GPIO_PWM_B_L_C1_IOMUX_FUNC);
+    DL_GPIO_enableOutput(GPIO_PWM_B_L_C1_PORT, GPIO_PWM_B_L_C1_PIN);
+    DL_GPIO_initPeripheralOutputFunction(GPIO_PWM_R_C1_IOMUX,GPIO_PWM_R_C1_IOMUX_FUNC);
+    DL_GPIO_enableOutput(GPIO_PWM_R_C1_PORT, GPIO_PWM_R_C1_PIN);
+
+    DL_GPIO_initPeripheralAnalogFunction(GPIO_HFXIN_IOMUX);
+            DL_GPIO_initPeripheralAnalogFunction(GPIO_HFXOUT_IOMUX);
+
+    DL_GPIO_initPeripheralOutputFunction(
+        GPIO_UART_HMI_IOMUX_TX, GPIO_UART_HMI_IOMUX_TX_FUNC);
+    DL_GPIO_initPeripheralInputFunction(
+        GPIO_UART_HMI_IOMUX_RX, GPIO_UART_HMI_IOMUX_RX_FUNC);
+
+    DL_GPIO_initDigitalOutput(OUTPUT_POWER_EN_IOMUX);
+
+    DL_GPIO_initDigitalInput(INPUT_BREAK_IOMUX);
+
+    DL_GPIO_initDigitalInput(INPUT_Cadence_in_IOMUX);
+
+    DL_GPIO_initDigitalInput(HALL_HALLA_IOMUX);
+
+    DL_GPIO_initDigitalInput(HALL_HALLB_IOMUX);
+
+    DL_GPIO_initDigitalInput(HALL_HALLC_IOMUX);
+
+    DL_GPIO_initDigitalInput(LIGHT_DETECT_BACK_IOMUX);
+
+    DL_GPIO_initDigitalInput(LIGHT_DETECT_RIGHT_IOMUX);
+
+    DL_GPIO_initDigitalInput(LIGHT_DETECT_LEFT_IOMUX);
+#if (SIMULATION == 0)
+    DL_GPIO_initDigitalOutput(GPIO_12V6_PIN_EN_IOMUX);
+
+    DL_GPIO_initDigitalOutput(GPIO_12V6_PIN_SEL_IOMUX);
+
+    DL_GPIO_clearPins(GPIOA, OUTPUT_POWER_EN_PIN |
+		GPIO_12V6_PIN_EN_PIN |
+		GPIO_12V6_PIN_SEL_PIN);
+    DL_GPIO_enableOutput(GPIOA, OUTPUT_POWER_EN_PIN |
+		GPIO_12V6_PIN_EN_PIN |
+		GPIO_12V6_PIN_SEL_PIN);
+#else
+    DL_GPIO_clearPins(GPIOA, OUTPUT_POWER_EN_PIN );
+    DL_GPIO_enableOutput(GPIOA, OUTPUT_POWER_EN_PIN);
+#endif
+    DL_GPIO_setLowerPinsPolarity(GPIOA, DL_GPIO_PIN_8_EDGE_RISE_FALL |
+		DL_GPIO_PIN_3_EDGE_RISE);
+    DL_GPIO_setUpperPinsPolarity(GPIOA, DL_GPIO_PIN_28_EDGE_RISE);
+    DL_GPIO_clearInterruptStatus(GPIOA, HALL_HALLA_PIN |
+		LIGHT_DETECT_LEFT_PIN);
+    DL_GPIO_enableInterrupt(GPIOA, HALL_HALLA_PIN |
+		LIGHT_DETECT_LEFT_PIN);
+    DL_GPIO_setLowerPinsPolarity(GPIOB, DL_GPIO_PIN_3_EDGE_RISE_FALL |
+		DL_GPIO_PIN_2_EDGE_RISE_FALL |
+		DL_GPIO_PIN_15_EDGE_RISE |
+		DL_GPIO_PIN_8_EDGE_RISE);
+    DL_GPIO_clearInterruptStatus(GPIOB, HALL_HALLB_PIN |
+		HALL_HALLC_PIN |
+		LIGHT_DETECT_BACK_PIN |
+		LIGHT_DETECT_RIGHT_PIN);
+    DL_GPIO_enableInterrupt(GPIOB, HALL_HALLB_PIN |
+		HALL_HALLC_PIN |
+		LIGHT_DETECT_BACK_PIN |
+		LIGHT_DETECT_RIGHT_PIN);
+
+    DL_GPIO_initPeripheralOutputFunction(
+        GPIO_MCAN0_IOMUX_CAN_TX, GPIO_MCAN0_IOMUX_CAN_TX_FUNC);
+    DL_GPIO_initPeripheralInputFunction(
+        GPIO_MCAN0_IOMUX_CAN_RX, GPIO_MCAN0_IOMUX_CAN_RX_FUNC);
+
+}
+
+
+SYSCONFIG_WEAK void SYSCFG_DL_DEBUG_init(void)
+{
+    /* Set the DISABLE bit in the SWDCFG register in SYSCTL along with KEY */
+    SYSCTL->SOCLOCK.SWDCFG = (SYSCTL_SWDCFG_KEY_VALUE | SYSCTL_SWDCFG_DISABLE_TRUE);
+}
+static const DL_SYSCTL_SYSPLLConfig gSYSPLLConfig_External = {
+    .inputFreq              = DL_SYSCTL_SYSPLL_INPUT_FREQ_8_16_MHZ,
+    .rDivClk2x              = 1,
+    .rDivClk1               = 0,
+    .rDivClk0               = 0,
+    .enableCLK2x            = DL_SYSCTL_SYSPLL_CLK2X_ENABLE,
+    .enableCLK1             = DL_SYSCTL_SYSPLL_CLK1_ENABLE,
+    .enableCLK0             = DL_SYSCTL_SYSPLL_CLK0_DISABLE,
+    .sysPLLMCLK             = DL_SYSCTL_SYSPLL_MCLK_CLK2X,
+    .sysPLLRef              = DL_SYSCTL_SYSPLL_REF_HFCLK,
+    .qDiv                   = 8,
+    .pDiv                   = DL_SYSCTL_SYSPLL_PDIV_1
+};
+static const DL_SYSCTL_SYSPLLConfig gSYSPLLConfig_Internal = {
+    .inputFreq              = DL_SYSCTL_SYSPLL_INPUT_FREQ_16_32_MHZ,
+	.rDivClk2x              = 3,
+	.rDivClk1               = 1,
+	.rDivClk0               = 0,
+	.enableCLK2x            = DL_SYSCTL_SYSPLL_CLK2X_ENABLE,
+	.enableCLK1             = DL_SYSCTL_SYSPLL_CLK1_ENABLE,
+	.enableCLK0             = DL_SYSCTL_SYSPLL_CLK0_DISABLE,
+	.sysPLLMCLK             = DL_SYSCTL_SYSPLL_MCLK_CLK2X,
+	.sysPLLRef              = DL_SYSCTL_SYSPLL_REF_SYSOSC,
+	.qDiv                   = 8,
+	.pDiv                   = DL_SYSCTL_SYSPLL_PDIV_2
+};
+void DL_SYSCTL_configSYSPLL_copy(DL_SYSCTL_SYSPLLConfig *config)
+{
+    uint32_t StartUpCounter = 0;
+    /* PLL configurations are retained in lower reset levels. Set default
+     * behavior of disabling the PLL to keep a consistent behavior regardless
+     * of reset level. */
+    DL_SYSCTL_disableSYSPLL();
+
+    /* Check that SYSPLL is disabled before configuration */
+    while ((DL_SYSCTL_getClockStatus() & (DL_SYSCTL_CLK_STATUS_SYSPLL_OFF)) !=
+           (DL_SYSCTL_CLK_STATUS_SYSPLL_OFF)) {
+        ;
+    }
+
+    // set SYSPLL reference clock
+    DL_Common_updateReg(&SYSCTL->SOCLOCK.SYSPLLCFG0,
+        ((uint32_t) config->sysPLLRef), SYSCTL_SYSPLLCFG0_SYSPLLREF_MASK);
+
+    // set predivider PDIV (divides reference clock)
+    DL_Common_updateReg(&SYSCTL->SOCLOCK.SYSPLLCFG1, ((uint32_t) config->pDiv),
+        SYSCTL_SYSPLLCFG1_PDIV_MASK);
+
+    // save CPUSS CTL state and disable the cache
+    uint32_t ctlTemp = DL_CORE_getInstructionConfig();
+    DL_CORE_configInstruction(DL_CORE_PREFETCH_ENABLED, DL_CORE_CACHE_DISABLED,
+        DL_CORE_LITERAL_CACHE_ENABLED);
+
+    // populate SYSPLLPARAM0/1 tuning registers from flash, based on input freq
+    SYSCTL->SOCLOCK.SYSPLLPARAM0 =
+        *(volatile uint32_t *) ((uint32_t) config->inputFreq);
+    SYSCTL->SOCLOCK.SYSPLLPARAM1 =
+        *(volatile uint32_t *) ((uint32_t) config->inputFreq + (uint32_t) 0x4);
+
+    // restore CPUSS CTL state
+    CPUSS->CTL = ctlTemp;
+
+    // set feedback divider QDIV (multiplies to give output frequency)
+    DL_Common_updateReg(&SYSCTL->SOCLOCK.SYSPLLCFG1,
+        ((config->qDiv << SYSCTL_SYSPLLCFG1_QDIV_OFS) &
+            SYSCTL_SYSPLLCFG1_QDIV_MASK),
+        SYSCTL_SYSPLLCFG1_QDIV_MASK);
+
+    // write clock output dividers, enable outputs, and MCLK source to SYSPLLCFG0
+    DL_Common_updateReg(&SYSCTL->SOCLOCK.SYSPLLCFG0,
+        (((config->rDivClk2x << SYSCTL_SYSPLLCFG0_RDIVCLK2X_OFS) &
+             SYSCTL_SYSPLLCFG0_RDIVCLK2X_MASK) |
+            ((config->rDivClk1 << SYSCTL_SYSPLLCFG0_RDIVCLK1_OFS) &
+                SYSCTL_SYSPLLCFG0_RDIVCLK1_MASK) |
+            ((config->rDivClk0 << SYSCTL_SYSPLLCFG0_RDIVCLK0_OFS) &
+                SYSCTL_SYSPLLCFG0_RDIVCLK0_MASK) |
+            config->enableCLK2x | config->enableCLK1 | config->enableCLK0 |
+            (uint32_t) config->sysPLLMCLK),
+        (SYSCTL_SYSPLLCFG0_RDIVCLK2X_MASK | SYSCTL_SYSPLLCFG0_RDIVCLK1_MASK |
+            SYSCTL_SYSPLLCFG0_RDIVCLK0_MASK |
+            SYSCTL_SYSPLLCFG0_ENABLECLK2X_MASK |
+            SYSCTL_SYSPLLCFG0_ENABLECLK1_MASK |
+            SYSCTL_SYSPLLCFG0_ENABLECLK0_MASK |
+            SYSCTL_SYSPLLCFG0_MCLK2XVCO_MASK));
+
+    // enable SYSPLL
+    SYSCTL->SOCLOCK.HSCLKEN |= SYSCTL_HSCLKEN_SYSPLLEN_ENABLE;
+
+    // wait until SYSPLL startup is stabilized
+    while (((DL_SYSCTL_getClockStatus() & SYSCTL_CLKSTATUS_SYSPLLGOOD_MASK) != DL_SYSCTL_CLK_STATUS_SYSPLL_GOOD) && (StartUpCounter < 30000))
+    {
+        StartUpCounter++;
+    }
+
+    if((DL_SYSCTL_getClockStatus() & SYSCTL_CLKSTATUS_SYSPLLGOOD_MASK) != DL_SYSCTL_CLK_STATUS_SYSPLL_GOOD)
+    {
+        DL_SYSCTL_configSYSPLL((DL_SYSCTL_SYSPLLConfig *) &gSYSPLLConfig_Internal);
+    }
+}
+SYSCONFIG_WEAK void SYSCFG_DL_SYSCTL_init(void)
+{
+
+	//Low Power Mode is configured to be SLEEP0
+    DL_SYSCTL_setBORThreshold(DL_SYSCTL_BOR_THRESHOLD_LEVEL_0);
+    DL_SYSCTL_setFlashWaitState(DL_SYSCTL_FLASH_WAIT_STATE_2);
+
+    
+	DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE);
+	/* Set default configuration */
+	DL_SYSCTL_disableHFXT();
+	DL_SYSCTL_disableSYSPLL();
+	DL_SYSCTL_setHFCLKSourceHFXTParams(DL_SYSCTL_HFXT_RANGE_4_8_MHZ,40, false);
+	DL_SYSCTL_configSYSPLL_copy((DL_SYSCTL_SYSPLLConfig *) &gSYSPLLConfig_External);
+    DL_SYSCTL_setULPCLKDivider(DL_SYSCTL_ULPCLK_DIV_2);
+    DL_SYSCTL_enableMFCLK();
+    DL_SYSCTL_enableMFPCLK();
+	DL_SYSCTL_setMFPCLKSource(DL_SYSCTL_MFPCLK_SOURCE_SYSOSC);
+    DL_SYSCTL_setMCLKSource(SYSOSC, HSCLK, DL_SYSCTL_HSCLK_SOURCE_SYSPLL);
+    /* INT_GROUP1 Priority */
+    NVIC_SetPriority(GPIOA_INT_IRQn, 1);
+
+}
+
+
+/*
+ * Timer clock configuration to be sourced by  / 1 (72000000 Hz)
+ * timerClkFreq = (timerClkSrc / (timerClkDivRatio * (timerClkPrescale + 1)))
+ *   72000000 Hz = 72000000 Hz / (1 * (0 + 1))
+ */
+static const DL_TimerA_ClockConfig gMOTOR_PWMClockConfig = {
+    .clockSel = DL_TIMER_CLOCK_BUSCLK,
+    .divideRatio = DL_TIMER_CLOCK_DIVIDE_1,
+    .prescale = 0U
+};
+
+static const DL_TimerA_PWMConfig gMOTOR_PWMConfig = {
+    .pwmMode = DL_TIMER_PWM_MODE_CENTER_ALIGN,
+    .period = 4500,
+    .isTimerWithFourCC = true,
+    .startTimer = DL_TIMER_STOP,
+};
+
+SYSCONFIG_WEAK void SYSCFG_DL_MOTOR_PWM_init(void) {
+
+    DL_TimerA_setClockConfig(
+        MOTOR_PWM_INST, (DL_TimerA_ClockConfig *) &gMOTOR_PWMClockConfig);
+
+    DL_TimerA_initPWMMode(
+        MOTOR_PWM_INST, (DL_TimerA_PWMConfig *) &gMOTOR_PWMConfig);
+
+    DL_TimerA_setCaptureCompareOutCtl(MOTOR_PWM_INST, DL_TIMER_CC_OCTL_INIT_VAL_LOW,
+		DL_TIMER_CC_OCTL_INV_OUT_DISABLED, DL_TIMER_CC_OCTL_SRC_DEAD_BAND,
+		DL_TIMERA_CAPTURE_COMPARE_0_INDEX);
+
+    DL_TimerA_setCaptCompUpdateMethod(MOTOR_PWM_INST, DL_TIMER_CC_UPDATE_METHOD_IMMEDIATE, DL_TIMERA_CAPTURE_COMPARE_0_INDEX);
+    DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, 1688, DL_TIMER_CC_0_INDEX);
+
+    DL_TimerA_setCaptureCompareOutCtl(MOTOR_PWM_INST, DL_TIMER_CC_OCTL_INIT_VAL_LOW,
+		DL_TIMER_CC_OCTL_INV_OUT_DISABLED, DL_TIMER_CC_OCTL_SRC_DEAD_BAND,
+		DL_TIMERA_CAPTURE_COMPARE_1_INDEX);
+
+    DL_TimerA_setCaptCompUpdateMethod(MOTOR_PWM_INST, DL_TIMER_CC_UPDATE_METHOD_IMMEDIATE, DL_TIMERA_CAPTURE_COMPARE_1_INDEX);
+    DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, 2250, DL_TIMER_CC_1_INDEX);
+
+    DL_TimerA_setCaptureCompareOutCtl(MOTOR_PWM_INST, DL_TIMER_CC_OCTL_INIT_VAL_LOW,
+		DL_TIMER_CC_OCTL_INV_OUT_DISABLED, DL_TIMER_CC_OCTL_SRC_DEAD_BAND,
+		DL_TIMERA_CAPTURE_COMPARE_2_INDEX);
+
+    DL_TimerA_setCaptCompUpdateMethod(MOTOR_PWM_INST, DL_TIMER_CC_UPDATE_METHOD_IMMEDIATE, DL_TIMERA_CAPTURE_COMPARE_2_INDEX);
+    DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, 1125, DL_TIMER_CC_2_INDEX);
+
+    DL_TimerA_setDeadBand(MOTOR_PWM_INST, 108, 108, DL_TIMER_DEAD_BAND_MODE_1);
+    DL_TimerA_setRepeatCounter(MOTOR_PWM_INST, MOTOR_PWM_REPEAT_COUNT_2);
+
+    DL_TimerA_enableClock(MOTOR_PWM_INST);
+    DL_TimerA_enableEvent(MOTOR_PWM_INST, DL_TIMERA_EVENT_ROUTE_1, (DL_TIMERA_EVENT_CC4_DN_EVENT |
+		DL_TIMERA_EVENT_CC4_UP_EVENT));
+
+    DL_TimerA_setPublisherChanID(MOTOR_PWM_INST, DL_TIMERA_PUBLISHER_INDEX_0, MOTOR_PWM_INST_PUB_0_CH);
+
+
+    DL_TimerA_enableInterrupt(MOTOR_PWM_INST , DL_TIMERA_INTERRUPT_FAULT_EVENT |
+		DL_TIMER_INTERRUPT_LOAD_EVENT |
+		DL_TIMER_INTERRUPT_ZERO_EVENT);
+
+    NVIC_SetPriority(MOTOR_PWM_INST_INT_IRQN, 0);
+    DL_TimerA_setCCPDirection(MOTOR_PWM_INST , DL_TIMER_CC0_OUTPUT | DL_TIMER_CC1_OUTPUT | DL_TIMER_CC2_OUTPUT );
+
+
+
+    DL_TimerA_setCaptureCompareInput(MOTOR_PWM_INST, DL_TIMER_CC_INPUT_INV_NOINVERT, DL_TIMER_CC_IN_SEL_TRIG, DL_TIMER_CC_0_INDEX);
+
+    DL_TimerA_setCaptureCompareInput(MOTOR_PWM_INST, DL_TIMER_CC_INPUT_INV_NOINVERT, DL_TIMER_CC_IN_SEL_TRIG, DL_TIMER_CC_1_INDEX);
+
+    DL_TimerA_setCaptureCompareInput(MOTOR_PWM_INST, DL_TIMER_CC_INPUT_INV_NOINVERT, DL_TIMER_CC_IN_SEL_TRIG, DL_TIMER_CC_2_INDEX);
+
+    /*
+     * Determines the external triggering event to trigger the module (self-triggered in main configuration)
+     * and triggered by specific timer in secondary configuration
+     */
+    DL_TimerA_setExternalTriggerEvent(MOTOR_PWM_INST,DL_TIMER_EXT_TRIG_SEL_TRIG_1);
+    DL_TimerA_enableExternalTrigger(MOTOR_PWM_INST);
+    uint32_t temp;
+    temp = DL_TimerA_getCaptureCompareCtl(MOTOR_PWM_INST, DL_TIMER_CC_0_INDEX);
+    DL_TimerA_setCaptureCompareCtl(MOTOR_PWM_INST, DL_TIMER_CC_MODE_COMPARE, temp | (uint32_t) DL_TIMER_CC_LCOND_TRIG_RISE, DL_TIMER_CC_0_INDEX);
+
+    temp = DL_TimerA_getCaptureCompareCtl(MOTOR_PWM_INST, DL_TIMER_CC_1_INDEX);
+    DL_TimerA_setCaptureCompareCtl(MOTOR_PWM_INST, DL_TIMER_CC_MODE_COMPARE, temp | (uint32_t) DL_TIMER_CC_LCOND_TRIG_RISE, DL_TIMER_CC_1_INDEX);
+
+    temp = DL_TimerA_getCaptureCompareCtl(MOTOR_PWM_INST, DL_TIMER_CC_2_INDEX);
+    DL_TimerA_setCaptureCompareCtl(MOTOR_PWM_INST, DL_TIMER_CC_MODE_COMPARE, temp | (uint32_t) DL_TIMER_CC_LCOND_TRIG_RISE, DL_TIMER_CC_2_INDEX);
+
+    DL_TimerA_setFaultSourceConfig(MOTOR_PWM_INST, (DL_TIMERA_FAULT_SOURCE_COMP1_SENSE_LOW));
+    DL_TimerA_setFaultConfig(MOTOR_PWM_INST, DL_TIMERA_FAULT_CONFIG_TFIM_DISABLED
+		 | DL_TIMERA_FAULT_CONFIG_FL_LATCH_LD_CLR
+		 | DL_TIMERA_FAULT_CONFIG_FI_INDEPENDENT
+		 | DL_TIMERA_FAULT_CONFIG_FIEN_DISABLED);
+    DL_TimerA_setFaultInputFilterConfig(MOTOR_PWM_INST,
+        DL_TIMERA_FAULT_FILTER_FILTERED,
+        DL_TIMERA_FAULT_FILTER_CPV_CONSEC_PER,
+        DL_TIMERA_FAULT_FILTER_FP_PER_8);
+    DL_TimerA_configFaultOutputAction(MOTOR_PWM_INST,
+        DL_TIMERA_FAULT_ENTRY_CCP_LOW,
+        DL_TIMERA_FAULT_EXIT_CCP_LOW,
+        DL_TIMER_CC_0_INDEX);
+    DL_TimerA_configFaultOutputAction(MOTOR_PWM_INST,
+        DL_TIMERA_FAULT_ENTRY_CCP_LOW,
+        DL_TIMERA_FAULT_EXIT_CCP_LOW,
+        DL_TIMER_CC_1_INDEX);
+    DL_TimerA_configFaultOutputAction(MOTOR_PWM_INST,
+        DL_TIMERA_FAULT_ENTRY_CCP_LOW,
+        DL_TIMERA_FAULT_EXIT_CCP_LOW,
+        DL_TIMER_CC_2_INDEX);
+    DL_TimerA_configFaultCounter(MOTOR_PWM_INST,
+        DL_TIMERA_FAULT_ENTRY_CTR_CONT_COUNT, DL_TIMERA_FAULT_EXIT_CTR_CVAE_ACTION);
+    DL_TimerA_enableFaultInput(MOTOR_PWM_INST);
+    DL_TimerA_enableClockFaultDetection(MOTOR_PWM_INST);
+}
+/*
+ * Timer clock configuration to be sourced by  / 2 (36000000 Hz)
+ * timerClkFreq = (timerClkSrc / (timerClkDivRatio * (timerClkPrescale + 1)))
+ *   36000000 Hz = 36000000 Hz / (2 * (0 + 1))
+ */
+static const DL_TimerG_ClockConfig gPWM_FClockConfig = {
+    .clockSel = DL_TIMER_CLOCK_BUSCLK,
+    .divideRatio = DL_TIMER_CLOCK_DIVIDE_2,
+    .prescale = 0U
+};
+
+static const DL_TimerG_PWMConfig gPWM_FConfig = {
+    .pwmMode = DL_TIMER_PWM_MODE_EDGE_ALIGN_UP,
+    .period = 2304,
+    .startTimer = DL_TIMER_STOP,
+};
+
+SYSCONFIG_WEAK void SYSCFG_DL_PWM_F_init(void) {
+
+    DL_TimerG_setClockConfig(
+        PWM_F_INST, (DL_TimerG_ClockConfig *) &gPWM_FClockConfig);
+
+    DL_TimerG_initPWMMode(
+        PWM_F_INST, (DL_TimerG_PWMConfig *) &gPWM_FConfig);
+
+    DL_TimerG_setCaptureCompareOutCtl(PWM_F_INST, DL_TIMER_CC_OCTL_INIT_VAL_LOW,
+		DL_TIMER_CC_OCTL_INV_OUT_DISABLED, DL_TIMER_CC_OCTL_SRC_FUNCVAL,
+		DL_TIMERG_CAPTURE_COMPARE_1_INDEX);
+
+    DL_TimerG_setCaptCompUpdateMethod(PWM_F_INST, DL_TIMER_CC_UPDATE_METHOD_IMMEDIATE, DL_TIMERG_CAPTURE_COMPARE_1_INDEX);
+    DL_TimerG_setCaptureCompareValue(PWM_F_INST, 0, DL_TIMER_CC_1_INDEX);
+
+    DL_TimerG_enableClock(PWM_F_INST);
+
+
+    
+    DL_TimerG_setCCPDirection(PWM_F_INST , DL_TIMER_CC1_OUTPUT );
+
+
+}
+/*
+ * Timer clock configuration to be sourced by  / 1 (36000000 Hz)
+ * timerClkFreq = (timerClkSrc / (timerClkDivRatio * (timerClkPrescale + 1)))
+ *   36000000 Hz = 36000000 Hz / (1 * (0 + 1))
+ */
+static const DL_TimerG_ClockConfig gPWM_B_LClockConfig = {
+    .clockSel = DL_TIMER_CLOCK_BUSCLK,
+    .divideRatio = DL_TIMER_CLOCK_DIVIDE_1,
+    .prescale = 0U
+};
+
+static const DL_TimerG_PWMConfig gPWM_B_LConfig = {
+    .pwmMode = DL_TIMER_PWM_MODE_EDGE_ALIGN_UP,
+    .period = 2304,
+    .startTimer = DL_TIMER_STOP,
+};
+
+SYSCONFIG_WEAK void SYSCFG_DL_PWM_B_L_init(void) {
+
+    DL_TimerG_setClockConfig(
+        PWM_B_L_INST, (DL_TimerG_ClockConfig *) &gPWM_B_LClockConfig);
+
+    DL_TimerG_initPWMMode(
+        PWM_B_L_INST, (DL_TimerG_PWMConfig *) &gPWM_B_LConfig);
+
+    DL_TimerG_setCaptureCompareOutCtl(PWM_B_L_INST, DL_TIMER_CC_OCTL_INIT_VAL_LOW,
+		DL_TIMER_CC_OCTL_INV_OUT_DISABLED, DL_TIMER_CC_OCTL_SRC_FUNCVAL,
+		DL_TIMERG_CAPTURE_COMPARE_0_INDEX);
+
+    DL_TimerG_setCaptCompUpdateMethod(PWM_B_L_INST, DL_TIMER_CC_UPDATE_METHOD_IMMEDIATE, DL_TIMERG_CAPTURE_COMPARE_0_INDEX);
+    DL_TimerG_setCaptureCompareValue(PWM_B_L_INST, 0, DL_TIMER_CC_0_INDEX);
+
+    DL_TimerG_setCaptureCompareOutCtl(PWM_B_L_INST, DL_TIMER_CC_OCTL_INIT_VAL_LOW,
+		DL_TIMER_CC_OCTL_INV_OUT_DISABLED, DL_TIMER_CC_OCTL_SRC_FUNCVAL,
+		DL_TIMERG_CAPTURE_COMPARE_1_INDEX);
+
+    DL_TimerG_setCaptCompUpdateMethod(PWM_B_L_INST, DL_TIMER_CC_UPDATE_METHOD_IMMEDIATE, DL_TIMERG_CAPTURE_COMPARE_1_INDEX);
+    DL_TimerG_setCaptureCompareValue(PWM_B_L_INST, 0, DL_TIMER_CC_1_INDEX);
+
+    DL_TimerG_enableClock(PWM_B_L_INST);
+
+
+    
+    DL_TimerG_setCCPDirection(PWM_B_L_INST , DL_TIMER_CC0_OUTPUT | DL_TIMER_CC1_OUTPUT );
+
+
+}
+/*
+ * Timer clock configuration to be sourced by  / 2 (36000000 Hz)
+ * timerClkFreq = (timerClkSrc / (timerClkDivRatio * (timerClkPrescale + 1)))
+ *   36000000 Hz = 36000000 Hz / (2 * (0 + 1))
+ */
+static const DL_TimerG_ClockConfig gPWM_RClockConfig = {
+    .clockSel = DL_TIMER_CLOCK_BUSCLK,
+    .divideRatio = DL_TIMER_CLOCK_DIVIDE_2,
+    .prescale = 0U
+};
+
+static const DL_TimerG_PWMConfig gPWM_RConfig = {
+    .pwmMode = DL_TIMER_PWM_MODE_EDGE_ALIGN_UP,
+    .period = 2304,
+    .startTimer = DL_TIMER_STOP,
+};
+
+SYSCONFIG_WEAK void SYSCFG_DL_PWM_R_init(void) {
+
+    DL_TimerG_setClockConfig(
+        PWM_R_INST, (DL_TimerG_ClockConfig *) &gPWM_RClockConfig);
+
+    DL_TimerG_initPWMMode(
+        PWM_R_INST, (DL_TimerG_PWMConfig *) &gPWM_RConfig);
+
+    DL_TimerG_setCaptureCompareOutCtl(PWM_R_INST, DL_TIMER_CC_OCTL_INIT_VAL_LOW,
+		DL_TIMER_CC_OCTL_INV_OUT_DISABLED, DL_TIMER_CC_OCTL_SRC_FUNCVAL,
+		DL_TIMERG_CAPTURE_COMPARE_1_INDEX);
+
+    DL_TimerG_setCaptCompUpdateMethod(PWM_R_INST, DL_TIMER_CC_UPDATE_METHOD_IMMEDIATE, DL_TIMERG_CAPTURE_COMPARE_1_INDEX);
+    DL_TimerG_setCaptureCompareValue(PWM_R_INST, 0, DL_TIMER_CC_1_INDEX);
+
+    DL_TimerG_enableClock(PWM_R_INST);
+
+
+    
+    DL_TimerG_setCCPDirection(PWM_R_INST , DL_TIMER_CC1_OUTPUT );
+
+
+}
+
+
+
+/*
+ * Timer clock configuration to be sourced by BUSCLK /  (14400000 Hz)
+ * timerClkFreq = (timerClkSrc / (timerClkDivRatio * (timerClkPrescale + 1)))
+ *   3600000 Hz = 14400000 Hz / (5 * (3 + 1))
+ */
+static const DL_TimerG_ClockConfig gHALLTIMERClockConfig = {
+    .clockSel    = DL_TIMER_CLOCK_BUSCLK,
+    .divideRatio = DL_TIMER_CLOCK_DIVIDE_5,
+    .prescale    = 3U,
+};
+
+/*
+ * Timer load value (where the counter starts from) is calculated as (timerPeriod * timerClockFreq) - 1
+ * HALLTIMER_INST_LOAD_VALUE = (16.67 ms * 3600000 Hz) - 1
+ */
+static const DL_TimerG_TimerConfig gHALLTIMERTimerConfig = {
+    .period     = HALLTIMER_INST_LOAD_VALUE,
+    .timerMode  = DL_TIMER_TIMER_MODE_PERIODIC_UP,
+    .startTimer = DL_TIMER_START,
+};
+
+SYSCONFIG_WEAK void SYSCFG_DL_HALLTIMER_init(void) {
+
+    DL_TimerG_setClockConfig(HALLTIMER_INST,
+        (DL_TimerG_ClockConfig *) &gHALLTIMERClockConfig);
+
+    DL_TimerG_initTimerMode(HALLTIMER_INST,
+        (DL_TimerG_TimerConfig *) &gHALLTIMERTimerConfig);
+    DL_TimerG_enableInterrupt(HALLTIMER_INST , DL_TIMERG_INTERRUPT_ZERO_EVENT);
+	NVIC_SetPriority(HALLTIMER_INST_INT_IRQN, 1);
+    DL_TimerG_enableClock(HALLTIMER_INST);
+
+
+
+
+
+}
+
+/*
+ * Timer clock configuration to be sourced by BUSCLK /  (36000000 Hz)
+ * timerClkFreq = (timerClkSrc / (timerClkDivRatio * (timerClkPrescale + 1)))
+ *   36000000 Hz = 36000000 Hz / (1 * (0 + 1))
+ */
+static const DL_TimerG_ClockConfig gHALL_CNTClockConfig = {
+    .clockSel    = DL_TIMER_CLOCK_BUSCLK,
+    .divideRatio = DL_TIMER_CLOCK_DIVIDE_1,
+    .prescale    = 0U,
+};
+
+/*
+ * Timer load value (where the counter starts from) is calculated as (timerPeriod * timerClockFreq) - 1
+ * HALL_CNT_INST_LOAD_VALUE = (0.03ms * 36000000 Hz) - 1
+ */
+static const DL_TimerG_TimerConfig gHALL_CNTTimerConfig = {
+    .period     = HALL_CNT_INST_LOAD_VALUE,
+    .timerMode  = DL_TIMER_TIMER_MODE_PERIODIC_UP,
+    .startTimer = DL_TIMER_START,
+};
+
+SYSCONFIG_WEAK void SYSCFG_DL_HALL_CNT_init(void) {
+
+    DL_TimerG_setClockConfig(HALL_CNT_INST,
+        (DL_TimerG_ClockConfig *) &gHALL_CNTClockConfig);
+
+    DL_TimerG_initTimerMode(HALL_CNT_INST,
+        (DL_TimerG_TimerConfig *) &gHALL_CNTTimerConfig);
+    DL_TimerG_enableInterrupt(HALL_CNT_INST , DL_TIMERG_INTERRUPT_ZERO_EVENT);
+	NVIC_SetPriority(HALL_CNT_INST_INT_IRQN, 3);
+    DL_TimerG_enableClock(HALL_CNT_INST);
+
+
+
+
+
+}
+
+
+
+static const DL_UART_Main_ClockConfig gUART_HMIClockConfig = {
+    .clockSel    = DL_UART_MAIN_CLOCK_BUSCLK,
+    .divideRatio = DL_UART_MAIN_CLOCK_DIVIDE_RATIO_1
+};
+
+static const DL_UART_Main_Config gUART_HMIConfig = {
+    .mode        = DL_UART_MAIN_MODE_NORMAL,
+    .direction   = DL_UART_MAIN_DIRECTION_TX_RX,
+    .flowControl = DL_UART_MAIN_FLOW_CONTROL_NONE,
+    .parity      = DL_UART_MAIN_PARITY_NONE,
+    .wordLength  = DL_UART_MAIN_WORD_LENGTH_8_BITS,
+    .stopBits    = DL_UART_MAIN_STOP_BITS_ONE
+};
+
+SYSCONFIG_WEAK void SYSCFG_DL_UART_HMI_init(void)
+{
+    DL_UART_Main_setClockConfig(UART_HMI_INST, (DL_UART_Main_ClockConfig *) &gUART_HMIClockConfig);
+
+    DL_UART_Main_init(UART_HMI_INST, (DL_UART_Main_Config *) &gUART_HMIConfig);
+    /*
+     * Configure baud rate by setting oversampling and baud rate divisors.
+     *  Target baud rate: 9600
+     *  Actual baud rate: 9600
+     */
+    DL_UART_Main_setOversampling(UART_HMI_INST, DL_UART_OVERSAMPLING_RATE_16X);
+    DL_UART_Main_setBaudRateDivisor(UART_HMI_INST, UART_HMI_IBRD_36_MHZ_9600_BAUD, UART_HMI_FBRD_36_MHZ_9600_BAUD);
+
+
+    /* Configure Interrupts */
+    DL_UART_Main_enableInterrupt(UART_HMI_INST,
+                                 DL_UART_MAIN_INTERRUPT_EOT_DONE |
+                                 DL_UART_MAIN_INTERRUPT_RX);
+    /* Setting the Interrupt Priority */
+    NVIC_SetPriority(UART_HMI_INST_INT_IRQN, 3);
+
+
+    DL_UART_Main_enable(UART_HMI_INST);
+}
+
+/* ADC12_0 Initialization */
+static const DL_ADC12_ClockConfig gADC12_0ClockConfig = {
+    .clockSel       = DL_ADC12_CLOCK_SYSOSC,
+    .divideRatio    = DL_ADC12_CLOCK_DIVIDE_1,
+    .freqRange      = DL_ADC12_CLOCK_FREQ_RANGE_24_TO_32,
+};
+SYSCONFIG_WEAK void SYSCFG_DL_ADC12_0_init(void)
+{
+    DL_ADC12_setClockConfig(ADC12_0_INST, (DL_ADC12_ClockConfig *) &gADC12_0ClockConfig);
+
+    DL_ADC12_initSeqSample(ADC12_0_INST,
+        DL_ADC12_REPEAT_MODE_ENABLED, DL_ADC12_SAMPLING_SOURCE_AUTO, DL_ADC12_TRIG_SRC_EVENT,
+        DL_ADC12_SEQ_START_ADDR_00, DL_ADC12_SEQ_END_ADDR_04, DL_ADC12_SAMP_CONV_RES_12_BIT,
+        DL_ADC12_SAMP_CONV_DATA_FORMAT_UNSIGNED);
+    DL_ADC12_configConversionMem(ADC12_0_INST, ADC12_0_ADCMEM_0,
+        DL_ADC12_INPUT_CHAN_13, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP1, DL_ADC12_AVERAGING_MODE_DISABLED,
+        DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_AUTO_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
+    DL_ADC12_configConversionMem(ADC12_0_INST, ADC12_0_ADCMEM_1,
+        DL_ADC12_INPUT_CHAN_6, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0, DL_ADC12_AVERAGING_MODE_DISABLED,
+        DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_AUTO_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
+    DL_ADC12_configConversionMem(ADC12_0_INST, ADC12_0_ADCMEM_2,
+        DL_ADC12_INPUT_CHAN_12, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0, DL_ADC12_AVERAGING_MODE_DISABLED,
+        DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_AUTO_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
+    DL_ADC12_configConversionMem(ADC12_0_INST, ADC12_0_ADCMEM_3,
+        DL_ADC12_INPUT_CHAN_0, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0, DL_ADC12_AVERAGING_MODE_DISABLED,
+        DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_AUTO_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
+    DL_ADC12_configConversionMem(ADC12_0_INST, ADC12_0_ADCMEM_4,
+        DL_ADC12_INPUT_CHAN_0, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0, DL_ADC12_AVERAGING_MODE_DISABLED,
+        DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_TRIGGER_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
+    DL_ADC12_setPowerDownMode(ADC12_0_INST,DL_ADC12_POWER_DOWN_MODE_MANUAL);
+    DL_ADC12_setSampleTime0(ADC12_0_INST,8);
+    DL_ADC12_setSampleTime1(ADC12_0_INST,96);
+    DL_ADC12_setSubscriberChanID(ADC12_0_INST,ADC12_0_INST_SUB_CH);
+    /* Enable ADC12 interrupt */
+    DL_ADC12_clearInterruptStatus(ADC12_0_INST,(DL_ADC12_INTERRUPT_MEM1_RESULT_LOADED));
+    DL_ADC12_enableInterrupt(ADC12_0_INST,(DL_ADC12_INTERRUPT_MEM1_RESULT_LOADED));
+    NVIC_SetPriority(ADC12_0_INST_INT_IRQN, 2);
+    DL_ADC12_enableConversions(ADC12_0_INST);
+}
+/* ADC12_1 Initialization */
+static const DL_ADC12_ClockConfig gADC12_1ClockConfig = {
+    .clockSel       = DL_ADC12_CLOCK_SYSOSC,
+    .divideRatio    = DL_ADC12_CLOCK_DIVIDE_1,
+    .freqRange      = DL_ADC12_CLOCK_FREQ_RANGE_24_TO_32,
+};
+SYSCONFIG_WEAK void SYSCFG_DL_ADC12_1_init(void)
+{
+    DL_ADC12_setClockConfig(ADC12_1_INST, (DL_ADC12_ClockConfig *) &gADC12_1ClockConfig);
+
+    DL_ADC12_initSeqSample(ADC12_1_INST,
+        DL_ADC12_REPEAT_MODE_ENABLED, DL_ADC12_SAMPLING_SOURCE_AUTO, DL_ADC12_TRIG_SRC_EVENT,
+        DL_ADC12_SEQ_START_ADDR_00, DL_ADC12_SEQ_END_ADDR_04, DL_ADC12_SAMP_CONV_RES_12_BIT,
+        DL_ADC12_SAMP_CONV_DATA_FORMAT_UNSIGNED);
+    DL_ADC12_configConversionMem(ADC12_1_INST, ADC12_1_ADCMEM_0,
+        DL_ADC12_INPUT_CHAN_13, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP1, DL_ADC12_AVERAGING_MODE_DISABLED,
+        DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_AUTO_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
+    DL_ADC12_configConversionMem(ADC12_1_INST, ADC12_1_ADCMEM_1,
+        DL_ADC12_INPUT_CHAN_6, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0, DL_ADC12_AVERAGING_MODE_DISABLED,
+        DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_AUTO_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
+    DL_ADC12_configConversionMem(ADC12_1_INST, ADC12_1_ADCMEM_2,
+        DL_ADC12_INPUT_CHAN_5, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0, DL_ADC12_AVERAGING_MODE_DISABLED,
+        DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_AUTO_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
+    DL_ADC12_configConversionMem(ADC12_1_INST, ADC12_1_ADCMEM_3,
+        DL_ADC12_INPUT_CHAN_4, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0, DL_ADC12_AVERAGING_MODE_DISABLED,
+        DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_AUTO_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
+    DL_ADC12_configConversionMem(ADC12_1_INST, ADC12_1_ADCMEM_4,
+        DL_ADC12_INPUT_CHAN_7, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0, DL_ADC12_AVERAGING_MODE_DISABLED,
+        DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_TRIGGER_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
+    DL_ADC12_setSampleTime0(ADC12_1_INST,8);
+    DL_ADC12_setSampleTime1(ADC12_1_INST,96);
+    DL_ADC12_setSubscriberChanID(ADC12_1_INST,ADC12_1_INST_SUB_CH);
+    DL_ADC12_enableConversions(ADC12_1_INST);
+}
+
+/* COMP_0 Initialization */
+static const DL_COMP_Config gCOMP_0Config = {
+    .channelEnable = DL_COMP_ENABLE_CHANNEL_POS,
+    .mode          = DL_COMP_MODE_FAST,
+    .negChannel    = DL_COMP_IMSEL_CHANNEL_1,
+    .posChannel    = DL_COMP_IPSEL_CHANNEL_1,
+    .hysteresis    = DL_COMP_HYSTERESIS_NONE,
+    .polarity      = DL_COMP_POLARITY_INV
+};
+static const DL_COMP_RefVoltageConfig gCOMP_0VRefConfig = {
+    .mode           = DL_COMP_REF_MODE_STATIC,
+    .source         = DL_COMP_REF_SOURCE_VDDA_DAC,
+    .terminalSelect = DL_COMP_REF_TERMINAL_SELECT_NEG,
+    .controlSelect  = DL_COMP_DAC_CONTROL_SW,
+    .inputSelect    = DL_COMP_DAC_INPUT_DACCODE0
+};
+
+SYSCONFIG_WEAK void SYSCFG_DL_COMP_0_init(void)
+{
+    DL_COMP_init(COMP_0_INST, (DL_COMP_Config *) &gCOMP_0Config);
+    DL_COMP_refVoltageInit(COMP_0_INST, (DL_COMP_RefVoltageConfig *) &gCOMP_0VRefConfig);
+    DL_COMP_setDACCode0(COMP_0_INST, COMP_0_DACCODE0);
+
+    DL_COMP_enable(COMP_0_INST);
+
+}
+
+/* COMP_FLEDCHECK Initialization */
+static const DL_COMP_Config gCOMP_FLEDCHECKConfig = {
+    .channelEnable = DL_COMP_ENABLE_CHANNEL_POS,
+    .mode          = DL_COMP_MODE_FAST,
+    .negChannel    = DL_COMP_IMSEL_CHANNEL_0,
+    .posChannel    = DL_COMP_IPSEL_CHANNEL_0,
+    .hysteresis    = DL_COMP_HYSTERESIS_10,
+    .polarity      = DL_COMP_POLARITY_NON_INV
+};
+static const DL_COMP_RefVoltageConfig gCOMP_FLEDCHECKVRefConfig = {
+    .mode           = DL_COMP_REF_MODE_STATIC,
+    .source         = DL_COMP_REF_SOURCE_VDDA_DAC,
+    .terminalSelect = DL_COMP_REF_TERMINAL_SELECT_NEG,
+    .controlSelect  = DL_COMP_DAC_CONTROL_SW,
+    .inputSelect    = DL_COMP_DAC_INPUT_DACCODE0
+};
+
+SYSCONFIG_WEAK void SYSCFG_DL_COMP_FLEDCHECK_init(void)
+{
+    DL_COMP_init(COMP_FLEDCHECK_INST, (DL_COMP_Config *) &gCOMP_FLEDCHECKConfig);
+    DL_COMP_enableOutputFilter(COMP_FLEDCHECK_INST,DL_COMP_FILTER_DELAY_70);
+    DL_COMP_refVoltageInit(COMP_FLEDCHECK_INST, (DL_COMP_RefVoltageConfig *) &gCOMP_FLEDCHECKVRefConfig);
+    DL_COMP_setDACCode0(COMP_FLEDCHECK_INST, COMP_FLEDCHECK_DACCODE0);
+    DL_COMP_enableInterrupt(COMP_FLEDCHECK_INST, (DL_COMP_INTERRUPT_OUTPUT_EDGE
+		 | DL_COMP_INTERRUPT_OUTPUT_EDGE_INV));
+
+    DL_COMP_enable(COMP_FLEDCHECK_INST);
+
+}
+
+
+static const DL_OPA_Config gOPA_BPHASEConfig0 = {
+    .pselChannel    = DL_OPA_PSEL_IN1_POS,
+    .nselChannel    = DL_OPA_NSEL_IN1_NEG,
+    .mselChannel    = DL_OPA_MSEL_OPEN,
+    .gain           = DL_OPA_GAIN_N0_P1,
+    .outputPinState = DL_OPA_OUTPUT_PIN_ENABLED,
+    .choppingMode   = DL_OPA_CHOPPING_MODE_DISABLE,
+};
+
+SYSCONFIG_WEAK void SYSCFG_DL_OPA_BPHASE_init(void)
+{
+    DL_OPA_init(OPA_BPHASE_INST, (DL_OPA_Config *) &gOPA_BPHASEConfig0);
+    DL_OPA_setGainBandwidth(OPA_BPHASE_INST, DL_OPA_GBW_HIGH);
+
+    DL_OPA_enable(OPA_BPHASE_INST);
+}
+static const DL_OPA_Config gOPA_CPHASEConfig0 = {
+    .pselChannel    = DL_OPA_PSEL_IN1_POS,
+    .nselChannel    = DL_OPA_NSEL_IN1_NEG,
+    .mselChannel    = DL_OPA_MSEL_OPEN,
+    .gain           = DL_OPA_GAIN_N0_P1,
+    .outputPinState = DL_OPA_OUTPUT_PIN_ENABLED,
+    .choppingMode   = DL_OPA_CHOPPING_MODE_DISABLE,
+};
+
+SYSCONFIG_WEAK void SYSCFG_DL_OPA_CPHASE_init(void)
+{
+    DL_OPA_init(OPA_CPHASE_INST, (DL_OPA_Config *) &gOPA_CPHASEConfig0);
+    DL_OPA_setGainBandwidth(OPA_CPHASE_INST, DL_OPA_GBW_HIGH);
+
+    DL_OPA_enable(OPA_CPHASE_INST);
+}
+
+SYSCONFIG_WEAK void SYSCFG_DL_SYSTICK_init(void)
+{
+    /*
+     * Initializes the SysTick period to 1.00 ms,
+     * enables the interrupt, and starts the SysTick Timer
+     */
+    DL_SYSTICK_config(72000);
+}
+
+static const DL_DAC12_Config gDAC12Config = {
+    .outputEnable              = DL_DAC12_OUTPUT_ENABLED,
+    .resolution                = DL_DAC12_RESOLUTION_12BIT,
+    .representation            = DL_DAC12_REPRESENTATION_BINARY,
+    .voltageReferenceSource    = DL_DAC12_VREF_SOURCE_VDDA_VSSA,
+    .amplifierSetting          = DL_DAC12_AMP_ON,
+    .fifoEnable                = DL_DAC12_FIFO_DISABLED,
+    .fifoTriggerSource         = DL_DAC12_FIFO_TRIGGER_SAMPLETIMER,
+    .dmaTriggerEnable          = DL_DAC12_DMA_TRIGGER_DISABLED,
+    .dmaTriggerThreshold       = DL_DAC12_FIFO_THRESHOLD_ONE_QTR_EMPTY,
+    .sampleTimeGeneratorEnable = DL_DAC12_SAMPLETIMER_DISABLE,
+    .sampleRate                = DL_DAC12_SAMPLES_PER_SECOND_500,
+};
+SYSCONFIG_WEAK void SYSCFG_DL_DAC12_init(void)
+{
+    DL_DAC12_init(DAC0, (DL_DAC12_Config *) &gDAC12Config);
+    DL_DAC12_output12(DAC0, 2048);
+    DL_DAC12_enable(DAC0);
+}
+
+SYSCONFIG_WEAK void SYSCFG_DL_WWDT0_init(void)
+{
+    /*
+     * Initialize WWDT0 in Watchdog mode with following settings
+     *   Watchdog Source Clock = (LFCLK Freq) / (WWDT Clock Divider)
+     *                         = 32768Hz / 4 = 8.19 kHz
+     *   Watchdog Period       = (WWDT Clock Divider) ∗ (WWDT Period Count) / 32768Hz
+     *                         = 4 * 2^15 / 32768Hz = 4.00 s
+     *   Window0 Closed Period = (WWDT Period) * (Window0 Closed Percent)
+     *                         = 4.00 s * 12% = 500.00 ms
+     *   Window1 Closed Period = (WWDT Period) * (Window1 Closed Percent)
+     *                         = 4.00 s * 0% = 0.00 s
+     */
+    DL_WWDT_initWatchdogMode(WWDT0_INST, DL_WWDT_CLOCK_DIVIDE_4,
+        DL_WWDT_TIMER_PERIOD_15_BITS, DL_WWDT_RUN_IN_SLEEP,
+        DL_WWDT_WINDOW_PERIOD_12, DL_WWDT_WINDOW_PERIOD_0);
+
+    /* Set Window0 as active window */
+    DL_WWDT_setActiveWindow(WWDT0_INST, DL_WWDT_WINDOW0);
+
+}
+
+
+static const DL_MCAN_ClockConfig gMCAN0ClockConf = {
+    .clockSel = DL_MCAN_FCLK_SYSPLLCLK1,
+    .divider  = DL_MCAN_FCLK_DIV_1,
+};
+
+static const DL_MCAN_InitParams gMCAN0InitParams= {
+
+/* Initialize MCAN Init parameters.    */
+    .fdMode            = false,
+    .brsEnable         = false,
+    .txpEnable         = true,
+    .efbi              = false,
+    .pxhddisable       = false,
+    .darEnable         = false,
+    .wkupReqEnable     = true,
+    .autoWkupEnable    = true,
+    .emulationEnable   = true,
+    .tdcEnable         = true,
+    .wdcPreload        = 255,
+
+/* Transmitter Delay Compensation parameters. */
+    .tdcConfig.tdcf    = 10,
+    .tdcConfig.tdco    = 6,
+};
+
+static const DL_MCAN_ConfigParams gMCAN0ConfigParams={
+    /* Initialize MCAN Config parameters. */
+    .monEnable         = false,
+    .asmEnable         = false,
+    .tsPrescalar       = 15,
+    .tsSelect          = 0,
+    .timeoutSelect     = DL_MCAN_TIMEOUT_SELECT_CONT,
+    .timeoutPreload    = 65535,
+    .timeoutCntEnable  = false,
+    .filterConfig.rrfs = false,
+    .filterConfig.rrfe = false,
+    .filterConfig.anfe = 0,
+    .filterConfig.anfs = 0,
+};
+
+static const DL_MCAN_MsgRAMConfigParams gMCAN0MsgRAMConfigParams ={
+
+    /* Standard ID Filter List Start Address. */
+    .flssa                = MCAN0_INST_MCAN_STD_ID_FILT_START_ADDR,
+    /* List Size: Standard ID. */
+    .lss                  = MCAN0_INST_MCAN_STD_ID_FILTER_NUM,
+    /* Extended ID Filter List Start Address. */
+    .flesa                = MCAN0_INST_MCAN_EXT_ID_FILT_START_ADDR,
+    /* List Size: Extended ID. */
+    .lse                  = MCAN0_INST_MCAN_EXT_ID_FILTER_NUM,
+    /* Tx Buffers Start Address. */
+    .txStartAddr          = MCAN0_INST_MCAN_TX_BUFF_START_ADDR,
+    /* Number of Dedicated Transmit Buffers. */
+    .txBufNum             = MCAN0_INST_MCAN_TX_BUFF_SIZE,
+    .txFIFOSize           = 32,
+    /* Tx Buffer Element Size. */
+    .txBufMode            = 0,
+    .txBufElemSize        = DL_MCAN_ELEM_SIZE_8BYTES,
+    /* Tx Event FIFO Start Address. */
+    .txEventFIFOStartAddr = MCAN0_INST_MCAN_TX_EVENT_START_ADDR,
+    /* Event FIFO Size. */
+    .txEventFIFOSize      = MCAN0_INST_MCAN_TX_EVENT_SIZE,
+    /* Level for Tx Event FIFO watermark interrupt. */
+    .txEventFIFOWaterMark = 25,
+    /* Rx FIFO0 Start Address. */
+    .rxFIFO0startAddr     = MCAN0_INST_MCAN_FIFO_0_START_ADDR,
+    /* Number of Rx FIFO elements. */
+    .rxFIFO0size          = MCAN0_INST_MCAN_FIFO_0_NUM,
+    /* Rx FIFO0 Watermark. */
+    .rxFIFO0waterMark     = 25,
+    .rxFIFO0OpMode        = 0,
+    /* Rx FIFO1 Start Address. */
+    .rxFIFO1startAddr     = MCAN0_INST_MCAN_FIFO_1_START_ADDR,
+    /* Number of Rx FIFO elements. */
+    .rxFIFO1size          = MCAN0_INST_MCAN_FIFO_1_NUM,
+    /* Level for Rx FIFO 1 watermark interrupt. */
+    .rxFIFO1waterMark     = 25,
+    /* FIFO blocking mode. */
+    .rxFIFO1OpMode        = 0,
+    /* Rx Buffer Start Address. */
+    .rxBufStartAddr       = MCAN0_INST_MCAN_RX_BUFF_START_ADDR,
+    /* Rx Buffer Element Size. */
+    .rxBufElemSize        = DL_MCAN_ELEM_SIZE_8BYTES,
+    /* Rx FIFO0 Element Size. */
+    .rxFIFO0ElemSize      = DL_MCAN_ELEM_SIZE_8BYTES,
+    /* Rx FIFO1 Element Size. */
+    .rxFIFO1ElemSize      = DL_MCAN_ELEM_SIZE_8BYTES,
+};
+
+
+
+static const DL_MCAN_BitTimingParams   gMCAN0BitTimes = {
+    /* Arbitration Baud Rate Pre-scaler. */
+    .nomRatePrescalar   = 0,
+    /* Arbitration Time segment before sample point. */
+    .nomTimeSeg1        = 124,
+    /* Arbitration Time segment after sample point. */
+    .nomTimeSeg2        = 17,
+    /* Arbitration (Re)Synchronization Jump Width Range. */
+    .nomSynchJumpWidth  = 17,
+    /* Data Baud Rate Pre-scaler. */
+    .dataRatePrescalar  = 0,
+    /* Data Time segment before sample point. */
+    .dataTimeSeg1       = 0,
+    /* Data Time segment after sample point. */
+    .dataTimeSeg2       = 0,
+    /* Data (Re)Synchronization Jump Width.   */
+    .dataSynchJumpWidth = 0,
+};
+
+
+SYSCONFIG_WEAK void SYSCFG_DL_MCAN0_init(void) {
+    DL_MCAN_RevisionId revid_MCAN0;
+
+    DL_MCAN_enableModuleClock(MCAN0_INST);
+
+    DL_MCAN_setClockConfig(MCAN0_INST, (DL_MCAN_ClockConfig *) &gMCAN0ClockConf);
+
+    /* Get MCANSS Revision ID. */
+    DL_MCAN_getRevisionId(MCAN0_INST, &revid_MCAN0);
+
+    /* Wait for Memory initialization to be completed. */
+    while(false == DL_MCAN_isMemInitDone(MCAN0_INST));
+
+    /* Put MCAN in SW initialization mode. */
+
+    DL_MCAN_setOpMode(MCAN0_INST, DL_MCAN_OPERATION_MODE_SW_INIT);
+
+    /* Wait till MCAN is not initialized. */
+    while (DL_MCAN_OPERATION_MODE_SW_INIT != DL_MCAN_getOpMode(MCAN0_INST));
+
+    /* Initialize MCAN module. */
+    DL_MCAN_init(MCAN0_INST, (DL_MCAN_InitParams *) &gMCAN0InitParams);
+
+    /* Configure MCAN module. */
+    DL_MCAN_config(MCAN0_INST, (DL_MCAN_ConfigParams*) &gMCAN0ConfigParams);
+
+    /* Configure Bit timings. */
+    DL_MCAN_setBitTime(MCAN0_INST, (DL_MCAN_BitTimingParams*) &gMCAN0BitTimes);
+
+    /* Configure Message RAM Sections */
+    DL_MCAN_msgRAMConfig(MCAN0_INST, (DL_MCAN_MsgRAMConfigParams*) &gMCAN0MsgRAMConfigParams);
+
+
+
+    /* Set Extended ID Mask. */
+    DL_MCAN_setExtIDAndMask(MCAN0_INST, MCAN0_INST_MCAN_EXT_ID_AND_MASK );
+
+    /* Loopback mode */
+
+    /* Take MCAN out of the SW initialization mode */
+    DL_MCAN_setOpMode(MCAN0_INST, DL_MCAN_OPERATION_MODE_NORMAL);
+
+    while (DL_MCAN_OPERATION_MODE_NORMAL != DL_MCAN_getOpMode(MCAN0_INST));
+
+    /* Enable MCAN mopdule Interrupts */
+    DL_MCAN_enableIntr(MCAN0_INST, MCAN0_INST_MCAN_INTERRUPTS, 1U);
+
+    DL_MCAN_selectIntrLine(MCAN0_INST, DL_MCAN_INTR_MASK_ALL, DL_MCAN_INTR_LINE_NUM_1);
+    DL_MCAN_enableIntrLine(MCAN0_INST, DL_MCAN_INTR_LINE_NUM_1, 1U);
+
+    /* Enable MSPM0 MCAN interrupt */
+    DL_MCAN_clearInterruptStatus(MCAN0_INST,(DL_MCAN_MSP_INTERRUPT_LINE1));
+    DL_MCAN_enableInterrupt(MCAN0_INST,(DL_MCAN_MSP_INTERRUPT_LINE1));
+
+}
+