Ver código fonte

1,按照小牙盘原协议返回用户参数1、用户参数2、马达参数,以适配现有小牙盘测试设备;
2,转把限速、助力限速、Walk限速单位改为0.1km/h,待测。

dd 3 meses atrás
pai
commit
73ad563b90

+ 7 - 7
3.BasicFunction/Include/AssistCurve.h

@@ -41,20 +41,20 @@
 #define Q14_1                           16384 //   Q14(1)=16384
 
 #define TORQUE2PU                       1165    //  Q20 1<<20/TORQUEBASE  = (1<<20)/900
-#define BIKE_SPEED_IQLIMIT_THRESHOLD1   (ASS_SPD_LIMIT>>4)                  // Km/h
-#define BIKE_SPEED_IQLIMIT_THRESHOLD2   (BIKE_SPEED_IQLIMIT_THRESHOLD1 + 2) // Km/h
+#define BIKE_SPEED_IQLIMIT_THRESHOLD1   (ASS_SPD_LIMIT >> 4)                  // 0.1Km/h
+#define BIKE_SPEED_IQLIMIT_THRESHOLD2   (BIKE_SPEED_IQLIMIT_THRESHOLD1 + 20)  // 0.1Km/h
 //档位限速  BIKE_SPDLIMIT_EN
 #if(BIKE_TORQUESPDLIMIT_EN!=0)
 #define BIKE_SPEED_IQLIMIT_Gear1_S  (BIKE_SPEED_IQLIMIT_THRESHOLD1*12/25)    // Km/h
-#define BIKE_SPEED_IQLIMIT_Gear1_E   (BIKE_SPEED_IQLIMIT_Gear1_S + 2) // Km/h
+#define BIKE_SPEED_IQLIMIT_Gear1_E   (BIKE_SPEED_IQLIMIT_Gear1_S + 20) // Km/h
 #define BIKE_SPEED_IQLIMIT_Gear2_S  (BIKE_SPEED_IQLIMIT_THRESHOLD1*15/25)                  // Km/h
-#define BIKE_SPEED_IQLIMIT_Gear2_E   (BIKE_SPEED_IQLIMIT_Gear2_S + 2) // Km/h
+#define BIKE_SPEED_IQLIMIT_Gear2_E   (BIKE_SPEED_IQLIMIT_Gear2_S + 20) // Km/h
 #define BIKE_SPEED_IQLIMIT_Gear3_S  (BIKE_SPEED_IQLIMIT_THRESHOLD1*18/25)                  // Km/h
-#define BIKE_SPEED_IQLIMIT_Gear3_E   (BIKE_SPEED_IQLIMIT_Gear3_S + 2) // Km/h
+#define BIKE_SPEED_IQLIMIT_Gear3_E   (BIKE_SPEED_IQLIMIT_Gear3_S + 20) // Km/h
 #define BIKE_SPEED_IQLIMIT_Gear4_S  (BIKE_SPEED_IQLIMIT_THRESHOLD1*21/25)                  // Km/h
-#define BIKE_SPEED_IQLIMIT_Gear4_E   (BIKE_SPEED_IQLIMIT_Gear4_S + 2) // Km/h
+#define BIKE_SPEED_IQLIMIT_Gear4_E   (BIKE_SPEED_IQLIMIT_Gear4_S + 20) // Km/h
 #define BIKE_SPEED_IQLIMIT_Gear5_S  (BIKE_SPEED_IQLIMIT_THRESHOLD1 )                  // Km/h
-#define BIKE_SPEED_IQLIMIT_Gear5_E   (BIKE_SPEED_IQLIMIT_Gear5_S + 2) // Km/h
+#define BIKE_SPEED_IQLIMIT_Gear5_E   (BIKE_SPEED_IQLIMIT_Gear5_S + 20) // Km/h
 #endif
 ////////////////////////////////   just for Assist Module     It may has bug when u used in other Module//////////////
 #define BIKE_NONEOBCEBNABLE           0x00     //0xAAAA-支持,其他不支持

+ 242 - 162
3.BasicFunction/Include/canAppl.h

@@ -64,31 +64,31 @@ typedef enum
  */
 typedef struct
 {
-    uint16_t                BikeSpeed;      ///>车速 0.1km/h,地址偏移0
-    int16_t                 MotorSpeed;     ///>输出转速 1rpm,地址偏移2
-    uint16_t                Power;          ///>电功率 1W,地址偏移4
-    uint16_t                BusVoltage;     ///>母线电压 1mV,地址偏移6
-    uint16_t                BusCurrent;     ///>母线电流 1mA,地址偏移8
-    uint8_t                 Cadence;        ///>踏频 1rpm,地址偏移10
-    uint8_t                 Torque;         ///>踩踏力矩 1Nm,地址偏移11
+    UWORD                BikeSpeed;      ///>车速 0.1km/h,地址偏移0
+    SWORD                 MotorSpeed;     ///>输出转速 1rpm,地址偏移2
+    UWORD                Power;          ///>电功率 1W,地址偏移4
+    UWORD                BusVoltage;     ///>母线电压 1mV,地址偏移6
+    UWORD                BusCurrent;     ///>母线电流 1mA,地址偏移8
+    UBYTE                 Cadence;        ///>踏频 1rpm,地址偏移10
+    UBYTE                 Torque;         ///>踩踏力矩 1Nm,地址偏移11
     MC_CadenceDir_Struct_t  CadenceDir;     ///>踩踏方向 0-正,1-反,2-停止,地址偏移12
-    uint8_t                 GearSt;         ///>助力档位,地址偏移13
+    UBYTE                 GearSt;         ///>助力档位,地址偏移13
     MC_LightSwitch_Struct_t LightSwitch;    ///>灯开关 0xF0-关,0xF1-开,地址偏移14
-    uint8_t                 SOC;            ///>剩余电量 1%,地址偏移15
-    uint16_t                RemainDistance; ///>续航里程 1km,地址偏移16
-                                            //	uint8_t RS1[2];
-    uint16_t TorqueReg;                        ///>力矩传感器AD值,地址偏移18
-   // uint16_t ODO_Km;                        ///>总里程 1km,地址偏移18
-    uint8_t  PowerPerKm;                    ///>平均功耗 0.01Ah/km ,地址偏移20
-    uint8_t  T_PCB;                         ///>PCB温度 +40℃,地址偏移21
-    uint8_t  T_Coil;                        ///>绕组温度 +40℃,地址偏移22
-    uint8_t  T_MCU;                         ///>MCU温度 +40℃,地址偏移23
-    uint16_t Ride_Km;                       ///>开机后骑行里程 0.1km, 地址偏移24
-    uint16_t Ride_Time;                     ///>开机后骑行时间 1s,地址偏移26
-    uint8_t TorqueSensorData1;              ///>力矩传感器 1 原始值27
-    uint8_t TorqueSensorData2;              ///>力矩传感器 2 原始值28
-    uint8_t TorqueSensorData3;              ///>力矩传感器 3 原始值29
-    uint8_t  RS2;                        ///>预留 1bytes
+    UBYTE                 SOC;            ///>剩余电量 1%,地址偏移15
+    UWORD                RemainDistance; ///>续航里程 1km,地址偏移16
+                                            //	UBYTE RS1[2];
+    UWORD TorqueReg;                        ///>力矩传感器AD值,地址偏移18
+   // UWORD ODO_Km;                        ///>总里程 1km,地址偏移18
+    UBYTE  PowerPerKm;                    ///>平均功耗 0.01Ah/km ,地址偏移20
+    UBYTE  T_PCB;                         ///>PCB温度 +40℃,地址偏移21
+    UBYTE  T_Coil;                        ///>绕组温度 +40℃,地址偏移22
+    UBYTE  T_MCU;                         ///>MCU温度 +40℃,地址偏移23
+    UWORD Ride_Km;                       ///>开机后骑行里程 0.1km, 地址偏移24
+    UWORD Ride_Time;                     ///>开机后骑行时间 1s,地址偏移26
+    UBYTE TorqueSensorData1;              ///>力矩传感器 1 原始值27
+    UBYTE TorqueSensorData2;              ///>力矩传感器 2 原始值28
+    UBYTE TorqueSensorData3;              ///>力矩传感器 3 原始值29
+    UBYTE  RS2;                        ///>预留 1bytes
 
 } MC_RunInfo_Struct_t;
 
@@ -98,21 +98,21 @@ typedef struct
  */
 typedef struct
 {
-    uint8_t SysFSM1;                    //系统功能状态机1,系统状态机
-    uint8_t SysFSM2;                    //系统功能状态机2,二层状态机
-    uint8_t SysFSM3;                    //系统功能状态机3,电机状态机
-    uint8_t SysFSM4;                    //系统功能状态机4,助力状态机
-    int16_t IdRef;                      //D轴参考电流
-    int16_t IqRef;                      //Q轴参考电流
-    int16_t UdRef;                      //D轴参考电压
-    int16_t UqRef;                      //Q轴参考电压
-    uint16_t PedalTorquePer;            //踩踏瞬时力矩
-    uint16_t PedalTorqueAvg;            //踩踏时域滤波力矩
-    uint16_t PedalTorqueByCad;          //踩踏踏频滤波力矩
-    int16_t IdFdb;                      //D轴反馈电流
-    int16_t IqFdb;                      //Q轴反馈电流
-    uint16_t AssistOut;                 //助力输出值
-    uint8_t RS[8];
+    UBYTE SysFSM1;                    //系统功能状态机1,系统状态机
+    UBYTE SysFSM2;                    //系统功能状态机2,二层状态机
+    UBYTE SysFSM3;                    //系统功能状态机3,电机状态机
+    UBYTE SysFSM4;                    //系统功能状态机4,助力状态机
+    SWORD IdRef;                      //D轴参考电流
+    SWORD IqRef;                      //Q轴参考电流
+    SWORD UdRef;                      //D轴参考电压
+    SWORD UqRef;                      //Q轴参考电压
+    UWORD PedalTorquePer;            //踩踏瞬时力矩
+    UWORD PedalTorqueAvg;            //踩踏时域滤波力矩
+    UWORD PedalTorqueByCad;          //踩踏踏频滤波力矩
+    SWORD IdFdb;                      //D轴反馈电流
+    SWORD IqFdb;                      //Q轴反馈电流
+    UWORD AssistOut;                 //助力输出值
+    UBYTE RS[8];
 }MC_DebugInfo_Struct_t;
 
 /**
@@ -123,41 +123,40 @@ typedef union MC_ERRORCODE
 {
     struct
     {
-        uint32_t Protect_OverCurrent : 1;  ///>过流保护
-        uint32_t Protect_UnderVoltage : 1; ///>低压保护
-        uint32_t Protect_OverVoltage : 1;  ///>过压保护
-        uint32_t Protect_LockRotor : 1;    ///>堵转保护
-        uint32_t Protect_OverTemp : 1;     ///>过热保护
-        uint32_t Fault_BikeSpdSensor : 1;    ///>速度传感器故障
-        uint32_t Fault_TorqueSensor : 1;   ///>力矩传感器故障
-        uint32_t Fault_HallSensor : 1;     ///>霍尔传感器故障
-        uint32_t Fault_PhaseLine : 1;      ///>相线故障
-        uint32_t Fault_PCBNTC : 1;      ///>PCB温度传感器故障
-        uint32_t Fault_BMS_Check : 1;      ///>BMS校验失败
-        uint32_t Protect_MotorOverTemp : 1; ///>电机过热保护
-        //	uint32_t Fault_HMI_Check          :1;///>HMI校验失败
-        uint32_t Fault_PBU_Check : 1;       ///>PBU校验失败
-        uint32_t Fault_MCU : 1;             ///>MCU故障
-        uint32_t Fault_CadenceSensor : 1;   ///>踏频传感器故障
-        uint32_t Fault_GasSensor : 1;       ///>指拨故障
-        uint32_t Fault_MOS : 1;             ///>MOS短路
-        uint32_t Protect_VoltageChange : 1; ///>电压波动异常
-        uint32_t Fault_Circuit : 1;         ///>电路故障
-        uint32_t Fault_TE_MCU : 1;          ///>TE MCU故障
-        uint32_t Fault_TE_Circuit : 1;      ///>TE 电路故障
-        uint32_t Fault_MC_Check : 1;        ///>MC校验失败
-        uint32_t Fault_SpiPosSensor : 1;   ///>SPI位置故障
-        uint32_t Fault_Throttle : 1;         ///>转把故障
-        uint32_t RS3 : 1;
-        uint32_t RS4 : 1;
-        uint32_t RS5 : 1;
-        uint32_t RS6 : 1;
-        uint32_t RS7 : 1;
-        uint32_t RS8 : 1;
-        uint32_t RS9 : 1;
-        uint32_t RS10 : 1;
+        ULONG Protect_OverCurrent : 1;  ///>过流保护
+        ULONG Protect_UnderVoltage : 1; ///>低压保护
+        ULONG Protect_OverVoltage : 1;  ///>过压保护
+        ULONG Protect_LockRotor : 1;    ///>堵转保护
+        ULONG Protect_OverTemp : 1;     ///>过热保护
+        ULONG Fault_BikeSpdSensor : 1;    ///>速度传感器故障
+        ULONG Fault_TorqueSensor : 1;   ///>力矩传感器故障
+        ULONG Fault_HallSensor : 1;     ///>霍尔传感器故障
+        ULONG Fault_PhaseLine : 1;      ///>相线故障
+        ULONG Fault_PCBNTC : 1;      ///>PCB温度传感器故障
+        ULONG Fault_BMS_Check : 1;      ///>BMS校验失败
+        ULONG Protect_MotorOverTemp : 1; ///>电机过热保护
+        ULONG Fault_PBU_Check : 1;       ///>PBU校验失败
+        ULONG Fault_MCU : 1;             ///>MCU故障
+        ULONG Fault_CadenceSensor : 1;   ///>踏频传感器故障
+        ULONG Fault_GasSensor : 1;       ///>指拨故障
+        ULONG Fault_MOS : 1;             ///>MOS短路
+        ULONG Protect_VoltageChange : 1; ///>电压波动异常
+        ULONG Fault_Circuit : 1;         ///>电路故障
+        ULONG Fault_TE_MCU : 1;          ///>TE MCU故障
+        ULONG Fault_TE_Circuit : 1;      ///>TE 电路故障
+        ULONG Fault_MC_Check : 1;        ///>MC校验失败
+        ULONG Fault_SpiPosSensor : 1;   ///>SPI位置故障
+        ULONG Fault_Throttle : 1;         ///>转把故障
+        ULONG RS3 : 1;
+        ULONG RS4 : 1;
+        ULONG RS5 : 1;
+        ULONG RS6 : 1;
+        ULONG RS7 : 1;
+        ULONG RS8 : 1;
+        ULONG RS9 : 1;
+        ULONG RS10 : 1;
     } ERROR_Bit;
-    uint32_t Code;
+    ULONG Code;
 } MC_ErrorCode_Struct_t;
 
 /**
@@ -166,31 +165,30 @@ typedef union MC_ERRORCODE
  */
 typedef struct MC_ERROR_CNT_RECORD
 {
-    uint32_t ulAlamCntTimeCnt_1ms;
-
-    uint16_t Protect_OverCurrentCnt;  ///>过流保护
-    uint16_t Protect_UnderVoltageCnt; ///>低压保护
-    uint16_t Protect_OverVoltageCnt;  ///>过压保护
-    uint16_t Protect_LockRotorCnt;    ///>堵转保护
-    uint16_t Protect_OverTempCnt;     ///>过热保护
-    uint16_t Fault_SpeedSensorCnt;    ///>速度传感器故障
-    uint16_t Fault_TorqueSensorCnt;   ///>力矩传感器故障
-    uint16_t Fault_HallSensorCnt;     ///>霍尔传感器故障
-    uint16_t Fault_PhaseLineCnt;      ///>相线故障
-    uint16_t Fault_NtcSensorCnt;      ///>温度传感器故障
-    uint16_t Fault_BMS_CheckCnt;      ///>BMS校验失败
-    uint16_t Protect_MotorOverTempCnt; ///>电机过热保护
-    // uint16_t Fault_HMI_Check          :1;///>HMI校验失败
-    uint16_t Fault_PBU_CheckCnt;       ///>PBU校验失败
-    uint16_t Fault_MCUCnt;             ///>MCU故障
-    uint16_t Fault_CadenceSensorCnt;   ///>踏频传感器故障
-    uint16_t Fault_GasSensorCnt;       ///>指拨故障
-    uint16_t Fault_MOSCnt;             ///>MOS短路
-    uint16_t Protect_VoltageChangeCnt; ///>电压波动异常
-    uint16_t Fault_CircuitCnt;         ///>电路故障
-    uint16_t Fault_TE_MCUCnt;          ///>TE MCU故障
-    uint16_t Fault_TE_CircuitCnt;      ///>TE 电路故障
-    uint16_t Fault_MC_CheckCnt;        ///>MC校验失败
+    ULONG ulAlamCntTimeCnt_1ms;
+
+    UWORD Protect_OverCurrentCnt;  ///>过流保护
+    UWORD Protect_UnderVoltageCnt; ///>低压保护
+    UWORD Protect_OverVoltageCnt;  ///>过压保护
+    UWORD Protect_LockRotorCnt;    ///>堵转保护
+    UWORD Protect_OverTempCnt;     ///>过热保护
+    UWORD Fault_SpeedSensorCnt;    ///>速度传感器故障
+    UWORD Fault_TorqueSensorCnt;   ///>力矩传感器故障
+    UWORD Fault_HallSensorCnt;     ///>霍尔传感器故障
+    UWORD Fault_PhaseLineCnt;      ///>相线故障
+    UWORD Fault_NtcSensorCnt;      ///>温度传感器故障
+    UWORD Fault_BMS_CheckCnt;      ///>BMS校验失败
+    UWORD Protect_MotorOverTempCnt; ///>电机过热保护
+    UWORD Fault_PBU_CheckCnt;       ///>PBU校验失败
+    UWORD Fault_MCUCnt;             ///>MCU故障
+    UWORD Fault_CadenceSensorCnt;   ///>踏频传感器故障
+    UWORD Fault_GasSensorCnt;       ///>指拨故障
+    UWORD Fault_MOSCnt;             ///>MOS短路
+    UWORD Protect_VoltageChangeCnt; ///>电压波动异常
+    UWORD Fault_CircuitCnt;         ///>电路故障
+    UWORD Fault_TE_MCUCnt;          ///>TE MCU故障
+    UWORD Fault_TE_CircuitCnt;      ///>TE 电路故障
+    UWORD Fault_MC_CheckCnt;        ///>MC校验失败
 } MC_ErrorCode_CNT_RECORD_Struct_t;
 
 /**
@@ -201,16 +199,16 @@ typedef union ONLINE_STATUS
 {
     struct
     {
-        uint8_t BMS_OffLine : 1; // BMS离线
-        uint8_t PBU_OffLine : 1; // PBU离线
-        uint8_t HMI_OffLine : 1; // HMI离线
-        uint8_t RS1 : 1;
-        uint8_t RS2 : 1;
-        uint8_t RS3 : 1;
-        uint8_t RS4 : 1;
-        uint8_t RS5 : 1;
+        UBYTE BMS_OffLine : 1; // BMS离线
+        UBYTE PBU_OffLine : 1; // PBU离线
+        UBYTE HMI_OffLine : 1; // HMI离线
+        UBYTE RS1 : 1;
+        UBYTE RS2 : 1;
+        UBYTE RS3 : 1;
+        UBYTE RS4 : 1;
+        UBYTE RS5 : 1;
     } Status_Bit;
-    uint8_t Status;
+    UBYTE Status;
 } OnLine_Status_Struct_t;
 
 /**
@@ -226,18 +224,16 @@ typedef struct
     char ProductLabel[32]; ///>电机标签 ASCII,0x2E结束,无效填充0x20
 } MC_VerInfo_Struct_t;
 
-
-
 /**
  * @brief MC骑行历史信息,占用空间16bytes
  *
  */
 typedef struct
 {
-    uint32_t ODO_Km;    ///>ODO里程,地址偏移0
-    uint32_t ODO_Time;  ///>ODO时间,地址偏移4
-    uint32_t TRIP_Km;   ///>TRIP里程,地址偏移8
-    uint32_t TRIP_Time; ///>TRIP时间,地址偏移12
+    ULONG ODO_Km;    ///>ODO里程,地址偏移0
+    ULONG ODO_Time;  ///>ODO时间,地址偏移4
+    ULONG TRIP_Km;   ///>TRIP里程,地址偏移8
+    ULONG TRIP_Time; ///>TRIP时间,地址偏移12
 } MC_RideLog_Struct_t;
 
 /**
@@ -248,18 +244,18 @@ typedef union BMS_STATUS
 {
     struct
     {
-        uint8_t Charge : 1;    ///>充电
-        uint8_t Discharge : 1; ///>放电
-        uint8_t RS1 : 1;
-        uint8_t RS2 : 1;
-        uint8_t RS3 : 1;
-        uint8_t RS4 : 1;
-        uint8_t RS5 : 1;
-        uint8_t RS6 : 1;
+        UBYTE Charge : 1;    ///>充电
+        UBYTE Discharge : 1; ///>放电
+        UBYTE RS1 : 1;
+        UBYTE RS2 : 1;
+        UBYTE RS3 : 1;
+        UBYTE RS4 : 1;
+        UBYTE RS5 : 1;
+        UBYTE RS6 : 1;
 
     } Status_Bit;
 
-    uint8_t Status;
+    UBYTE Status;
 
 } BMS_STATUS_Struct_t;
 
@@ -269,16 +265,16 @@ typedef union BMS_STATUS
  */
 typedef struct
 {
-    uint16_t            Voltage;  ///>电压 1mV,地址偏移0
-    uint16_t            Current;  ///>电流 1mA,地址偏移2
-    uint16_t            RC;       ///>剩余容量 1mAh,地址偏移4
-    uint16_t            FCC;      ///>满充容量 1mAh,地址偏移6
-    uint8_t             Cell_NTC; ///>电芯温度 +40℃,地址偏移8
-    uint8_t             SOC;      ///>剩余电量 1%,地址偏移9
+    UWORD             Voltage;  ///>电压 1mV,地址偏移0
+    UWORD             Current;  ///>电流 1mA,地址偏移2
+    UWORD             RC;       ///>剩余容量 1mAh,地址偏移4
+    UWORD             FCC;      ///>满充容量 1mAh,地址偏移6
+    UBYTE             Cell_NTC; ///>电芯温度 +40℃,地址偏移8
+    UBYTE             SOC;      ///>剩余电量 1%,地址偏移9
     BMS_STATUS_Struct_t Status;   ///>运行状态,地址偏移10
-    uint8_t             SOH;      ///>电池健康电量,地址偏移11
-    uint16_t            RecyclNm; ///>循环次数,地址偏移12
-    uint8_t             RS[2];
+    UBYTE             SOH;      ///>电池健康电量,地址偏移11
+    UWORD             RecyclNm; ///>循环次数,地址偏移12
+    UBYTE             RS[2];
 } BMS_RunInfo_Struct_t;
 
 /**
@@ -313,22 +309,106 @@ typedef struct
  */
 typedef struct
 {
-    uint8_t                Torque;     ///>踩踏力矩 1Nm,地址偏移0
+    UBYTE                Torque;     ///>踩踏力矩 1Nm,地址偏移0
     MC_CadenceDir_Struct_t CadenceDir; ///>踩踏方向 0-正,1-反,2-停止,地址偏移1
-    uint8_t                Cadence;    ///>踏频 1rpm,地址偏移2
-    uint8_t                GearSt;     ///>助力档位,地址偏移3
-    uint8_t                T_PCB;      ///>PCB温度 +40℃,地址偏移4
-    uint8_t                T_Coil;     ///>绕组温度 +40℃,地址偏移5
-    uint16_t               BusVoltage; ///>母线电压 1mV,地址偏移6
-    uint16_t               BusCurrent; ///>母线电流 1mA,地址偏移8
-    int16_t                MotorSpeed; ///>输出转速 1rpm,地址偏移10
-    uint16_t               BikeSpeed;  ///>车速 0.1km/h,地址偏移12
-    int16_t                IqCurrent;  ///> Iq电流反馈 1mA 地址偏移14
-    uint8_t                AlarmCode;  ///> 故障码最多8个故障 地址偏移16
-    uint8_t                RS2;        ///> 预留 地址偏移17
+    UBYTE                Cadence;    ///>踏频 1rpm,地址偏移2
+    UBYTE                GearSt;     ///>助力档位,地址偏移3
+    UBYTE                T_PCB;      ///>PCB温度 +40℃,地址偏移4
+    UBYTE                T_Coil;     ///>绕组温度 +40℃,地址偏移5
+    UWORD                BusVoltage; ///>母线电压 1mV,地址偏移6
+    UWORD                BusCurrent; ///>母线电流 1mA,地址偏移8
+    SWORD                MotorSpeed; ///>输出转速 1rpm,地址偏移10
+    UWORD                BikeSpeed;  ///>车速 0.1km/h,地址偏移12
+    SWORD                IqCurrent;  ///> Iq电流反馈 1mA 地址偏移14
+    UBYTE                AlarmCode;  ///> 故障码最多8个故障 地址偏移16
+    UBYTE                RS2;        ///> 预留 地址偏移17
 
 } MC_RunInfoToCDL_Struct_t;
 
+/**
+ * @brief 小牙盘原协议
+ *
+ */
+typedef struct
+{
+    UBYTE Assist_K_GAIN;  //0.01 50-150
+    UBYTE StarModel_GAIN; //0.01 50-150
+}UserAdjParam1_Struct_t;
+
+typedef struct
+{
+    UBYTE MaxCurrent_K_GAIN;  //0.01 50-150
+    UBYTE MaxTorque_K_GAIN;   //0.01 50-150
+}UserAdjParam2_Struct_t;
+
+//用户配置参数1,占用空间32bytes
+typedef struct
+{
+    UBYTE GasCtrlMode_Param;      //指拨模式参数,地址偏移0
+    UBYTE StarModel;              //启动模式,地址偏移1
+    UWORD StopTime;              //停机时间 ms,地址偏移2
+    UBYTE SpeedLimit;             //限速 km/h,地址偏移4
+    UBYTE Deceleration;           //下降速度,地址偏移5
+    UBYTE TeethNum_F;             //前齿数 T,地址偏移6
+    UBYTE TeethNum_B;             //后齿数 T,地址偏移7
+    UBYTE CurrentLimit;           //限流 A,地址偏移8
+    UBYTE TempTH_Alarm;           //高温预警值 +40℃,地址偏移9
+    UBYTE TempTH_Protect;         //高温保护值 +40℃,地址偏移10
+    UBYTE NoPBU_Flag;             //0x55-不支持,0x-AA支持,地址偏移11
+    UBYTE WheelSize;              //轮胎周长 cm,地址偏移12
+    UBYTE SerialNum;              //系列号,地址偏移13
+    UserAdjParam1_Struct_t UserAdjParam1_ECO;    //用户微调助力比增益和加速度增益,地址偏移14
+    UserAdjParam1_Struct_t UserAdjParam1_NORM;   //用户微调助力比增益和加速度增益,地址偏移16
+    UserAdjParam1_Struct_t UserAdjParam1_SPORT;  //用户微调助力比增益和加速度增益,地址偏移18
+    UserAdjParam1_Struct_t UserAdjParam1_TURBO;  //用户微调助力比增益和加速度增益,地址偏移20
+    UserAdjParam1_Struct_t UserAdjParam1_SMART;  //用户微调助力比增益和加速度增益,地址偏移22
+    UBYTE SpeedSensorPoles;                    //速度传感器极数,地址偏移24
+    UBYTE CadenceStarNum;                      //踏频启动信号个数,地址偏移25
+    UBYTE SpeedSignal;         //0x55-车轮触发,0x-AA踏频计算,0xEE-通讯获取车轮旋转周期,地址偏移26
+    SBYTE WheelSizeAdj;                         //周长微调值,地址偏移27
+    UWORD UV_Protect_TH;                      //低压保护值,地址偏移28
+    UBYTE WalkMode_SpeedLimit;                 //推行模式限速,地址偏移30
+    UBYTE WalkMode_MotorSpeedSet;              //推行模式电机转速设置,地址偏移31
+}MC_ConfigParam1_Struct_t;
+
+//用户配置参数2,占用空间32bytes
+typedef struct
+{
+    SWORD ZeroAngle_Pitch;         //俯仰角零度偏移,地址偏移0
+    SWORD ZeroAngle_Roll;          //横滚角零度偏移,地址偏移2
+    UBYTE UseAttitudeAngle_Flag;   //支持姿态角度传感器标志,地址偏移4
+    UBYTE MC_Light_Mode;                         //前后灯功能,地址偏移5
+    UBYTE HeadLightVol;                          //前灯电压
+    UBYTE TailLightVol;                          //后灯电压
+    UWORD u16OverspeedWarnVal;                  //超速告警值
+    UWORD u16EffectVal;                         //尾灯亮起有效值
+    UWORD u16Prediv;                            //尾灯亮起时间的分频系数
+    SBYTE   SpeedLimitStartAdj;
+    SBYTE   SpeedLimitEndAdj;
+    SBYTE SpeedLimitAdj;                           //限速微调,默认0,与限速值相同,地址偏移15
+    UBYTE RS1;                                    //预留,0x00,地址偏移16
+    UserAdjParam2_Struct_t UserAdjParam2_ECO;       //用户微调最大电流增益和最大力矩增益,地址偏移14,地址偏移18
+    UserAdjParam2_Struct_t UserAdjParam2_NORM;       //用户微调最大电流增益和最大力矩增益,地址偏移14,地址偏移20
+    UserAdjParam2_Struct_t UserAdjParam2_SPORT;     //用户微调最大电流增益和最大力矩增益,地址偏移14,地址偏移22
+    UserAdjParam2_Struct_t UserAdjParam2_TURBO;     //用户微调最大电流增益和最大力矩增益,地址偏移14,地址偏移24
+    UserAdjParam2_Struct_t UserAdjParam2_SMART;     //用户微调最大电流增益和最大力矩增益,地址偏移14,地址偏移26
+    UBYTE RS2[4];
+}MC_ConfigParam2_Struct_t;
+
+//马达配置参数,占用空间16bytes
+typedef struct
+{
+    UWORD Rate_Power;   //W,地址偏移0
+    UWORD Rate_Speed;   //rpm,地址偏移2
+    UWORD Coil_R;       //mOhm,地址偏移4
+    UWORD Coil_Lq;      //mH,地址偏移6
+    UWORD Coil_Ld;      //mH,地址偏移8
+    UWORD Back_EMF;     //Peak Voltage, mV@1000rpm,地址偏移10
+    UBYTE  Rate_Voltage; //Rate Voltage, V,地址偏移12
+    UBYTE  Pole;         //极对数
+    UBYTE  RS[2];
+}MC_MotorParam_Struct_t;
+
 /***************************************
  *
  *   Host computer Type  Definations
@@ -642,14 +722,14 @@ typedef struct
 
 typedef struct
 {
-    uint8_t uwWheelPerimeter; ///>车轮默认长度 1cm
-    uint8_t StartUpMod;      ///>1-柔和,2-正常,3-强劲,地址偏移1
-    uint8_t BikeSpeedLimit;  /// km/h
-    int8_t  DeltDiameter;    ///>有符型,单位1cm,±10.0cm  1Nm,地址偏移0
-    uint8_t AssistMod;       ///>助力模式1-2,地址偏移2
-    uint8_t AutoPowerOffTime;
-    uint8_t scDeltaBikeSpeedLimit;
-    uint8_t ubControlFunCruise;//0xaa-巡航
+    UBYTE uwWheelPerimeter; ///>车轮默认长度 1cm
+    UBYTE StartUpMod;      ///>1-柔和,2-正常,3-强劲,地址偏移1
+    UBYTE BikeSpeedLimit;  /// km/h
+    SBYTE  DeltDiameter;    ///>有符型,单位1cm,±10.0cm  1Nm,地址偏移0
+    UBYTE AssistMod;       ///>助力模式1-2,地址偏移2
+    UBYTE AutoPowerOffTime;
+    UBYTE scDeltaBikeSpeedLimit;
+    UBYTE ubControlFunCruise;//0xaa-巡航
 } OBC_SetCustomPara_Struct_t;
 
 //仪表按键状态
@@ -657,21 +737,21 @@ typedef union OBC_BUTTON_STATU
 {
     struct
     {
-        uint8_t Set : 1;    
-        uint8_t Light : 1; 
-        uint8_t Walk : 1;
-        uint8_t Dec : 1;
-        uint8_t Acc : 1;
-        uint8_t Power : 1;
-        uint8_t RS1 : 1;
-        uint8_t RS2 : 1;
+        UBYTE Set : 1;
+        UBYTE Light : 1;
+        UBYTE Walk : 1;
+        UBYTE Dec : 1;
+        UBYTE Acc : 1;
+        UBYTE Power : 1;
+        UBYTE RS1 : 1;
+        UBYTE RS2 : 1;
     } Status_Bit;
-    uint8_t KeyStatus;
+    UBYTE KeyStatus;
 } OBC_ButtonStatu_Struct_t;
 
 typedef struct
 {
-    uint8_t Reserver;
+    UBYTE Reserver;
     OBC_ButtonStatu_Struct_t ButtonStatu;
     ULONG ulButtonSetTimeCnt;
     BOOL blOBCbuttonPress;
@@ -731,8 +811,8 @@ extern OBC_ButtonStatus_Struct_t OBC_ButtonStatus;
 
 extern ULONG ulOBC_ComTimeOutCount;
 extern ULONG ulBMS_ComTimeOutCount;
-extern uint8_t MC_MotorSPD_rpm_Percent;
-extern uint8_t MC_WorkMode;
+extern UBYTE MC_MotorSPD_rpm_Percent;
+extern UBYTE MC_WorkMode;
 extern BOOL blBMSCommFault;
 
 extern UWORD LightSwitch;

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

@@ -4,7 +4,7 @@
  *  Created on: 2025年3月27日
  *      Author: zhouxiong9
  */
-#include "BikeRatioCal.h"
+#include "bikeRatioCal.h"
 
 Bike_RatioCal_Struct_t Bike_RatioCalParam = {0,0,0,0,0};
 

+ 31 - 31
3.BasicFunction/Source/CadAssist.c

@@ -265,9 +265,9 @@ void ass_voParameterInit(void)
     /** Module Coefficient Initial */
     ass_stCadAssCoef.uwWheelCircumferenceCm = ASS_BIKE_WHEEL_DIAMETER; 
     ass_stCadAssCoef.uwMechRationMotor = (UWORD)(((ULONG)ASS_BIKE_MECH_RATION*1024)/1000);
-    ass_stCadAssCoef.uwAssistMaxBikeSpeed = ASS_SPD_LIMIT + 8;
-    ass_stCadAssCoef.uwThrottleMaxBikeSpeed = ASS_THROTTLE_SPD_LIMIT + 8;
-    ass_stCadAssCoef.uwCartMaxBikeSpeed = ASS_CART_SPEED + 2;
+    ass_stCadAssCoef.uwAssistMaxBikeSpeed = ASS_SPD_LIMIT + 80;
+    ass_stCadAssCoef.uwThrottleMaxBikeSpeed = ASS_THROTTLE_SPD_LIMIT + 80;
+    ass_stCadAssCoef.uwCartMaxBikeSpeed = ASS_CART_SPEED + 20;
     ass_stCadAssCoef.uwMaxCadRpm = ASS_CAD_MAX_RPM;
     ass_stCadAssCoef.uwCadencePulses = TORQUE_NUMBERS_PULSES;//CADENCE_NUMBERS_PULSES;
     ass_stCadAssCoef.uwMotorPoles = M_POLE_PAIRS;
@@ -361,9 +361,9 @@ void ass_voAssistCoefCal(void)
     /** Motor Max Speed calculate according to bike speed limit */
 
 
-    tmp_slAssistSpdLimit = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG) ass_stCadAssCoef.uwThrottleMaxBikeSpeed + ASS_SPD_LIMIT_ERR)  >> 4;
+    tmp_slAssistSpdLimit = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG) ass_stCadAssCoef.uwThrottleMaxBikeSpeed + ASS_SPD_LIMIT_ERR)  >> 4) / 10;
     ass_stCadAssCoef.swThrottleMaxspd= (SWORD)tmp_slAssistSpdLimit;
-    tmp_slAssistSpdLimit = (SWORD)((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed + ASS_SPD_LIMIT_ERR)  >> 4);
+    tmp_slAssistSpdLimit = ((SWORD)((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed + ASS_SPD_LIMIT_ERR)  >> 4)) / 10;
     ass_stCadAssCoef.swAssistMaxSpd=(SWORD)tmp_slAssistSpdLimit;
 
    #if(THROTTLEGEAR !=0)
@@ -901,7 +901,7 @@ void ass_voAssistCmdDeal(void)
          }
          else
          {
-            tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*(SLONG)ass_stCadAssCoef.uwCartMaxBikeSpeed  >> 4;
+            tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu * (SLONG)ass_stCadAssCoef.uwCartMaxBikeSpeed >> 4) / 10;
          }
     }
     else if((ass_stCadAssParaIn.uwGearSt > 0)&&(ass_stCadAssParaIn.uwGearSt <= 5))
@@ -934,11 +934,11 @@ void ass_voAssistCmdDeal(void)
             if(ass_stCadAssParaIn.uwThrottlePercent < 650)
             {
                 /** Q15 * Q4 / Q4 = Q15 */
-                tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((((SLONG)(ass_stCadAssParaIn.uwThrottlePercent - 250)*(SLONG)(ass_MaxSpeed.MaxBikeSpeed - ASS_THROT_SPEED_MIN))/400)+ASS_THROT_SPEED_MIN)) >> 4;
+                tmp_slAssistSpdCmd = (((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((((SLONG)(ass_stCadAssParaIn.uwThrottlePercent - 250)*(SLONG)(ass_MaxSpeed.MaxBikeSpeed - ASS_THROT_SPEED_MIN))/400)+ASS_THROT_SPEED_MIN)) >> 4) / 10;
             }
             else
             {
-                tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*(SLONG)ass_MaxSpeed.MaxBikeSpeed>> 4;
+                tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*(SLONG)ass_MaxSpeed.MaxBikeSpeed >> 4) / 10;
             }
             #if 1
             tmp_slAssistSpdCmd = (tmp_slAssistSpdCmd << 10) / Bike_RatioCalParam.RatioResult; //前后飞轮传动比
@@ -947,11 +947,11 @@ void ass_voAssistCmdDeal(void)
             if(ass_stCadAssParaIn.uwThrottlePercent < 650) //850
             {
                 /** Q15 * Q4 / Q4 = Q15 */
-                tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((((SLONG)(ass_stCadAssParaIn.uwThrottlePercent - 250)*(SLONG)(ass_stCadAssCoef.uwThrottleMaxBikeSpeed - ASS_THROT_SPEED_MIN))/400)+ASS_THROT_SPEED_MIN)) >> 4;
+                tmp_slAssistSpdCmd = (((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((((SLONG)(ass_stCadAssParaIn.uwThrottlePercent - 250)*(SLONG)(ass_stCadAssCoef.uwThrottleMaxBikeSpeed - ASS_THROT_SPEED_MIN))/400)+ASS_THROT_SPEED_MIN)) >> 4) / 10;
             }
             else
             {
-                tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*(SLONG)ass_stCadAssCoef.uwThrottleMaxBikeSpeed >> 4;
+                tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*(SLONG)ass_stCadAssCoef.uwThrottleMaxBikeSpeed >> 4) / 10;
             }
             #if 1
             tmp_slAssistSpdCmd = (tmp_slAssistSpdCmd << 10) / Bike_RatioCalParam.RatioResult; //前后飞轮传动比
@@ -974,15 +974,15 @@ void ass_voAssistCmdDeal(void)
                #if(INTELLIGENCADGEAR_EN!=0)   
                   //  tmp_slAssistCadSpdCmd = (SLONG)ass_voCadCmdDeal();
                     #if(CADASSISTGEAR  !=0)
-                           tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearOne )  >> 4;
+                           tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearOne )  >> 4) / 10;
                     #else
-                           tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)ASS_GEAR1_SPEED + 4)  >> 4;
+                           tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)ASS_GEAR1_SPEED + 4)  >> 4) / 10;
                     #endif
               #else
                     #if(CADASSISTGEAR !=0)
-                        tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearOne )  >> 4;
+                        tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearOne )  >> 4) / 10;
                      #else
-                        tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)ASS_GEAR1_SPEED + 4)  >> 4;
+                        tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)ASS_GEAR1_SPEED + 4)  >> 4) / 10;
                     #endif
                 #endif
                 }
@@ -993,16 +993,16 @@ void ass_voAssistCmdDeal(void)
                   #if(INTELLIGENCADGEAR_EN!=0)   
                    // tmp_slAssistCadSpdCmd = (SLONG)ass_voCadCmdDeal();
                     #if(CADASSISTGEAR !=0)
-                           tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearTwo )  >> 4;
+                           tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearTwo )  >> 4 / 10;
                     #else
-                           tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed - ASS_GEAR1_SPEED)>>2) + ASS_GEAR1_SPEED)  >> 4;
+                           tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed - ASS_GEAR1_SPEED)>>2) + ASS_GEAR1_SPEED)  >> 4) / 10;
                     #endif
 
                #else
                     #if(CADASSISTGEAR !=0)
-                        tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearTwo )  >> 4;
+                        tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearTwo )  >> 4) / 10;
                     #else
-                        tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed - ASS_GEAR1_SPEED)>>2) + ASS_GEAR1_SPEED)  >> 4;
+                        tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed - ASS_GEAR1_SPEED)>>2) + ASS_GEAR1_SPEED)  >> 4) / 10;
                    #endif
                #endif
                 }
@@ -1014,15 +1014,15 @@ void ass_voAssistCmdDeal(void)
                   //  tmp_slAssistCadSpdCmd = (SLONG)ass_voCadCmdDeal();
 
                         #if(CADASSISTGEAR !=0)
-                           tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearThree )  >> 4;
+                           tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearThree )  >> 4) / 10;
                         #else
-                          tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed - ASS_GEAR1_SPEED)>>1) + ASS_GEAR1_SPEED)  >> 4;
+                          tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed - ASS_GEAR1_SPEED)>>1) + ASS_GEAR1_SPEED)  >> 4) / 10;
                     #endif
                #else
                     #if(CADASSISTGEAR !=0)
-                        tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearThree )  >> 4;
+                        tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearThree )  >> 4) / 10;
                     #else
-                       tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed - ASS_GEAR1_SPEED)>>1) + ASS_GEAR1_SPEED)  >> 4;
+                       tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed - ASS_GEAR1_SPEED)>>1) + ASS_GEAR1_SPEED)  >> 4) / 10;
                     #endif
                #endif
                 }
@@ -1033,17 +1033,17 @@ void ass_voAssistCmdDeal(void)
                 #if(INTELLIGENCADGEAR_EN!=0)    
                    // tmp_slAssistCadSpdCmd = (SLONG)ass_voCadCmdDeal();
                         #if(CADASSISTGEAR !=0)
-                          tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearFour )  >> 4;
+                          tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearFour )  >> 4) / 10;
                        #else
                          // tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed - (((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed - ASS_GEAR1_SPEED)>>2))  >> 4;
-                          tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*(SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed  >> 4;
+                          tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*(SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed  >> 4 / 10;
                     #endif
                 #else
                 //tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed - (((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed - ASS_GEAR1_SPEED)>>2))  >> 4;
                         #if(CADASSISTGEAR !=0)
-                           tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearFour )  >> 4;
+                           tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearFour )  >> 4) / 10;
                         #else
-                           tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed - (((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed - ASS_GEAR1_SPEED)>>2))  >> 4;
+                           tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed - (((SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed - ASS_GEAR1_SPEED)>>2))  >> 4) / 10;
                           // tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*(SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed  >> 4;
                         #endif
                     #endif
@@ -1066,9 +1066,9 @@ void ass_voAssistCmdDeal(void)
                     
                     #else
                       #if(CADASSISTGEAR !=0)
-                          tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearFive )  >> 4;
+                          tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*((SLONG)CadAssistSped.uwGearFive )  >> 4) / 10;
                       #else
-                          tmp_slAssistSpdCmd = (SLONG)ass_stCadAssCoef.swKmhToMSpdPu*(SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed  >> 4;
+                          tmp_slAssistSpdCmd = ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu*(SLONG)ass_stCadAssCoef.uwAssistMaxBikeSpeed  >> 4) / 10;
                      #endif
                 #endif
                
@@ -1159,7 +1159,7 @@ void ass_voAssMaxCurCal(void)
     /** Calculate the Speed use for speed limit */
     SLONG tmp_slMotorSpd = (SLONG)ass_stCadAssParaIn.swSpdFbkPu * (SLONG)ass_stCadAssParaIn.swDirection;
     /** Calculate the err of current speed and limit speed */
-    SLONG tmp_slSpdLimitErr = tmp_slMotorSpd - ((SLONG)ass_stCadAssCoef.swMSpdpuLimit - ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu * ASS_SPD_LIMIT_ERR >> 4));
+    SLONG tmp_slSpdLimitErr = tmp_slMotorSpd - ((SLONG)ass_stCadAssCoef.swMSpdpuLimit - (((SLONG)ass_stCadAssCoef.swKmhToMSpdPu * ASS_SPD_LIMIT_ERR >> 4) / 10));
     SLONG tmp_slSpdLimitCoef = 0;
     
     /** Calculate the q axis current limit by speed limit */
@@ -1167,10 +1167,10 @@ void ass_voAssMaxCurCal(void)
     {
         ass_stCadAssParaPro.swCurrentMaxPu = ass_stCadAssCoef.uwCofCurMaxPu;
     }
-    else if(tmp_slSpdLimitErr < ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu * ASS_SPD_LIMIT_ERR >> 4))
+    else if(tmp_slSpdLimitErr < (((SLONG)ass_stCadAssCoef.swKmhToMSpdPu * ASS_SPD_LIMIT_ERR >> 4) / 10))
     {
         /** Q15 * Q13 / Q15 = Q13 */
-        tmp_slSpdLimitCoef = (tmp_slSpdLimitErr << 13) / ((SLONG)ass_stCadAssCoef.swKmhToMSpdPu * ASS_SPD_LIMIT_ERR >> 4);
+        tmp_slSpdLimitCoef = (tmp_slSpdLimitErr << 13) / (((SLONG)ass_stCadAssCoef.swKmhToMSpdPu * ASS_SPD_LIMIT_ERR >> 4) / 10);
         /** Q14 * Q13 / Q13 = Q14 */
         ass_stCadAssParaPro.swCurrentMaxPu = ((SLONG)ass_stCadAssCoef.uwCofCurMaxPu * (SLONG)(8192L - tmp_slSpdLimitCoef)>>13);
     }

+ 142 - 53
3.BasicFunction/Source/usart.c

@@ -53,6 +53,7 @@
 #include "uart_lanfeng.h"
 #include "uart_lanfeng9.h"
 #include "uart_J.h"
+#include "uart_TORG4BBSensor.h"
 #include "hwsetup.h"
 #include "UserGpio_Config.h"
 #include "FuncLayerAPI.h"
@@ -326,8 +327,8 @@ void KM5S_USART_DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD Addr, UBYTE Mode,
 
 void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, UBYTE *Data)
 {
-    uint8_t DataLength;
-    DataLength = (uint8_t)(Cmd & 0x00FF);
+    UBYTE DataLength;
+    DataLength = (UBYTE)(Cmd & 0x00FF);
     switch (ID)
     {
     //处理BMS发送的指令
@@ -348,7 +349,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             //电池关闭电源前控制器存储数据
             //...
             //发送关机就绪信号
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0x1305, (uint8_t *)"READY");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0x1305, (UBYTE *)"READY");
             break;
         }
         default:
@@ -367,7 +368,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             power_stPowStateOut.powerstate = POWER_OFF;
             power_stPowStateOut.blPowerStartupFlg = FALSE;
             //发送关机就绪信号
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0x1305, (uint8_t *)"READY");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0x1305, (UBYTE *)"READY");
             break;
         }
            // OBC发送给MC的指令
@@ -376,14 +377,14 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             memcpy(&MC_ControlCode.GearSt, Data, DataLength);
             MC_RunInfo.GearSt = MC_ControlCode.GearSt;           //当前助力档位更新
             MC_RunInfo.LightSwitch = MC_ControlCode.LightSwitch; //大灯状态更新
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0x1020, (uint8_t *)&MC_RunInfo.BikeSpeed);
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0x1020, (UBYTE *)&MC_RunInfo.BikeSpeed);
             ulOBC_ComTimeOutCount = cp_ulSystickCnt;
             break;
         }
           case 0x3105: {
             if (power_stPowStateOut.powerstate == POWER_ON_END)
             {
-                SendData(ptUartTx,ID_MC_BC, MODE_REPORT, 0x1305, (uint8_t *)"READY");
+                SendData(ptUartTx,ID_MC_BC, MODE_REPORT, 0x1305, (UBYTE *)"READY");
             }
             break;
         }
@@ -397,7 +398,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             OBC_SetCustomPara.AutoPowerOffTime = ass_ParaCong.uwAutoPowerOffTime;
             OBC_SetCustomPara.scDeltaBikeSpeedLimit = (SBYTE)ass_ParaCong.swDeltaBikeSpeedLimit;
             OBC_SetCustomPara.ubControlFunCruise=(UBYTE)cp_stControlPara.uwControlFunEN;//巡航使能位
-            SendData(ptUartTx, ID_MC_TO_PBU, MODE_REPORT, 0x5408, (uint8_t *)&OBC_SetCustomPara.uwWheelPerimeter);
+            SendData(ptUartTx, ID_MC_TO_PBU, MODE_REPORT, 0x5408, (UBYTE *)&OBC_SetCustomPara.uwWheelPerimeter);
             break;
         }
         case 0x3408: // OBC设置用户参数
@@ -463,12 +464,12 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
           {
             cp_stFlg.ParaSaveEEFlg = TRUE;
           }
-            SendData(ptUartTx, ID_MC_TO_PBU, MODE_REPORT, 0x5303, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_TO_PBU, MODE_REPORT, 0x5303, (UBYTE *)"ACK");
             break;
         }
         case 0x3500: //查询骑行历史
         {
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0x1510, (uint8_t *)&MC_RideLog.ODO_Km);
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0x1510, (UBYTE *)&MC_RideLog.ODO_Km);
             break;
         }
         case 0x3605: // OBC清除TRIP信息
@@ -477,7 +478,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             {
                 MC_RideLog.TRIP_Km = 0;
                 MC_RideLog.TRIP_Time = 0;
-                SendData(ptUartTx, ID_MC_TO_PBU, MODE_REPORT, 0x5303, (uint8_t *)"ACK");
+                SendData(ptUartTx, ID_MC_TO_PBU, MODE_REPORT, 0x5303, (UBYTE *)"ACK");
                 MC_RunInfo.Ride_Km = 0;
                 MC_RunInfo.Ride_Time = 0;
                 cp_stHistoryPara.ulTripSum=0;
@@ -507,7 +508,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
         }
         case 0x4420: //仪表修改骑行参数
         {
-            memcpy((uint8_t*)&MC_UpcInfo.stRideParaInfo.ucAssistRatioGain1, Data, DataLength);
+            memcpy((UBYTE*)&MC_UpcInfo.stRideParaInfo.ucAssistRatioGain1, Data, DataLength);
 
             MC_UpcInfo.stRideParaInfo.uwSaveFlg = 1;
             cp_stFlg.ParaUpdateFlg = TRUE;
@@ -516,7 +517,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             cp_stFlg.ParaSaveEEFlg = TRUE;
             
 
-            SendData(ptUartTx,ID_MC_TO_CDL, MODE_REPORT, 0x5303, (uint8_t*)"ACK");
+            SendData(ptUartTx,ID_MC_TO_CDL, MODE_REPORT, 0x5303, (UBYTE*)"ACK");
             break;
         }
         default:
@@ -531,7 +532,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
         {
         case 0xF000: // 上位机握手指令 返回应答指令
         {
-            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xF000, (uint8_t *)0);
+            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xF000, (UBYTE *)0);
             break;
         }
 
@@ -543,7 +544,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
         }
         case 0x1300: //查询自定义字符串1
         {
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA610, (uint8_t *)MC_RsASSCII.CustomASCII1);
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA610, (UBYTE *)MC_RsASSCII.CustomASCII1);
 
             break;
         }
@@ -553,12 +554,12 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             //执行存储操作
             memcpy( Syspara2.flash_stPara.ubRsASSCII.CustomASCII1, MC_RsASSCII.CustomASCII1, sizeof(MC_RsASSCII.CustomASCII1));
             //...
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
         case 0x1500: //查询自定义字符串2
         {
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA710, (uint8_t *)MC_RsASSCII.CustomASCII2);
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA710, (UBYTE *)MC_RsASSCII.CustomASCII2);
             break;
         }
         case 0x1610:  //写入自定义字符串2
@@ -567,12 +568,12 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             //执行存储操作
             memcpy(Syspara2.flash_stPara.ubRsASSCII.CustomASCII2, MC_RsASSCII.CustomASCII2, sizeof(MC_RsASSCII.CustomASCII2));
             //...
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
          case 0x1700: //查询自定义字符串3
         {
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA810, (uint8_t *)MC_RsASSCII.CustomASCII3);
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA810, (UBYTE *)MC_RsASSCII.CustomASCII3);
             break;
         }
         case 0x1810: //写入自定义字符串3
@@ -581,7 +582,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             //执行存储操作
             memcpy(Syspara2.flash_stPara.ubRsASSCII.CustomASCII3, MC_RsASSCII.CustomASCII3, sizeof(MC_RsASSCII.CustomASCII3));
             //...
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
 
@@ -591,15 +592,103 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             break;
         }
 
+        case 0x1A00: //按小牙盘原协议返回控制参数1
+        {
+            MC_ConfigParam1_Struct_t MC_ConfigParam1;
+            MC_ConfigParam1.GasCtrlMode_Param = MC_UpcInfo.stBikeInfo.uwThrottleMaxSpdKmH;
+            MC_ConfigParam1.StarModel = MC_UpcInfo.stBikeInfo.uwStartMode;
+            MC_ConfigParam1.StopTime = 100;
+            MC_ConfigParam1.SpeedLimit = MC_UpcInfo.stAssistInfo.uwAssistLimitBikeSpdStart;
+            MC_ConfigParam1.Deceleration = 3;
+            MC_ConfigParam1.TeethNum_F = MC_UpcInfo.stBikeInfo.uwNmFrontChainring;
+            MC_ConfigParam1.TeethNum_B = MC_UpcInfo.stBikeInfo.uwNmBackChainring;
+            MC_ConfigParam1.CurrentLimit = MC_UpcInfo.stTestParaInfo.uwPwrLimit / MC_UpcInfo.stMotorInfo.uwRVolV;
+            MC_ConfigParam1.TempTH_Alarm = MC_UpcInfo.stMContorlInfo.uwPwrLimitStartCe;
+            MC_ConfigParam1.TempTH_Protect = MC_UpcInfo.stMContorlInfo.uwAlamOverHeatCe;
+            MC_ConfigParam1.NoPBU_Flag = MC_UpcInfo.stBikeInfo2.uwNoneOBCEnable;
+            MC_ConfigParam1.WheelSize = MC_UpcInfo.stBikeInfo.uwWheelPerimeter;
+            MC_ConfigParam1.SerialNum = 1;
+            MC_ConfigParam1.UserAdjParam1_ECO.Assist_K_GAIN = 100;
+            MC_ConfigParam1.UserAdjParam1_ECO.StarModel_GAIN = 100;
+            MC_ConfigParam1.UserAdjParam1_NORM.Assist_K_GAIN = 100;
+            MC_ConfigParam1.UserAdjParam1_NORM.StarModel_GAIN = 100;
+            MC_ConfigParam1.UserAdjParam1_SPORT.Assist_K_GAIN = 100;
+            MC_ConfigParam1.UserAdjParam1_SPORT.StarModel_GAIN = 100;
+            MC_ConfigParam1.UserAdjParam1_TURBO.Assist_K_GAIN = 100;
+            MC_ConfigParam1.UserAdjParam1_TURBO.StarModel_GAIN = 100;
+            MC_ConfigParam1.UserAdjParam1_SMART.Assist_K_GAIN = 100;
+            MC_ConfigParam1.UserAdjParam1_SMART.StarModel_GAIN = 100;
+            MC_ConfigParam1.SpeedSensorPoles = MC_UpcInfo.stSensorInfo.uwBikeSpdSensorPulseNm;
+            MC_ConfigParam1.CadenceStarNum = 2;
+            MC_ConfigParam1.SpeedSignal = 0x55;
+            MC_ConfigParam1.WheelSizeAdj = MC_UpcInfo.stBikeInfo.swWheelSizeAdjust;
+            MC_ConfigParam1.UV_Protect_TH = MC_UpcInfo.stMContorlInfo.uwAlamUVolV;
+            MC_ConfigParam1.WalkMode_SpeedLimit = MC_UpcInfo.stBikeInfo.uwCartSpdKmH;
+            MC_ConfigParam1.WalkMode_MotorSpeedSet = 150;
+            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA020, (UBYTE*)&MC_ConfigParam1.GasCtrlMode_Param);
+            break;
+        }
+
+        case 0x1C00: //按小牙盘原协议返回马达参数
+        {
+            MC_MotorParam_Struct_t MC_MotorParam;
+            MC_MotorParam.Rate_Power = MC_UpcInfo.stMotorInfo.uwRPwrWt;
+            MC_MotorParam.Rate_Speed = MC_UpcInfo.stMotorInfo.uwRSpdRpm;
+            MC_MotorParam.Coil_R = MC_UpcInfo.stMotorInfo.uwRsmOhm;
+            MC_MotorParam.Coil_Lq = MC_UpcInfo.stMotorInfo.uwLquH;
+            MC_MotorParam.Coil_Ld = MC_UpcInfo.stMotorInfo.uwLduH;
+            MC_MotorParam.Back_EMF = (MC_UpcInfo.stMotorInfo.uwFluxmWb * MC_UpcInfo.stMotorInfo.uwPolePairs * 5940) >> 15; //Emf(@1000rpm) = Flux * 2 * 3.14 * 1000 * p / 60 * 1.732
+            MC_MotorParam.Rate_Voltage = MC_UpcInfo.stMotorInfo.uwRVolV;
+            MC_MotorParam.Pole = MC_UpcInfo.stMotorInfo.uwPolePairs;
+            MC_MotorParam.RS[0] = 0;
+            MC_MotorParam.RS[1] = 0;
+            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA110, (UBYTE*)&MC_MotorParam.Rate_Power);
+            break;
+        }
+
+        case 0x3000: //按小牙盘原协议返回控制参数2
+        {
+            MC_ConfigParam2_Struct_t MC_ConfigParam2;
+            MC_ConfigParam2.ZeroAngle_Pitch = 0;
+            MC_ConfigParam2.ZeroAngle_Roll = 0;
+            MC_ConfigParam2.UseAttitudeAngle_Flag = 0xAA;
+            MC_ConfigParam2.MC_Light_Mode = MC_UpcInfo.stBikeInfo.uwLightConfig >> 12;
+            MC_ConfigParam2.HeadLightVol = MC_UpcInfo.stBikeInfo.uwLightConfig;
+            MC_ConfigParam2.TailLightVol = (MC_UpcInfo.stBikeInfo.uwLightConfig >> 8) & 0x0F;
+            MC_ConfigParam2.u16OverspeedWarnVal = 0;
+            MC_ConfigParam2.u16EffectVal = MC_UpcInfo.stBikeInfo2.uwRearLightDuty;
+            MC_ConfigParam2.u16Prediv = MC_UpcInfo.stBikeInfo2.uwRearLightCycle;
+            MC_ConfigParam2.SpeedLimitStartAdj = 0;
+            MC_ConfigParam2.SpeedLimitEndAdj = 0;
+            MC_ConfigParam2.SpeedLimitAdj = MC_UpcInfo.stBikeInfo2.swDeltaBikeSpeedLimit;
+            MC_ConfigParam2.RS1 = 0;
+            MC_ConfigParam2.UserAdjParam2_ECO.MaxCurrent_K_GAIN = 100;
+            MC_ConfigParam2.UserAdjParam2_ECO.MaxTorque_K_GAIN = 100;
+            MC_ConfigParam2.UserAdjParam2_NORM.MaxCurrent_K_GAIN = 100;
+            MC_ConfigParam2.UserAdjParam2_NORM.MaxTorque_K_GAIN = 100;
+            MC_ConfigParam2.UserAdjParam2_SPORT.MaxCurrent_K_GAIN = 100;
+            MC_ConfigParam2.UserAdjParam2_SPORT.MaxTorque_K_GAIN = 100;
+            MC_ConfigParam2.UserAdjParam2_TURBO.MaxCurrent_K_GAIN = 100;
+            MC_ConfigParam2.UserAdjParam2_TURBO.MaxTorque_K_GAIN = 100;
+            MC_ConfigParam2.UserAdjParam2_SMART.MaxCurrent_K_GAIN = 100;
+            MC_ConfigParam2.UserAdjParam2_SMART.MaxTorque_K_GAIN = 100;
+            MC_ConfigParam2.RS2[0] = 0;
+            MC_ConfigParam2.RS2[1] = 0;
+            MC_ConfigParam2.RS2[2] = 0;
+            MC_ConfigParam2.RS2[3] = 0;
+            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xAD20, (UBYTE*)&MC_ConfigParam2.ZeroAngle_Pitch);
+            break;
+        }
+
         case 0x1E00: //查询历史信息
         {
-            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB74C, (uint8_t *)&MC_UpcInfo.stHistoryInfo.uwOpenTimes);
+            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB74C, (UBYTE *)&MC_UpcInfo.stHistoryInfo.uwOpenTimes);
             break;
         }
 
         case 0x1F00: //查询电机生产信息
         {
-            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA520, (uint8_t *)MC_MacInfo.Manufacturer);
+            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA520, (UBYTE *)MC_MacInfo.Manufacturer);
             break;
         }
 
@@ -611,7 +700,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             memcpy(Productionpara.ubMotorVersion, MC_VerInfo.Mode, sizeof(Productionpara.ubMotorVersion));
 
             //...
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
         case 0x2310: //写入电机SN
@@ -622,7 +711,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             //memcpy(Syspara2.flash_stPara.ubSN, MC_VerInfo.SN_Num, sizeof(Syspara2.flash_stPara.ubSN));
             memcpy(Productionpara.ubSN, MC_VerInfo.SN_Num, sizeof(Productionpara.ubSN));
 
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
         case 0x2420: //写入电机生产信息
@@ -632,7 +721,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             //...
            // memcpy(Syspara2.flash_stPara.ubProdInfo.Manufacturer, MC_MacInfo.Manufacturer, sizeof(Syspara2.flash_stPara.ubProdInfo));
             memcpy(Productionpara.ubProdInfo.Manufacturer, MC_MacInfo.Manufacturer, sizeof(Productionpara.ubProdInfo));
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
 
@@ -642,12 +731,12 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             {
                 power_stPowStateOut.powerstate = POWER_OFF;
                 power_stPowStateOut.blPowerStartupFlg = FALSE;
-                SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA903, (uint8_t *)"ACK");                
+                SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             }
             else if (strncmp("RESET", (char *)Data, DataLength) == 0)
             {
                 //执行复位,跳转进入Bootloader
-                SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+                SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
 //                __set_FAULTMASK(1);//关闭所有中断
                 DL_WWDT_disablePower(WWDT0_INST);
                 NVIC_SystemReset();
@@ -684,7 +773,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
 
               //  if (I2C_EEFltFlg != TRUE)
                 {
-                    SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+                    SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
                 }
                 
                 //GPIO_ResetBits(POWER_LOCK_PORT,POWER_LOCK_PIN);
@@ -712,7 +801,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
                 cp_stFlg.ParaSaveEEFlg = FALSE;
                // if (I2C_EEFltFlg != TRUE)
                 {
-                    SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+                    SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
                 }
                //GPIO_ResetBits(POWER_LOCK_PORT,POWER_LOCK_PIN);
             }
@@ -723,7 +812,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             memcpy(&MC_ControlCode.GearSt, Data, DataLength);
             MC_RunInfo.GearSt = MC_ControlCode.GearSt; //当前助力档位更新
             MC_RunInfo.LightSwitch = MC_ControlCode.LightSwitch;
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0x1020, (uint8_t *)&MC_RunInfo.BikeSpeed);
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0x1020, (UBYTE *)&MC_RunInfo.BikeSpeed);
             break;
         }
 
@@ -746,9 +835,9 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
                 {
                     DataLength = AddressEnd - AddressBegin+ 1;
                 
-                    memcpy((uint8_t*)(Data + 8), (uint8_t*)(AddressBegin), DataLength);
+                    memcpy((UBYTE*)(Data + 8), (UBYTE*)(AddressBegin), DataLength);
                 
-                    SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, (0xAB08 + DataLength), (uint8_t*)Data);
+                    SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, (0xAB08 + DataLength), (UBYTE*)Data);
                 }
             } while (0);
             break;
@@ -756,7 +845,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
 
         case 0x2E00:  //查询骑行历史信息
         {
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0x1510, (uint8_t *)&MC_RideLog.ODO_Km);
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0x1510, (UBYTE *)&MC_RideLog.ODO_Km);
             break;
         }
 
@@ -778,7 +867,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
                 ENABLE_IRQ;*/
                // if (I2C_EEFltFlg != TRUE)
                 {
-                    SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+                    SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
                 }
                //GPIO_ResetBits(POWER_LOCK_PORT,POWER_LOCK_PIN);
             }
@@ -787,7 +876,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
         ////////////////////////////////////////
         case 0x3A00: //读取马达信息
         { 
-            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB226, (uint8_t *)&MC_UpcInfo.stMotorInfo.uwPolePairs);
+            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB226, (UBYTE *)&MC_UpcInfo.stMotorInfo.uwPolePairs);
             break;
         }
            case 0x3B10: 
@@ -824,12 +913,12 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
             cp_stFlg.ParaMInfoUpdateFlg = TRUE;
             cp_stFlg.ParaMotorDriveUpdateFinishFlg = TRUE;
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
         case 0x3C00: //读取整车信息
         {
-            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB31A, (uint8_t *)&MC_UpcInfo.stBikeInfo.uwWheelPerimeter);
+            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB31A, (UBYTE *)&MC_UpcInfo.stBikeInfo.uwWheelPerimeter);
             break;
         }
         case 0x3D1C: //写入整车信息
@@ -842,7 +931,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             cp_stFlg.ParaUpdateFlg = TRUE;
             cp_stFlg.ParaBikeInfoUpdateFlg = TRUE;
             cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
          case 0x3D20: //写入电机标签信息
@@ -857,7 +946,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
         {
             MC_UpcInfo.stMContorlInfo.uwSPIPosOffsetOrigin = 0;//spi_stResolverOut.swSpiThetaOffsetOrignPu;
             MC_UpcInfo.stMContorlInfo.uwSPIPosOffsetNow = 0;//spi_stResolverOut.swSpiThetaOffsetPu;
-            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB420, (uint8_t *)&MC_UpcInfo.stMContorlInfo.uwSPIPosOffsetOrigin);
+            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB420, (UBYTE *)&MC_UpcInfo.stMContorlInfo.uwSPIPosOffsetOrigin);
             break;
         }
         case 0x3F22: //写入控制器参数
@@ -870,7 +959,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             cp_stFlg.ParaUpdateFlg = TRUE;
             cp_stFlg.ParaMCInfoUpdateFlg = TRUE;
             cp_stFlg.ParaMotorDriveUpdateFinishFlg = TRUE;
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
         case 0x4000: //查询传感器参数
@@ -892,7 +981,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             MC_UpcInfo.stSensorInfo.uwTorque_SensorPulseNm = cadence_stFreGetCof.uwTorque_NumbersPulses;
             MC_UpcInfo.stSensorInfo.uwBikeSpdSensorPulseNm = bikespeed_stFreGetCof.uwNumbersPulses;   
             MC_UpcInfo.stSensorInfo.uwCad_SensorPulseNm=cadence_stFreGetCof.uwCad_NumbersPulses;
-            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB528, (uint8_t *)&MC_UpcInfo.stSensorInfo.uwTorSensorOffsetOrigin);
+            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB528, (UBYTE *)&MC_UpcInfo.stSensorInfo.uwTorSensorOffsetOrigin);
             break;
         }
         case 0x4104: //写入力矩传感器参数
@@ -946,7 +1035,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             cp_stFlg.ParaUpdateFlg = TRUE;
             cp_stFlg.ParaSensorInfoUpdateFlg = TRUE;
             cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
         case 0x420E: //写入其它传感器参数
@@ -960,7 +1049,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             cp_stFlg.ParaUpdateFlg = TRUE;
             cp_stFlg.ParaSensorInfoUpdateFlg = TRUE;
             cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
         case 0x4304: //查询助力参数
@@ -984,7 +1073,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
                 MC_UpcInfo.stCurveOrderInfo.uwCadenceCurveNum = 1;
             }
             Can_AssistCoef_Read(&MC_UpcInfo.stCurveOrderInfo);
-            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB64C, (uint8_t *)&MC_UpcInfo.stAssistInfo.swStartupGain);
+            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB64C, (UBYTE *)&MC_UpcInfo.stAssistInfo.swStartupGain);
             break;
         }
         case 0x4450: //写入助力参数
@@ -1017,7 +1106,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             cp_stFlg.ParaUpdateFlg = TRUE;
             cp_stFlg.ParaAInfoUpdateFlg = TRUE;
             cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
         case 0x4500: //查询调试参数
@@ -1046,7 +1135,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             MC_UpcInfo.stTestParaInfo.uwPwrLimitError = cp_stControlPara.swPwrLimitErrWt;
             MC_UpcInfo.stTestParaInfo.uwPwrLimitKp = cp_stControlPara.swPwrLimitKpPu;
             MC_UpcInfo.stTestParaInfo.uwPwrLimitKi = cp_stControlPara.swPwrLimitKiPu;    
-            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB83A, (uint8_t *)&MC_UpcInfo.stTestParaInfo.RunModelSelect);            
+            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB83A, (UBYTE *)&MC_UpcInfo.stTestParaInfo.RunModelSelect);
             break;
         }
         case 0x463C: //写入调试参数
@@ -1068,7 +1157,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             cp_stFlg.ParaUpdateFlg = TRUE;
             cp_stFlg.TestParaInfoUpdateFlg = TRUE;
             cp_stFlg.ParaMotorDriveUpdateFinishFlg = TRUE;
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
         
@@ -1084,14 +1173,14 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             cp_stFlg.ParaUpdateFlg = TRUE;
             cp_stFlg.ParaSensorInfoUpdateFlg = TRUE;
             cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");  
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
 
         
         case 0x4800: //读取储存标志
         {
-            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB904, (uint8_t *)&MC_UpcInfo.stTestParaInfo.uwEEFirstDefaultSetFlg);
+            SendData(ptUartTx, ID_MC_TO_CDL, MODE_REPORT, 0xB904, (UBYTE *)&MC_UpcInfo.stTestParaInfo.uwEEFirstDefaultSetFlg);
             break;
         }
 
@@ -1105,7 +1194,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             cp_stFlg.ParaUpdateFlg = TRUE;
             cp_stFlg.ParaMCInfoUpdateFlg = TRUE;
             cp_stFlg.ParaMotorDriveUpdateFinishFlg = TRUE;
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
            case 0x4A00: 
@@ -1118,7 +1207,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             memcpy(&MC_UpcInfo.stResistanceCalibInfo.uwSaveFlg, Data, DataLength);
              memcpy(&Syspara2.EepromMosPara.EEP_K50,&MC_UpcInfo.stResistanceCalibInfo.Coeff1,10 );
             MosResInside.blCalibFlag=TRUE;
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
         
@@ -1140,7 +1229,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             MC_UpcInfo.stWriteResistanceCalibInfo.reserve6 = 0;
             MC_UpcInfo.stWriteResistanceCalibInfo.reserve7 = 0;
             MC_UpcInfo.stWriteResistanceCalibInfo.reserve8 = 0;
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xBC20, (uint8_t *)&MC_UpcInfo.stWriteResistanceCalibInfo.MOSResA);
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xBC20, (UBYTE *)&MC_UpcInfo.stWriteResistanceCalibInfo.MOSResA);
             break;
         }
         case 0x4B22:  //上位机设置骑行参数
@@ -1153,7 +1242,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
             cp_stFlg.ParaUpdateFlg = TRUE;
             cp_stFlg.ParaRideInfoUpdateFlg = TRUE;
             cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
-            SendData(ptUartTx,ID_MC_TO_CDL, MODE_REPORT, 0x5303, (uint8_t*)"ACK");
+            SendData(ptUartTx,ID_MC_TO_CDL, MODE_REPORT, 0x5303, (UBYTE*)"ACK");
             break;
         }
         case 0x4C00:
@@ -1172,7 +1261,7 @@ void DataProcess(USART_Buf_TypeDef* ptUartTx, UWORD ID, UBYTE Mode, UWORD Cmd, U
 //            cp_stFlg.ParaMCInfoUpdateFlg = TRUE;
 //            cp_stFlg.ParaMotorDriveUpdateFinishFlg = TRUE;
 
-            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (uint8_t *)"ACK");
+            SendData(ptUartTx, ID_MC_BC, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
             break;
         }
         case 0x4D22:

+ 12 - 12
4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Include/bikeinformation.h

@@ -62,30 +62,30 @@
 #endif
 
 #if (BIKE_SPEED_LIMIT_SEL == BIKE_SPEED_LIMIT_45)
-    #define ASS_SPD_LIMIT               45*16                   /**< Q4. Base 1Km/h*/
+    #define ASS_SPD_LIMIT               450*16                   /**< Q4. Base 0.1Km/h*/
 #elif (BIKE_SPEED_LIMIT_SEL == BIKE_SPEED_LIMIT_32)
-    #define ASS_SPD_LIMIT               32*16                   /**< Q4. Base 1Km/h*/
+    #define ASS_SPD_LIMIT               320*16                   /**< Q4. Base 0.1Km/h*/
 #elif (BIKE_SPEED_LIMIT_SEL == BIKE_SPEED_LIMIT_25)
-    #define ASS_SPD_LIMIT               25*16                   /**< Q4. Base 1Km/h*/
+    #define ASS_SPD_LIMIT               250*16                   /**< Q4. Base 0.1Km/h*/
 #else
-    #define ASS_SPD_LIMIT               25*16                   /**< Q4. Base 1Km/h*/
+    #define ASS_SPD_LIMIT               250*16                   /**< Q4. Base 0.1Km/h*/
 #endif
 
 #if (BIKE_THROTTLE_SPEED_LIMIT_SEL == BIKE_THROTTLE_SPEED_LIMIT_45)
-    #define ASS_THROTTLE_SPD_LIMIT       45*16                   /**< Q4. Base 1Km/h*/
+    #define ASS_THROTTLE_SPD_LIMIT       450*16                   /**< Q4. Base 0.1Km/h*/
 #elif (BIKE_THROTTLE_SPEED_LIMIT_SEL == BIKE_THROTTLE_SPEED_LIMIT_32)
-    #define ASS_THROTTLE_SPD_LIMIT       32*16                   /**< Q4. Base 1Km/h*/
+    #define ASS_THROTTLE_SPD_LIMIT       320*16                   /**< Q4. Base 0.1Km/h*/
 #elif (BIKE_THROTTLE_SPEED_LIMIT_SEL == BIKE_THROTTLE_SPEED_LIMIT_25)
-    #define ASS_THROTTLE_SPD_LIMIT       25*16                   /**< Q4. Base 1Km/h*/
+    #define ASS_THROTTLE_SPD_LIMIT       250*16                   /**< Q4. Base 0.1Km/h*/
 #else
-    #define ASS_THROTTLE_SPD_LIMIT       25*16                   /**< Q4. Base 1Km/h*/
+    #define ASS_THROTTLE_SPD_LIMIT       250*16                   /**< Q4. Base 0.1Km/h*/
 #endif
        
 
-#define ASS_CART_SPEED              5 *16                               /**< Q4. Base 1Km/h*/
-#define ASS_GEAR1_SPEED             13*16                               /**< Q4. Base 1Km/h*/
-#define ASS_THROT_SPEED_MIN         5 *16                               /**< Q4. Base 1Km/h*/
-#define ASS_SPD_LIMIT_ERR           (UWORD)(2.5 *16)                    /**< Q4. Base 1Km/h*/
+#define ASS_CART_SPEED              50 *16                               /**< Q4. Base 0.1Km/h*/
+#define ASS_GEAR1_SPEED             130 * 16                             /**< Q4. Base 0.1Km/h*/
+#define ASS_THROT_SPEED_MIN         50 * 16                              /**< Q4. Base 0.1Km/h*/
+#define ASS_SPD_LIMIT_ERR           (UWORD)(25 *16)                      /**< Q4. Base 0.1Km/h*/
 
 #define BIKE_FRONTTEETH_NMB           38                                 // number
 #define BIKE_BACKTEETH_NMB            11                                 // number

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

@@ -125,7 +125,7 @@ Update Time
  指拨档位
    不同档位,指拨的最大速度有区分。1档-48%,2档-60%,3档-72%,4档-84%,5档-100%,
 *=======================================================================*/
-#define     THROTTLEGEAR              1
+#define     THROTTLEGEAR              0
 /*======================================================================*
  踏频 档位限速
    不同档位,踏频的最大速度有区分。1档-48%,2档-60%,3档-72%,4档-84%,5档-100%,

+ 889 - 0
Debug/ti_msp_dl_config.c

@@ -0,0 +1,889 @@
+/*
+ * 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"
+
+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*/
+    SYSCFG_DL_DEBUG_init();
+    SYSCFG_DL_SYSCTL_init();
+    SYSCFG_DL_MOTOR_PWM_init();
+    SYSCFG_DL_PWM_F_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_OPA_BPHASE_init();
+    SYSCFG_DL_OPA_CPHASE_init();
+    SYSCFG_DL_SYSTICK_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(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_OPA_reset(OPA_BPHASE_INST);
+    DL_OPA_reset(OPA_CPHASE_INST);
+
+    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(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_OPA_enablePower(OPA_BPHASE_INST);
+    DL_OPA_enablePower(OPA_CPHASE_INST);
+
+    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_initPeripheralAnalogFunction(GPIO_HFXIN_IOMUX);
+    DL_GPIO_initPeripheralAnalogFunction(GPIO_HFXOUT_IOMUX);
+
+    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_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(LIGHT_DETECT_LIGHT_PWM_F_IOMUX);
+
+    DL_GPIO_initDigitalInputFeatures(INPUT_BREAK_IOMUX,
+		 DL_GPIO_INVERSION_DISABLE, DL_GPIO_RESISTOR_PULL_UP,
+		 DL_GPIO_HYSTERESIS_DISABLE, DL_GPIO_WAKEUP_DISABLE);
+
+    DL_GPIO_initDigitalInput(INPUT_Cadence_Dir_IOMUX);
+
+    DL_GPIO_initDigitalInput(INPUT_Cadence_Speed_IOMUX);
+
+    DL_GPIO_initDigitalInputFeatures(INPUT_PIN_GEAR_IOMUX,
+		 DL_GPIO_INVERSION_DISABLE, DL_GPIO_RESISTOR_PULL_UP,
+		 DL_GPIO_HYSTERESIS_DISABLE, DL_GPIO_WAKEUP_DISABLE);
+
+    DL_GPIO_initDigitalInputFeatures(INPUT_Speed_In_IOMUX,
+		 DL_GPIO_INVERSION_DISABLE, DL_GPIO_RESISTOR_PULL_UP,
+		 DL_GPIO_HYSTERESIS_DISABLE, DL_GPIO_WAKEUP_DISABLE);
+
+    DL_GPIO_initDigitalInput(HALL_HALLA_IOMUX);
+
+    DL_GPIO_initDigitalInput(HALL_HALLB_IOMUX);
+
+    DL_GPIO_initDigitalInput(HALL_HALLC_IOMUX);
+
+    DL_GPIO_initDigitalOutput(GPIO_B_LED_PIN_LED_B_EN_IOMUX);
+
+    DL_GPIO_initDigitalOutput(GPIO_B_LED_PIN_LED_B_SEL_IOMUX);
+
+    DL_GPIO_initDigitalOutput(GPIO_F_LED_PIN_LED_F_EN_IOMUX);
+
+    DL_GPIO_initDigitalOutput(GPIO_F_LED_PIN_LED_F_SEL_IOMUX);
+
+    DL_GPIO_clearPins(GPIOA, GPIO_F_LED_PIN_LED_F_EN_PIN |
+		GPIO_F_LED_PIN_LED_F_SEL_PIN);
+    DL_GPIO_enableOutput(GPIOA, GPIO_F_LED_PIN_LED_F_EN_PIN |
+		GPIO_F_LED_PIN_LED_F_SEL_PIN);
+    DL_GPIO_setLowerPinsPolarity(GPIOA, DL_GPIO_PIN_8_EDGE_RISE_FALL);
+    DL_GPIO_setUpperPinsPolarity(GPIOA, DL_GPIO_PIN_23_EDGE_RISE |
+		DL_GPIO_PIN_28_EDGE_RISE);
+    DL_GPIO_clearInterruptStatus(GPIOA, LIGHT_DETECT_LIGHT_PWM_F_PIN |
+		HALL_HALLA_PIN);
+    DL_GPIO_enableInterrupt(GPIOA, LIGHT_DETECT_LIGHT_PWM_F_PIN |
+		HALL_HALLA_PIN);
+    DL_GPIO_clearPins(GPIOB, OUTPUT_POWER_EN_PIN |
+		GPIO_B_LED_PIN_LED_B_EN_PIN |
+		GPIO_B_LED_PIN_LED_B_SEL_PIN);
+    DL_GPIO_enableOutput(GPIOB, OUTPUT_POWER_EN_PIN |
+		GPIO_B_LED_PIN_LED_B_EN_PIN |
+		GPIO_B_LED_PIN_LED_B_SEL_PIN);
+    DL_GPIO_setLowerPinsPolarity(GPIOB, DL_GPIO_PIN_3_EDGE_RISE_FALL |
+		DL_GPIO_PIN_2_EDGE_RISE_FALL);
+    DL_GPIO_clearInterruptStatus(GPIOB, HALL_HALLB_PIN |
+		HALL_HALLC_PIN);
+    DL_GPIO_enableInterrupt(GPIOB, HALL_HALLB_PIN |
+		HALL_HALLC_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 = {
+    .inputFreq              = DL_SYSCTL_SYSPLL_INPUT_FREQ_8_16_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_HFCLK,
+	.qDiv                   = 17,
+	.pDiv                   = DL_SYSCTL_SYSPLL_PDIV_1
+};
+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,200, false);
+    DL_SYSCTL_configSYSPLL((DL_SYSCTL_SYSPLLConfig *) &gSYSPLLConfig);
+    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, 72, 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 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_LOAD_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_1, 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,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));
+    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_05, 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_AUTO_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
+    DL_ADC12_configConversionMem(ADC12_1_INST, ADC12_1_ADCMEM_5,
+        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_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);
+}
+
+/* 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);
+
+}
+
+
+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);
+}
+
+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));
+
+}
+

+ 439 - 0
Debug/ti_msp_dl_config.h

@@ -0,0 +1,439 @@
+/*
+ * Copyright (c) 2023, Texas Instruments Incorporated - http://www.ti.com
+ * 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.h =============
+ *  Configured MSPM0 DriverLib module declarations
+ *
+ *  DO NOT EDIT - This file is generated for the MSPM0G350X
+ *  by the SysConfig tool.
+ */
+#ifndef ti_msp_dl_config_h
+#define ti_msp_dl_config_h
+
+#define CONFIG_MSPM0G350X
+
+#if defined(__ti_version__) || defined(__TI_COMPILER_VERSION__)
+#define SYSCONFIG_WEAK __attribute__((weak))
+#elif defined(__IAR_SYSTEMS_ICC__)
+#define SYSCONFIG_WEAK __weak
+#elif defined(__GNUC__)
+#define SYSCONFIG_WEAK __attribute__((weak))
+#endif
+
+#include <ti/devices/msp/msp.h>
+#include <ti/driverlib/driverlib.h>
+#include <ti/driverlib/m0p/dl_core.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ *  ======== SYSCFG_DL_init ========
+ *  Perform all required MSP DL initialization
+ *
+ *  This function should be called once at a point before any use of
+ *  MSP DL.
+ */
+
+
+/* clang-format off */
+
+#define POWER_STARTUP_DELAY                                                (16)
+
+
+#define GPIO_HFXT_PORT                                                     GPIOA
+#define GPIO_HFXIN_PIN                                             DL_GPIO_PIN_5
+#define GPIO_HFXIN_IOMUX                                         (IOMUX_PINCM10)
+#define GPIO_HFXOUT_PIN                                            DL_GPIO_PIN_6
+#define GPIO_HFXOUT_IOMUX                                        (IOMUX_PINCM11)
+#define CPUCLK_FREQ                                                     72000000
+
+
+
+/* Defines for MOTOR_PWM */
+#define MOTOR_PWM_INST                                                     TIMA0
+#define MOTOR_PWM_INST_IRQHandler                               TIMA0_IRQHandler
+#define MOTOR_PWM_INST_INT_IRQN                                 (TIMA0_INT_IRQn)
+#define MOTOR_PWM_INST_CLK_FREQ                                         72000000
+/* GPIO defines for channel 0 */
+#define GPIO_MOTOR_PWM_C0_PORT                                             GPIOB
+#define GPIO_MOTOR_PWM_C0_PIN                                     DL_GPIO_PIN_14
+#define GPIO_MOTOR_PWM_C0_IOMUX                                  (IOMUX_PINCM31)
+#define GPIO_MOTOR_PWM_C0_IOMUX_FUNC                 IOMUX_PINCM31_PF_TIMA0_CCP0
+#define GPIO_MOTOR_PWM_C0_IDX                                DL_TIMER_CC_0_INDEX
+/* GPIO defines for channel 0 */
+#define GPIO_MOTOR_PWM_C0_CMPL_PORT                                        GPIOB
+#define GPIO_MOTOR_PWM_C0_CMPL_PIN                                 DL_GPIO_PIN_9
+#define GPIO_MOTOR_PWM_C0_CMPL_IOMUX                             (IOMUX_PINCM26)
+#define GPIO_MOTOR_PWM_C0_CMPL_IOMUX_FUNC        IOMUX_PINCM26_PF_TIMA0_CCP0_CMPL
+
+/* GPIO defines for channel 1 */
+#define GPIO_MOTOR_PWM_C1_PORT                                             GPIOA
+#define GPIO_MOTOR_PWM_C1_PIN                                      DL_GPIO_PIN_7
+#define GPIO_MOTOR_PWM_C1_IOMUX                                  (IOMUX_PINCM14)
+#define GPIO_MOTOR_PWM_C1_IOMUX_FUNC                 IOMUX_PINCM14_PF_TIMA0_CCP1
+#define GPIO_MOTOR_PWM_C1_IDX                                DL_TIMER_CC_1_INDEX
+/* GPIO defines for channel 1 */
+#define GPIO_MOTOR_PWM_C1_CMPL_PORT                                        GPIOA
+#define GPIO_MOTOR_PWM_C1_CMPL_PIN                                 DL_GPIO_PIN_4
+#define GPIO_MOTOR_PWM_C1_CMPL_IOMUX                              (IOMUX_PINCM9)
+#define GPIO_MOTOR_PWM_C1_CMPL_IOMUX_FUNC         IOMUX_PINCM9_PF_TIMA0_CCP1_CMPL
+
+/* GPIO defines for channel 2 */
+#define GPIO_MOTOR_PWM_C2_PORT                                             GPIOA
+#define GPIO_MOTOR_PWM_C2_PIN                                     DL_GPIO_PIN_10
+#define GPIO_MOTOR_PWM_C2_IOMUX                                  (IOMUX_PINCM21)
+#define GPIO_MOTOR_PWM_C2_IOMUX_FUNC                 IOMUX_PINCM21_PF_TIMA0_CCP2
+#define GPIO_MOTOR_PWM_C2_IDX                                DL_TIMER_CC_2_INDEX
+/* GPIO defines for channel 2 */
+#define GPIO_MOTOR_PWM_C2_CMPL_PORT                                        GPIOA
+#define GPIO_MOTOR_PWM_C2_CMPL_PIN                                DL_GPIO_PIN_11
+#define GPIO_MOTOR_PWM_C2_CMPL_IOMUX                             (IOMUX_PINCM22)
+#define GPIO_MOTOR_PWM_C2_CMPL_IOMUX_FUNC        IOMUX_PINCM22_PF_TIMA0_CCP2_CMPL
+
+
+/* Publisher defines */
+#define MOTOR_PWM_INST_PUB_0_CH                                             (12)
+
+#define MOTOR_PWM_REPEAT_COUNT_2                                             (1)
+/* Defines for PWM_F */
+#define PWM_F_INST                                                         TIMG7
+#define PWM_F_INST_IRQHandler                                   TIMG7_IRQHandler
+#define PWM_F_INST_INT_IRQN                                     (TIMG7_INT_IRQn)
+#define PWM_F_INST_CLK_FREQ                                             36000000
+/* GPIO defines for channel 1 */
+#define GPIO_PWM_F_C1_PORT                                                 GPIOA
+#define GPIO_PWM_F_C1_PIN                                          DL_GPIO_PIN_2
+#define GPIO_PWM_F_C1_IOMUX                                       (IOMUX_PINCM7)
+#define GPIO_PWM_F_C1_IOMUX_FUNC                      IOMUX_PINCM7_PF_TIMG7_CCP1
+#define GPIO_PWM_F_C1_IDX                                    DL_TIMER_CC_1_INDEX
+
+
+
+/* Defines for HALLTIMER */
+#define HALLTIMER_INST                                                   (TIMG6)
+#define HALLTIMER_INST_IRQHandler                               TIMG6_IRQHandler
+#define HALLTIMER_INST_INT_IRQN                                 (TIMG6_INT_IRQn)
+#define HALLTIMER_INST_LOAD_VALUE                                       (60011U)
+/* Defines for HALL_CNT */
+#define HALL_CNT_INST                                                    (TIMG0)
+#define HALL_CNT_INST_IRQHandler                                TIMG0_IRQHandler
+#define HALL_CNT_INST_INT_IRQN                                  (TIMG0_INT_IRQn)
+#define HALL_CNT_INST_LOAD_VALUE                                         (1079U)
+
+
+
+/* Defines for UART_HMI */
+#define UART_HMI_INST                                                      UART0
+#define UART_HMI_INST_IRQHandler                                UART0_IRQHandler
+#define UART_HMI_INST_INT_IRQN                                    UART0_INT_IRQn
+#define GPIO_UART_HMI_RX_PORT                                              GPIOA
+#define GPIO_UART_HMI_TX_PORT                                              GPIOA
+#define GPIO_UART_HMI_RX_PIN                                       DL_GPIO_PIN_1
+#define GPIO_UART_HMI_TX_PIN                                       DL_GPIO_PIN_0
+#define GPIO_UART_HMI_IOMUX_RX                                    (IOMUX_PINCM2)
+#define GPIO_UART_HMI_IOMUX_TX                                    (IOMUX_PINCM1)
+#define GPIO_UART_HMI_IOMUX_RX_FUNC                     IOMUX_PINCM2_PF_UART0_RX
+#define GPIO_UART_HMI_IOMUX_TX_FUNC                     IOMUX_PINCM1_PF_UART0_TX
+#define UART_HMI_BAUD_RATE                                                (9600)
+#define UART_HMI_IBRD_36_MHZ_9600_BAUD                                     (234)
+#define UART_HMI_FBRD_36_MHZ_9600_BAUD                                      (24)
+
+
+
+
+
+/* Defines for ADC12_0 */
+#define ADC12_0_INST                                                        ADC0
+#define ADC12_0_INST_IRQHandler                                  ADC0_IRQHandler
+#define ADC12_0_INST_INT_IRQN                                    (ADC0_INT_IRQn)
+#define ADC12_0_ADCMEM_0                                      DL_ADC12_MEM_IDX_0
+#define ADC12_0_ADCMEM_0_REF                     DL_ADC12_REFERENCE_VOLTAGE_VDDA
+#define ADC12_0_ADCMEM_0_REF_VOLTAGE_V                                       3.3
+#define ADC12_0_ADCMEM_1                                      DL_ADC12_MEM_IDX_1
+#define ADC12_0_ADCMEM_1_REF                     DL_ADC12_REFERENCE_VOLTAGE_VDDA
+#define ADC12_0_ADCMEM_1_REF_VOLTAGE_V                                       3.3
+#define ADC12_0_ADCMEM_2                                      DL_ADC12_MEM_IDX_2
+#define ADC12_0_ADCMEM_2_REF                     DL_ADC12_REFERENCE_VOLTAGE_VDDA
+#define ADC12_0_ADCMEM_2_REF_VOLTAGE_V                                       3.3
+#define ADC12_0_ADCMEM_3                                      DL_ADC12_MEM_IDX_3
+#define ADC12_0_ADCMEM_3_REF                     DL_ADC12_REFERENCE_VOLTAGE_VDDA
+#define ADC12_0_ADCMEM_3_REF_VOLTAGE_V                                       3.3
+#define ADC12_0_ADCMEM_4                                      DL_ADC12_MEM_IDX_4
+#define ADC12_0_ADCMEM_4_REF                     DL_ADC12_REFERENCE_VOLTAGE_VDDA
+#define ADC12_0_ADCMEM_4_REF_VOLTAGE_V                                       3.3
+#define ADC12_0_INST_SUB_CH                                                 (12)
+#define GPIO_ADC12_0_C6_PORT                                               GPIOB
+#define GPIO_ADC12_0_C6_PIN                                       DL_GPIO_PIN_20
+#define GPIO_ADC12_0_C0_PORT                                               GPIOA
+#define GPIO_ADC12_0_C0_PIN                                       DL_GPIO_PIN_27
+#define GPIO_ADC12_0_C1_PORT                                               GPIOA
+#define GPIO_ADC12_0_C1_PIN                                       DL_GPIO_PIN_26
+
+/* Defines for ADC12_1 */
+#define ADC12_1_INST                                                        ADC1
+#define ADC12_1_INST_IRQHandler                                  ADC1_IRQHandler
+#define ADC12_1_INST_INT_IRQN                                    (ADC1_INT_IRQn)
+#define ADC12_1_ADCMEM_0                                      DL_ADC12_MEM_IDX_0
+#define ADC12_1_ADCMEM_0_REF                     DL_ADC12_REFERENCE_VOLTAGE_VDDA
+#define ADC12_1_ADCMEM_0_REF_VOLTAGE_V                                       3.3
+#define ADC12_1_ADCMEM_1                                      DL_ADC12_MEM_IDX_1
+#define ADC12_1_ADCMEM_1_REF                     DL_ADC12_REFERENCE_VOLTAGE_VDDA
+#define ADC12_1_ADCMEM_1_REF_VOLTAGE_V                                       3.3
+#define ADC12_1_ADCMEM_2                                      DL_ADC12_MEM_IDX_2
+#define ADC12_1_ADCMEM_2_REF                     DL_ADC12_REFERENCE_VOLTAGE_VDDA
+#define ADC12_1_ADCMEM_2_REF_VOLTAGE_V                                       3.3
+#define ADC12_1_ADCMEM_3                                      DL_ADC12_MEM_IDX_3
+#define ADC12_1_ADCMEM_3_REF                     DL_ADC12_REFERENCE_VOLTAGE_VDDA
+#define ADC12_1_ADCMEM_3_REF_VOLTAGE_V                                       3.3
+#define ADC12_1_ADCMEM_4                                      DL_ADC12_MEM_IDX_4
+#define ADC12_1_ADCMEM_4_REF                     DL_ADC12_REFERENCE_VOLTAGE_VDDA
+#define ADC12_1_ADCMEM_4_REF_VOLTAGE_V                                       3.3
+#define ADC12_1_ADCMEM_5                                      DL_ADC12_MEM_IDX_5
+#define ADC12_1_ADCMEM_5_REF                     DL_ADC12_REFERENCE_VOLTAGE_VDDA
+#define ADC12_1_ADCMEM_5_REF_VOLTAGE_V                                       3.3
+#define ADC12_1_INST_SUB_CH                                                 (12)
+#define GPIO_ADC12_1_C6_PORT                                               GPIOB
+#define GPIO_ADC12_1_C6_PIN                                       DL_GPIO_PIN_19
+#define GPIO_ADC12_1_C5_PORT                                               GPIOB
+#define GPIO_ADC12_1_C5_PIN                                       DL_GPIO_PIN_18
+#define GPIO_ADC12_1_C4_PORT                                               GPIOB
+#define GPIO_ADC12_1_C4_PIN                                       DL_GPIO_PIN_17
+#define GPIO_ADC12_1_C7_PORT                                               GPIOA
+#define GPIO_ADC12_1_C7_PIN                                       DL_GPIO_PIN_21
+#define GPIO_ADC12_1_C0_PORT                                               GPIOA
+#define GPIO_ADC12_1_C0_PIN                                       DL_GPIO_PIN_15
+
+
+
+/* Defines for COMP_0 */
+#define COMP_0_INST                                                        COMP1
+#define COMP_0_INST_INT_IRQN                                      COMP1_INT_IRQn
+
+/* Defines for COMP_0 DACCODE0 */
+#define COMP_0_DACCODE0                                                    (181)
+
+
+/* GPIO configuration for COMP_0 */
+#define GPIO_COMP_0_IN1P_PORT                                            (GPIOB)
+#define GPIO_COMP_0_IN1P_PIN                                    (DL_GPIO_PIN_24)
+#define GPIO_COMP_0_IOMUX_IN1P                                   (IOMUX_PINCM52)
+#define GPIO_COMP_0_IOMUX_IN1P_FUNC               (IOMUX_PINCM52_PF_UNCONNECTED)
+
+
+
+
+/* Defines for OPA_BPHASE */
+#define OPA_BPHASE_INST                                                     OPA1
+#define GPIO_OPA_BPHASE_IN1POS_PORT                                        GPIOA
+#define GPIO_OPA_BPHASE_IN1POS_PIN                                DL_GPIO_PIN_18
+#define GPIO_OPA_BPHASE_IOMUX_IN1POS                             (IOMUX_PINCM40)
+#define GPIO_OPA_BPHASE_IOMUX_IN1POS_FUNC           IOMUX_PINCM40_PF_UNCONNECTED
+#define GPIO_OPA_BPHASE_IN1NEG_PORT                                        GPIOA
+#define GPIO_OPA_BPHASE_IN1NEG_PIN                                DL_GPIO_PIN_17
+#define GPIO_OPA_BPHASE_IOMUX_IN1NEG                             (IOMUX_PINCM39)
+#define GPIO_OPA_BPHASE_IOMUX_IN1NEG_FUNC           IOMUX_PINCM39_PF_UNCONNECTED
+#define GPIO_OPA_BPHASE_OUT_PORT                                           GPIOA
+#define GPIO_OPA_BPHASE_OUT_PIN                                   DL_GPIO_PIN_16
+#define GPIO_OPA_BPHASE_IOMUX_OUT                                (IOMUX_PINCM38)
+#define GPIO_OPA_BPHASE_IOMUX_OUT_FUNC              IOMUX_PINCM38_PF_UNCONNECTED
+/* Defines for OPA_CPHASE */
+#define OPA_CPHASE_INST                                                     OPA0
+#define GPIO_OPA_CPHASE_IN1POS_PORT                                        GPIOA
+#define GPIO_OPA_CPHASE_IN1POS_PIN                                DL_GPIO_PIN_25
+#define GPIO_OPA_CPHASE_IOMUX_IN1POS                             (IOMUX_PINCM55)
+#define GPIO_OPA_CPHASE_IOMUX_IN1POS_FUNC           IOMUX_PINCM55_PF_UNCONNECTED
+#define GPIO_OPA_CPHASE_IN1NEG_PORT                                        GPIOA
+#define GPIO_OPA_CPHASE_IN1NEG_PIN                                DL_GPIO_PIN_24
+#define GPIO_OPA_CPHASE_IOMUX_IN1NEG                             (IOMUX_PINCM54)
+#define GPIO_OPA_CPHASE_IOMUX_IN1NEG_FUNC           IOMUX_PINCM54_PF_UNCONNECTED
+#define GPIO_OPA_CPHASE_OUT_PORT                                           GPIOA
+#define GPIO_OPA_CPHASE_OUT_PIN                                   DL_GPIO_PIN_22
+#define GPIO_OPA_CPHASE_IOMUX_OUT                                (IOMUX_PINCM47)
+#define GPIO_OPA_CPHASE_IOMUX_OUT_FUNC              IOMUX_PINCM47_PF_UNCONNECTED
+
+
+
+/* Port definition for Pin Group OUTPUT */
+#define OUTPUT_PORT                                                      (GPIOB)
+
+/* Defines for POWER_EN: GPIOB.8 with pinCMx 25 on package pin 22 */
+#define OUTPUT_POWER_EN_PIN                                      (DL_GPIO_PIN_8)
+#define OUTPUT_POWER_EN_IOMUX                                    (IOMUX_PINCM25)
+/* Port definition for Pin Group LIGHT_DETECT */
+#define LIGHT_DETECT_PORT                                                (GPIOA)
+
+/* Defines for LIGHT_PWM_F: GPIOA.23 with pinCMx 53 on package pin 43 */
+// groups represented: ["HALL","LIGHT_DETECT"]
+// pins affected: ["HALLA","LIGHT_PWM_F"]
+#define GPIO_MULTIPLE_GPIOA_INT_IRQN                            (GPIOA_INT_IRQn)
+#define GPIO_MULTIPLE_GPIOA_INT_IIDX            (DL_INTERRUPT_GROUP1_IIDX_GPIOA)
+#define LIGHT_DETECT_LIGHT_PWM_F_IIDX                       (DL_GPIO_IIDX_DIO23)
+#define LIGHT_DETECT_LIGHT_PWM_F_PIN                            (DL_GPIO_PIN_23)
+#define LIGHT_DETECT_LIGHT_PWM_F_IOMUX                           (IOMUX_PINCM53)
+/* Defines for BREAK: GPIOA.28 with pinCMx 3 on package pin 3 */
+#define INPUT_BREAK_PORT                                                 (GPIOA)
+#define INPUT_BREAK_PIN                                         (DL_GPIO_PIN_28)
+#define INPUT_BREAK_IOMUX                                         (IOMUX_PINCM3)
+/* Defines for Cadence_Dir: GPIOA.9 with pinCMx 20 on package pin 17 */
+#define INPUT_Cadence_Dir_PORT                                           (GPIOA)
+#define INPUT_Cadence_Dir_PIN                                    (DL_GPIO_PIN_9)
+#define INPUT_Cadence_Dir_IOMUX                                  (IOMUX_PINCM20)
+/* Defines for Cadence_Speed: GPIOB.7 with pinCMx 24 on package pin 21 */
+#define INPUT_Cadence_Speed_PORT                                         (GPIOB)
+#define INPUT_Cadence_Speed_PIN                                  (DL_GPIO_PIN_7)
+#define INPUT_Cadence_Speed_IOMUX                                (IOMUX_PINCM24)
+/* Defines for PIN_GEAR: GPIOB.15 with pinCMx 32 on package pin 25 */
+#define INPUT_PIN_GEAR_PORT                                              (GPIOB)
+#define INPUT_PIN_GEAR_PIN                                      (DL_GPIO_PIN_15)
+#define INPUT_PIN_GEAR_IOMUX                                     (IOMUX_PINCM32)
+/* Defines for Speed_In: GPIOA.31 with pinCMx 6 on package pin 5 */
+#define INPUT_Speed_In_PORT                                              (GPIOA)
+#define INPUT_Speed_In_PIN                                      (DL_GPIO_PIN_31)
+#define INPUT_Speed_In_IOMUX                                      (IOMUX_PINCM6)
+/* Defines for HALLA: GPIOA.8 with pinCMx 19 on package pin 16 */
+#define HALL_HALLA_PORT                                                  (GPIOA)
+#define HALL_HALLA_IIDX                                      (DL_GPIO_IIDX_DIO8)
+#define HALL_HALLA_PIN                                           (DL_GPIO_PIN_8)
+#define HALL_HALLA_IOMUX                                         (IOMUX_PINCM19)
+/* Defines for HALLB: GPIOB.3 with pinCMx 16 on package pin 15 */
+#define HALL_HALLB_PORT                                                  (GPIOB)
+// pins affected by this interrupt request:["HALLB","HALLC"]
+#define HALL_GPIOB_INT_IRQN                                     (GPIOB_INT_IRQn)
+#define HALL_GPIOB_INT_IIDX                     (DL_INTERRUPT_GROUP1_IIDX_GPIOB)
+#define HALL_HALLB_IIDX                                      (DL_GPIO_IIDX_DIO3)
+#define HALL_HALLB_PIN                                           (DL_GPIO_PIN_3)
+#define HALL_HALLB_IOMUX                                         (IOMUX_PINCM16)
+/* Defines for HALLC: GPIOB.2 with pinCMx 15 on package pin 14 */
+#define HALL_HALLC_PORT                                                  (GPIOB)
+#define HALL_HALLC_IIDX                                      (DL_GPIO_IIDX_DIO2)
+#define HALL_HALLC_PIN                                           (DL_GPIO_PIN_2)
+#define HALL_HALLC_IOMUX                                         (IOMUX_PINCM15)
+/* Port definition for Pin Group GPIO_B_LED */
+#define GPIO_B_LED_PORT                                                  (GPIOB)
+
+/* Defines for PIN_LED_B_EN: GPIOB.16 with pinCMx 33 on package pin 26 */
+#define GPIO_B_LED_PIN_LED_B_EN_PIN                             (DL_GPIO_PIN_16)
+#define GPIO_B_LED_PIN_LED_B_EN_IOMUX                            (IOMUX_PINCM33)
+/* Defines for PIN_LED_B_SEL: GPIOB.6 with pinCMx 23 on package pin 20 */
+#define GPIO_B_LED_PIN_LED_B_SEL_PIN                             (DL_GPIO_PIN_6)
+#define GPIO_B_LED_PIN_LED_B_SEL_IOMUX                           (IOMUX_PINCM23)
+/* Port definition for Pin Group GPIO_F_LED */
+#define GPIO_F_LED_PORT                                                  (GPIOA)
+
+/* Defines for PIN_LED_F_EN: GPIOA.20 with pinCMx 42 on package pin 35 */
+#define GPIO_F_LED_PIN_LED_F_EN_PIN                             (DL_GPIO_PIN_20)
+#define GPIO_F_LED_PIN_LED_F_EN_IOMUX                            (IOMUX_PINCM42)
+/* Defines for PIN_LED_F_SEL: GPIOA.19 with pinCMx 41 on package pin 34 */
+#define GPIO_F_LED_PIN_LED_F_SEL_PIN                            (DL_GPIO_PIN_19)
+#define GPIO_F_LED_PIN_LED_F_SEL_IOMUX                           (IOMUX_PINCM41)
+
+
+
+
+/* Defines for WWDT */
+#define WWDT0_INST                                                       (WWDT0)
+#define WWDT0_INT_IRQN                                          (WWDT0_INT_IRQn)
+
+
+
+
+
+/* Defines for MCAN0 */
+#define MCAN0_INST                                                        CANFD0
+#define GPIO_MCAN0_CAN_TX_PORT                                             GPIOA
+#define GPIO_MCAN0_CAN_TX_PIN                                     DL_GPIO_PIN_12
+#define GPIO_MCAN0_IOMUX_CAN_TX                                  (IOMUX_PINCM34)
+#define GPIO_MCAN0_IOMUX_CAN_TX_FUNC               IOMUX_PINCM34_PF_CANFD0_CANTX
+#define GPIO_MCAN0_CAN_RX_PORT                                             GPIOA
+#define GPIO_MCAN0_CAN_RX_PIN                                     DL_GPIO_PIN_13
+#define GPIO_MCAN0_IOMUX_CAN_RX                                  (IOMUX_PINCM35)
+#define GPIO_MCAN0_IOMUX_CAN_RX_FUNC               IOMUX_PINCM35_PF_CANFD0_CANRX
+#define MCAN0_INST_IRQHandler                                 CANFD0_IRQHandler
+#define MCAN0_INST_INT_IRQN                                     CANFD0_INT_IRQn
+
+
+/* Defines for MCAN0 MCAN RAM configuration */
+#define MCAN0_INST_MCAN_STD_ID_FILT_START_ADDR     (0)
+#define MCAN0_INST_MCAN_STD_ID_FILTER_NUM          (0)
+#define MCAN0_INST_MCAN_EXT_ID_FILT_START_ADDR     (0)
+#define MCAN0_INST_MCAN_EXT_ID_FILTER_NUM          (0)
+#define MCAN0_INST_MCAN_TX_BUFF_START_ADDR         (0)
+#define MCAN0_INST_MCAN_TX_BUFF_SIZE               (0)
+#define MCAN0_INST_MCAN_FIFO_1_START_ADDR          (0)
+#define MCAN0_INST_MCAN_FIFO_1_NUM                 (32)
+#define MCAN0_INST_MCAN_TX_EVENT_START_ADDR        (0)
+#define MCAN0_INST_MCAN_TX_EVENT_SIZE              (32)
+#define MCAN0_INST_MCAN_EXT_ID_AND_MASK            (0x1FFFFFFFU)
+#define MCAN0_INST_MCAN_RX_BUFF_START_ADDR         (0)
+#define MCAN0_INST_MCAN_FIFO_0_START_ADDR          (0)
+#define MCAN0_INST_MCAN_FIFO_0_NUM                 (32)
+
+#define MCAN0_INST_MCAN_INTERRUPTS (DL_MCAN_INTERRUPT_RF0N | \
+						DL_MCAN_INTERRUPT_TC | \
+						DL_MCAN_INTERRUPT_TEFN)
+
+
+
+/* clang-format on */
+
+void SYSCFG_DL_init(void);
+void SYSCFG_DL_initPower(void);
+void SYSCFG_DL_GPIO_init(void);
+void SYSCFG_DL_DEBUG_init(void);
+void SYSCFG_DL_SYSCTL_init(void);
+void SYSCFG_DL_MOTOR_PWM_init(void);
+void SYSCFG_DL_PWM_F_init(void);
+void SYSCFG_DL_HALLTIMER_init(void);
+void SYSCFG_DL_HALL_CNT_init(void);
+void SYSCFG_DL_UART_HMI_init(void);
+void SYSCFG_DL_ADC12_0_init(void);
+void SYSCFG_DL_ADC12_1_init(void);
+void SYSCFG_DL_COMP_0_init(void);
+void SYSCFG_DL_OPA_BPHASE_init(void);
+void SYSCFG_DL_OPA_CPHASE_init(void);
+
+void SYSCFG_DL_SYSTICK_init(void);
+void SYSCFG_DL_WWDT0_init(void);
+
+void SYSCFG_DL_MCAN0_init(void);
+
+bool SYSCFG_DL_saveConfiguration(void);
+bool SYSCFG_DL_restoreConfiguration(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ti_msp_dl_config_h */