/************************************************************************ Project: Welling Motor Control Paltform Filename: i2c_master.h Partner Filename: i2c_master.c Description: The header file of i2c_master.c Complier: IAR Embedded Workbench for ARM 8.40.2 CPU TYPE : GD32F30x ************************************************************************* Copyright (c) 2022 Welling Motor Technology(Shanghai) Co. Ltd. All rights reserved. ************************************************************************* ************************************************************************* Revising History (ECL of this file): liyue create this file; ************************************************************************/ /************************************************************************ Beginning of File, do not put anything above here except notes Compiler Directives ************************************************************************/ #ifndef I2C_MASTER_H #define I2C_MASTER_H /************************************************************************ Included File *************************************************************************/ #include "user.h" #include "AssistCurve.h" #include "bikespeed.h" #include "Cadence.h" /************************************************************************ Compiler Directives (N/A) *************************************************************************/ #ifdef _I2C_MASTER_C_ #define _I2C_MASTER_EXT #else #define _I2C_MASTER_EXT extern #endif /************************************************************************ Definitions & Macros *************************************************************************/ /* EEPROM information */ #define I2C_EE_SIZE_NBYTES 1024 // 24C08: 8Kb,16Bytes/Page,64Pages #define I2C_EE_PAGESIZE_NBYTES 16 #define I2C_EE_SIZE_NBLOCKS I2C_EE_SIZE_NBYTES / 256 #define I2C_EE_SIZE_NPAGES I2C_EE_SIZE_NBYTES / I2C_EE_PAGESIZE_NBYTES #define I2C_SLAVEADDR_BLOCK1 0x00A0 // First 256 Bytes:0xA0, Second:0xA2,...0xA4,0xA6 #define I2C_SLAVEADDR_BLOCK2 0x00A2 // A0/A2/A4/A6: 7-bit slave address to be sent #define I2C_SLAVEADDR_BLOCK3 0x00A4 #define I2C_SLAVEADDR_BLOCK4 0x00A6 /* Size of parameter written to EEPROM */ #define I2C_MOTOR_PARA_N_BYTES 38 // I2C_SLAVEADDR_BLOCK1 #define I2C_BIKE_PARA_N_BYTES 26 // I2C_SLAVEADDR_BLOCK1 #define I2C_MCONTROL_PARA_N_BYTES 36 // I2C_SLAVEADDR_BLOCK1 #define I2C_SENSOR_PARA_N_BYTES 40 // I2C_SLAVEADDR_BLOCK1 #define I2C_ASSIST_PARA_N_BYTES 40 // I2C_SLAVEADDR_BLOCK1 #define I2C_HISTORY_PARA_N_BYTES 78 // I2C_SLAVEADDR_BLOCK3 #define I2C_MOTOR_PARA_N_WORDS I2C_MOTOR_PARA_N_BYTES / 2 // I2C_SLAVEADDR_BLOCK1 #define I2C_BIKE_PARA_N_WORDS I2C_BIKE_PARA_N_BYTES / 2 // I2C_SLAVEADDR_BLOCK1 #define I2C_MCONTROL_PARA_N_WORDS I2C_MCONTROL_PARA_N_BYTES / 2 // I2C_SLAVEADDR_BLOCK1 #define I2C_SENSOR_PARA_N_WORDS I2C_SENSOR_PARA_N_BYTES / 2 // I2C_SLAVEADDR_BLOCK1 #define I2C_ASSIST_PARA_N_WORDS I2C_ASSIST_PARA_N_BYTES / 2 // I2C_SLAVEADDR_BLOCK1 #define I2C_HISTORY_PARA_N_WORDS I2C_HISTORY_PARA_N_BYTES / 2 // I2C_SLAVEADDR_BLOCK3 #define I2C_PBUFFER_NWORDS 5 /* Address of parameter written to EEPROM */ #define I2C_MOTOR_PARA_ARDDR 0X00 #define I2C_BIKE_PARA_ARDDR I2C_MOTOR_PARA_ARDDR + I2C_MOTOR_PARA_N_BYTES #define I2C_MCONTROL_PARA_ARDDR I2C_BIKE_PARA_ARDDR + I2C_BIKE_PARA_N_BYTES #define I2C_SENSOR_PARA_ARDDR I2C_MCONTROL_PARA_ARDDR + I2C_MCONTROL_PARA_N_BYTES #define I2C_ASSIST_PARA_ARDDR I2C_SENSOR_PARA_ARDDR + I2C_SENSOR_PARA_N_BYTES #define I2C_HISTORY_PARA_ARDDR 0x00 #define I2C_MOTOR_PARA_CRC_ARDDR I2C_ASSIST_PARA_ARDDR + I2C_ASSIST_PARA_N_BYTES #define I2C_BIKE_PARA_CRC_ARDDR I2C_MOTOR_PARA_CRC_ARDDR + 2 #define I2C_MCONTROL_PARA_CRC_ARDDR I2C_BIKE_PARA_CRC_ARDDR + 2 #define I2C_SENSOR_PARA_CRC_ARDDR I2C_MCONTROL_PARA_CRC_ARDDR + 2 #define I2C_ASSIST_PARA_CRC_ARDDR I2C_SENSOR_PARA_CRC_ARDDR + 2 #define I2C_HISTORY_PARA_CRC_ARDDR I2C_HISTORY_PARA_ARDDR + I2C_HISTORY_PARA_N_BYTES /* I2C TX size: cannot exceed 255, CRC: 6 Bytes */ #define I2C_TX1_NBYTES \ 10 + I2C_MOTOR_PARA_N_BYTES + I2C_BIKE_PARA_N_BYTES + I2C_MCONTROL_PARA_N_BYTES + I2C_SENSOR_PARA_N_BYTES + I2C_ASSIST_PARA_N_BYTES // 172 bytes #define I2C_RETX1_TIMES 1 #define I2C_TX2_NBYTES 2 + I2C_HISTORY_PARA_N_BYTES // 78 Bytes #define I2C_RETX2_TIMES 1 #define I2C1_TX_DMA_NUM (I2C_TX1_NBYTES > I2C_TX2_NBYTES ? I2C_TX1_NBYTES : I2C_TX2_NBYTES) /* I2C RX size: cannot exceed 255 */ #define I2C_RX1_NBYTES I2C_TX1_NBYTES #define I2C_RX2_NBYTES I2C_TX2_NBYTES #define I2C1_RX_DMA_NUM (I2C_RX1_NBYTES > I2C_RX2_NBYTES ? I2C_RX1_NBYTES : I2C_RX2_NBYTES) #define I2C_RX_TIMES 2 /* I2C communication timeout */ #define I2C_SHORT_TIMEOUT 10000 #define I2C_LONG_TIMEOUT ((ULONG)I2C_SHORT_TIMEOUT * 6) #define I2C_DMA_TIMEOUT 100000L /************************************************************************ System Parameters *************************************************************************/ /*Reserve Para*/ #define I2CReserve \ { \ 500, 500, 0, 0, 0 \ } /* Motor Para */ #define I2CuwPolePairs \ { \ ((UWORD)M_POLE_PAIRS), 0, 0, 0, 0 \ } #define I2CuwRsmOhm \ { \ ((UWORD)M_RS_OHM), 0, 0, 0, 0 \ } #define I2CuwLduH \ { \ ((UWORD)M_LD_NOLOAD_MH), 0, 0, 0, 0 \ } #define I2CuwLquH \ { \ ((UWORD)M_LQ_NOLOAD_MH), 0, 0, 0, 0 \ } #define I2CuwFluxmWb \ { \ ((UWORD)M_FLUX_WB), 0, 0, 0, 0 \ } #define I2CuwIdMaxA \ { \ ((UWORD)M_ID_MAX_AP), 0, 0, 0, 0 \ } #define I2CuwIdMinA \ { \ ((UWORD)M_ID_MIN_AP), 0, 0, 0, 0 \ } #define I2CuwRSpdRpm \ { \ ((UWORD)M_R_SPD_RPM), 0, 0, 0, 0 \ } #define I2CuwRPwrWt \ { \ ((UWORD)M_R_PWR_WT), 0, 0, 0, 0 \ } #define I2CuwRCurA \ { \ ((UWORD)M_R_IRMS_A), 0, 0, 0, 0 \ } #define I2CuwRVolV \ { \ ((UWORD)M_R_UDC_v), 0, 0, 0, 0 \ } #define I2CuwJD \ { \ ((UWORD)M_JD), 0, 0, 0, 0 \ } #define I2CuwTorMaxNm \ { \ ((UWORD)M_MAX_TOR_NM), 0, 0, 0, 0 \ } #define I2CMotorPara \ { \ I2CuwPolePairs, I2CuwRsmOhm, I2CuwLduH, I2CuwLquH, I2CuwFluxmWb, I2CuwIdMaxA, I2CuwIdMinA, I2CuwRSpdRpm, I2CuwRPwrWt, I2CuwRCurA, \ I2CuwRVolV, I2CuwJD, I2CuwTorMaxNm, I2CReserve, I2CReserve, I2CReserve, I2CReserve, I2CReserve, I2CReserve \ } /* Bike Para */ #define I2CuwWheelPerimeter \ { \ ((UWORD)BIKE_WHEEL_PERIMETER), 0, 0, 0, 0 \ } #define I2CuwMechRationMotor \ { \ ((UWORD)BIKE_MECH_RATION), 0, 0, 0, 0 \ } #define I2CuwAssistMaxSpdKmH \ { \ ((UWORD)BIKE_SPEED_IQLIMIT_THRESHOLD1), 0, 0, 0, 0 \ } #define I2CuwThrottleMaxSpdKmH \ { \ ((UWORD)BIKE_SPEED_THROTTLE_MAX), 0, 0, 0, 0 \ } #define I2CuwNmFrontChainring \ { \ BIKE_FRONTTEETH_NMB, 0, 0, 0, 0 \ } #define I2CuwNmBackChainring \ { \ BIKE_BACKTEETH_NMB, 0, 0, 0, 0 \ } #define I2CuwAssistSelect1 \ { \ ((UWORD)BIKE_ASSIST_MODE1), 0, 0, 0, 0 \ } #define I2CuwAssistSelect2 \ { \ ((UWORD)BIKE_ASSIST_MODE2), 0, 0, 0, 0 \ } #define I2CuwLightVoltage \ { \ ((UWORD)BIKE_LIGHT_PARA), 0, 0, 0, 0 \ } #define I2CuwDeltDiameter \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwStartMode \ { \ ((UWORD)BIKE_START_MODE), 0, 0, 0, 0 \ } #define I2CuwAutoPowerOffTime \ { \ ((UWORD)BIKE_POWER_PARA), 0, 0, 0, 0 \ } #define I2CBikePara \ { \ I2CuwWheelPerimeter, I2CuwMechRationMotor, I2CuwAssistMaxSpdKmH, I2CuwThrottleMaxSpdKmH, I2CuwNmFrontChainring, I2CuwNmBackChainring, \ I2CuwAssistSelect1, I2CuwAssistSelect2, I2CuwLightVoltage, I2CuwDeltDiameter, I2CuwStartMode, I2CuwAutoPowerOffTime, I2CReserve \ } /* MControl Para */ #define I2CParaFirstSetFlg \ { \ 1, 0, 0, 0, 0 \ } #define I2CSpiOffsetFirstSetFlg \ { \ 0, 0, 0, 0, 0 \ } #define I2CswSPIPosOffsetOrigin \ { \ 0, 0, 0, 0, 0 \ } #define I2CswSPIPosOffsetNow \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwIPeakMaxA \ { \ ((UWORD)M_IS_PEAK_MAX_AP), 0, 0, 0, 0 \ } #define I2CuwAlamOCurA \ { \ ((UWORD)ALM_OVR_CNT_VAL), 0, 0, 0, 0 \ } #define I2CuwAlamOVolV \ { \ ((UWORD)ALM_OVR_VLT_LVL3_VAL), 0, 0, 0, 0 \ } #define I2CuwAlamUVolV \ { \ ((UWORD)ALM_UNDR_VLT_LVL2_VAL), 0, 0, 0, 0 \ } #define I2CuwAlamOverSpdRpm \ { \ ((UWORD)ALM_OVR_SPD_VAL), 0, 0, 0, 0 \ } #define I2CuwAlamOverHeatCe \ { \ ((UWORD)ALM_IPM_OVR_HEAT_VAL), 0, 0, 0, 0 \ } #define I2CuwAlamRecHeatCe \ { \ ((UWORD)ALM_IPM_OVR_HEAT_REC_VAL), 0, 0, 0, 0 \ } #define I2CuwPwrLimitStartCe \ { \ ((UWORD)PWRLIM_START_THRESHOLD_TEMP), 0, 0, 0, 0 \ } #define I2CMControlPara \ { \ I2CParaFirstSetFlg,I2CSpiOffsetFirstSetFlg,I2CswSPIPosOffsetOrigin, I2CswSPIPosOffsetNow, I2CuwIPeakMaxA, I2CuwAlamOCurA, I2CuwAlamOVolV, I2CuwAlamUVolV, I2CuwAlamOverSpdRpm, \ I2CuwAlamOverHeatCe, I2CuwAlamRecHeatCe, I2CuwPwrLimitStartCe, I2CReserve, I2CReserve, I2CReserve, I2CReserve, I2CReserve, I2CReserve \ } /* Sensor Para */ #define I2CuwTorSensorOffsetOrigin \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwTorSensorOffsetNow1 \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwTorSensorOffsetNow2 \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwTorSensorOffsetNow3 \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwTorSensorOffsetNow4 \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwBikeTorMaxNm \ { \ 850, 0, 0, 0, 0 \ } #define I2CuwBikeTor1StepRealNm \ { \ 250, 0, 0, 0, 0 \ } #define I2CuwBikeTor1StepADC \ { \ 1427, 0, 0, 0, 0 \ } #define I2CuwBikeTor2StepRealNm \ { \ 500, 0, 0, 0, 0 \ } #define I2CuwBikeTor2StepADC \ { \ 1985, 0, 0, 0, 0 \ } #define I2CuwBikeTor3StepRealNm \ { \ 750, 0, 0, 0, 0 \ } #define I2CuwBikeTor3StepADC \ { \ 2544, 0, 0, 0, 0 \ } #define I2CuwBikeTor4StepRealNm \ { \ 1000, 0, 0, 0, 0 \ } #define I2CuwBikeTor4StepADC \ { \ 3103, 0, 0, 0, 0 \ } #define I2CuwCadSensorPulseNm \ { \ CADENCE_NUMBERS_PULSES, 0, 0, 0, 0 \ } #define I2CuwBikeSpdSensorPulseNm \ { \ BIKESPEED_NUMBERS_PULSES, 0, 0, 0, 0 \ } #define I2CSensorPara \ { \ I2CuwTorSensorOffsetOrigin, I2CuwTorSensorOffsetNow1, I2CuwTorSensorOffsetNow2, I2CuwTorSensorOffsetNow3, I2CuwTorSensorOffsetNow4, \ I2CuwBikeTorMaxNm, I2CuwBikeTor1StepRealNm, I2CuwBikeTor1StepADC, I2CuwBikeTor2StepRealNm, I2CuwBikeTor2StepADC, \ I2CuwBikeTor3StepRealNm, I2CuwBikeTor3StepADC, I2CuwBikeTor4StepRealNm, I2CuwBikeTor4StepADC, I2CuwCadSensorPulseNm, \ I2CuwBikeSpdSensorPulseNm, I2CReserve, I2CReserve, I2CReserve, I2CReserve \ } /* Assist Para */ #define I2CswStartupGain \ { \ 4096, 0, 0, 0, 0 \ } #define I2CswStartcruiseGain \ { \ 4096, 0, 0, 0, 0 \ } #define I2CswNmAssistChangeNum \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG1AssistCoefaH \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG1AssistCoefaL \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG1AssistCoefbH \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG1AssistCoefbL \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG1AssistCoefcH \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG1AssistCoefcL \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG2AssistCoefaH \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG2AssistCoefaL \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG2AssistCoefbH \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG2AssistCoefbL \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG2AssistCoefcH \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG2AssistCoefcL \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG3AssistCoefaH \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG3AssistCoefaL \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG3AssistCoefbH \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG3AssistCoefbL \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG3AssistCoefcH \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG3AssistCoefcL \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG4AssistCoefaH \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG4AssistCoefaL \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG4AssistCoefbH \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG4AssistCoefbL \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG4AssistCoefcH \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG4AssistCoefcL \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG5AssistCoefaH \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG5AssistCoefaL \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG5AssistCoefbH \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG5AssistCoefbL \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG5AssistCoefcH \ { \ 0, 0, 0, 0, 0 \ } #define I2CswG5AssistCoefcL \ { \ 0, 0, 0, 0, 0 \ } #define I2CswCadAssistCoefa \ { \ 0, 0, 0, 0, 0 \ } #define I2CswCadAssistCoefb \ { \ 0, 0, 0, 0, 0 \ } #define I2CswCadAssistCoefc \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwAssistStartNm \ { \ TORQUE_START_THRESHOLD, 0, 0, 0, 0 \ } #define I2CuwAssistStopNm \ { \ TORQUE_STOP_THRESHOLD, 0, 0, 0, 0 \ } #define I2CuwStartUpGainStep \ { \ 20, 0, 0, 0, 0 \ } #define I2CuwStartUpCadNm \ { \ 700, 0, 0, 0, 0 \ } #define I2CuwTorLPFCadNm \ { \ 64, 0, 0, 0, 0 \ } #define I2CuwSpeedAssistSpdRpm \ { \ BIKE_SPD_MOTOR_CONSTANT_COMMAND, 0, 0, 0, 0 \ } #define I2CuwSpeedAssistIMaxA \ { \ BIKE_SPD_MOTOR_CURRENT_MAX, 0, 0, 0, 0 \ } #define I2CuwAssistLimitBikeSpdStart \ { \ BIKE_SPEED_IQLIMIT_THRESHOLD1, 0, 0, 0, 0 \ } #define I2CuwAssistLimitBikeSpdStop \ { \ BIKE_SPEED_IQLIMIT_THRESHOLD2, 0, 0, 0, 0 \ } #define I2CuwCadenceAssistWeight \ { \ 50, 0, 0, 0, 0 \ } #define I2CAssistPara \ { \ I2CswStartupGain, I2CswStartcruiseGain, I2CuwAssistStartNm, I2CuwAssistStopNm, I2CuwStartUpGainStep, I2CuwStartUpCadNm, I2CuwTorLPFCadNm, \ I2CuwSpeedAssistSpdRpm, I2CuwSpeedAssistIMaxA, I2CuwAssistLimitBikeSpdStart, I2CuwAssistLimitBikeSpdStop, I2CuwCadenceAssistWeight, \ I2CReserve, I2CReserve, I2CReserve, I2CReserve, I2CReserve, I2CReserve, I2CReserve, I2CReserve \ } /* History Para */ #define I2CuwAssModSelect \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwOpenTimes \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwUsedTimeH \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwUsedTimeL \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwNTCTempMaxCe \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwNTCTempMinCe \ { \ 100, 0, 0, 0, 0 \ } #define I2CuwAlamHOcurTimes \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwAlamSOcurTimes \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwAlamOHeatTimes \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwAlamRotorLockTimes \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwAlamPhsLossTimes \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwAlamOVolTimes \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwAlamUVolTimes \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwAlamComOTimeTimes \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwG1AvgPwrConsumption \ { \ 100, 0, 0, 0, 0 \ } #define I2CuwG2AvgPwrConsumption \ { \ 160, 0, 0, 0, 0 \ } #define I2CuwG3AvgPwrConsumption \ { \ 190, 0, 0, 0, 0 \ } #define I2CuwG4AvgPwrConsumption \ { \ 270, 0, 0, 0, 0 \ } #define I2CuwG5AvgPwrConsumption \ { \ 180, 0, 0, 0, 0 \ } #define I2CuwODOTripH \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwODOTripL \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwODOTimeH \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwODOTimeL \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwTripSumH \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwTripSumL \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwTripSumTimeH \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwTripSumTimeL \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwTorSensorAlamTimes \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwCadSensorAlamTimes \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwBikeSpdSensorAlamTimes \ { \ 0, 0, 0, 0, 0 \ } #define I2CuwPosSensorAlamTimes \ { \ 0, 0, 0, 0, 0 \ } #define I2CHistoryPara \ { \ I2CuwAssModSelect, I2CuwOpenTimes, I2CuwUsedTimeH, I2CuwUsedTimeL, I2CuwNTCTempMaxCe, I2CuwNTCTempMinCe, I2CuwAlamHOcurTimes, \ I2CuwAlamSOcurTimes, I2CuwAlamOHeatTimes, I2CuwAlamRotorLockTimes, I2CuwAlamPhsLossTimes, I2CuwAlamOVolTimes, I2CuwAlamUVolTimes, \ I2CuwAlamComOTimeTimes, I2CuwG1AvgPwrConsumption, I2CuwG2AvgPwrConsumption, I2CuwG3AvgPwrConsumption, I2CuwG4AvgPwrConsumption, \ I2CuwG5AvgPwrConsumption, I2CuwODOTripH, I2CuwODOTripL, I2CuwODOTimeH, I2CuwODOTimeL, I2CuwTripSumH, I2CuwTripSumL, I2CuwTripSumTimeH, \ I2CuwTripSumTimeL, I2CuwTorSensorAlamTimes, I2CuwCadSensorAlamTimes, I2CuwBikeSpdSensorAlamTimes, I2CuwPosSensorAlamTimes, I2CReserve, \ I2CReserve, I2CReserve, I2CReserve, I2CReserve, I2CReserve, I2CReserve, I2CReserve \ } /* System Para */ #define SYSPARA2 \ { \ I2CMotorPara, I2CBikePara, I2CMControlPara, I2CSensorPara, I2CAssistPara, I2CHistoryPara \ } /************************************************************************ TypeDefs & Structure defines (N/A) *************************************************************************/ typedef struct { UBYTE ubTX1NPages; UBYTE ubTX1NSingleBytes; } I2C_TX_COF; typedef struct { BOOL blTX1FinishFlg; BOOL blTX2FinishFlg; } I2C_TX_OUT; typedef struct { BOOL blMotorParaFltFlg; BOOL blBikeParaFltFlg; BOOL blMControlParaFltFlg; BOOL blSensorParaFltFlg; BOOL blAssistParaFltFlg; BOOL blHistoryParaFltFlg; BOOL ReadFinishFlg; UBYTE ubRdCnt; } I2C_RXCRC_OUT; typedef struct { UWORD uwDefault1; UWORD uwReal; UWORD uwMin; UWORD uwMax; UWORD uwUnit; } UWORD_VALUE; typedef struct { SWORD swDefault1; SWORD swReal; SWORD swMin; SWORD swMax; UWORD uwUnit; } SWORD_VALUE; typedef struct { UWORD_VALUE uwPolePairs; UWORD_VALUE uwRsmOhm; UWORD_VALUE uwLduH; UWORD_VALUE uwLquH; UWORD_VALUE uwFluxmWb; UWORD_VALUE uwIdMaxA; UWORD_VALUE uwIdMinA; UWORD_VALUE uwRSpdRpm; UWORD_VALUE uwRPwrWt; UWORD_VALUE uwRCurA; UWORD_VALUE uwRVolV; UWORD_VALUE uwJD; UWORD_VALUE uwTorMaxNm; UWORD_VALUE reserve1; UWORD_VALUE reserve2; UWORD_VALUE reserve3; UWORD_VALUE reserve4; UWORD_VALUE reserve5; UWORD_VALUE reserve6; } MOTOR_PARAMETER; typedef struct { UWORD_VALUE uwWheelPerimeter; UWORD_VALUE uwMechRationMotor; UWORD_VALUE uwAssistMaxSpdKmH; UWORD_VALUE uwThrottleMaxSpdKmH; UWORD_VALUE uwNmFrontChainring; UWORD_VALUE uwNmBackChainring; UWORD_VALUE uwAssistSelect1; UWORD_VALUE uwAssistSelect2; UWORD_VALUE uwLightVoltage; SWORD_VALUE swDeltPerimeter; UWORD_VALUE uwStartMode; UWORD_VALUE uwAutoPowerOffTime; UWORD_VALUE reserve1; } BIKE_PARAMETER; typedef struct { UWORD_VALUE ParaFirstSetFlg; UWORD_VALUE SpiOffsetFirstSetFlg; UWORD_VALUE uwSPIPosOffsetOrigin; UWORD_VALUE uwSPIPosOffsetNow; UWORD_VALUE uwIPeakMaxA; UWORD_VALUE uwAlamOCurA; UWORD_VALUE uwAlamOVolV; UWORD_VALUE uwAlamUVolV; UWORD_VALUE uwAlamOverSpdRpm; UWORD_VALUE uwAlamOverHeatCe; UWORD_VALUE uwAlamRecHeatCe; UWORD_VALUE uwPwrLimitStartCe; UWORD_VALUE reserve1; UWORD_VALUE reserve2; UWORD_VALUE reserve3; UWORD_VALUE reserve4; UWORD_VALUE reserve5; UWORD_VALUE reserve6; } MControl_PARAMETER; typedef struct { UWORD_VALUE uwTorSensorOffsetOrigin; UWORD_VALUE uwTorSensorOffsetNow1; UWORD_VALUE uwTorSensorOffsetNow2; UWORD_VALUE uwTorSensorOffsetNow3; UWORD_VALUE uwTorSensorOffsetNow4; UWORD_VALUE uwBikeTorMaxNm; UWORD_VALUE uwBikeTor1StepRealNm; UWORD_VALUE uwBikeTor1StepADC; UWORD_VALUE uwBikeTor2StepRealNm; UWORD_VALUE uwBikeTor2StepADC; UWORD_VALUE uwBikeTor3StepRealNm; UWORD_VALUE uwBikeTor3StepADC; UWORD_VALUE uwBikeTor4StepRealNm; UWORD_VALUE uwBikeTor4StepADC; UWORD_VALUE uwCadSensorPulseNm; UWORD_VALUE uwBikeSpdSensorPulseNm; UWORD_VALUE reserve1; UWORD_VALUE reserve2; UWORD_VALUE reserve3; UWORD_VALUE reserve4; } Sensor_PARAMETER; typedef struct { UWORD_VALUE uwStartupGain; UWORD_VALUE uwStartcruiseGain; UWORD_VALUE uwAssistStartNm; UWORD_VALUE uwAssistStopNm; UWORD_VALUE uwStartUpGainStep; UWORD_VALUE uwStartUpCadNm; UWORD_VALUE uwTorLPFCadNm; UWORD_VALUE uwSpeedAssistSpdRpm; UWORD_VALUE uwSpeedAssistIMaxA; UWORD_VALUE uwAssistLimitBikeSpdStart; UWORD_VALUE uwAssistLimitBikeSpdStop; UWORD_VALUE uwCadenceAssistWeight; UWORD_VALUE reserve1; UWORD_VALUE reserve2; UWORD_VALUE reserve3; UWORD_VALUE reserve4; UWORD_VALUE reserve5; UWORD_VALUE reserve6; UWORD_VALUE reserve7; UWORD_VALUE reserve8; } Assist_PARAMETER; typedef struct { UWORD_VALUE uwAssModSelect; UWORD_VALUE uwOpenTimes; UWORD_VALUE uwUsedTimeH; UWORD_VALUE uwUsedTimeL; UWORD_VALUE uwNTCTempMaxCe; UWORD_VALUE uwNTCTempMinCe; UWORD_VALUE uwAlamHOcurTimes; UWORD_VALUE uwAlamSOcurTimes; UWORD_VALUE uwAlamOHeatTimes; UWORD_VALUE uwAlamRotorLockTimes; UWORD_VALUE uwAlamPhsLossTimes; UWORD_VALUE uwAlamOVolTimes; UWORD_VALUE uwAlamUVolTimes; UWORD_VALUE uwAlamComOTimeTimes; UWORD_VALUE uwG1AvgPwrConsumption; UWORD_VALUE uwG2AvgPwrConsumption; UWORD_VALUE uwG3AvgPwrConsumption; UWORD_VALUE uwG4AvgPwrConsumption; UWORD_VALUE uwG5AvgPwrConsumption; UWORD_VALUE uwODOTripH; UWORD_VALUE uwODOTripL; UWORD_VALUE uwODOTimeH; UWORD_VALUE uwODOTimeL; UWORD_VALUE uwTripSumH; UWORD_VALUE uwTripSumL; UWORD_VALUE uwTripSumTimeH; UWORD_VALUE uwTripSumTimeL; UWORD_VALUE uwTorSensorAlamTimes; UWORD_VALUE uwCadSensorAlamTimes; UWORD_VALUE uwBikeSpdSensorAlamTimes; UWORD_VALUE uwPosSensorAlamTimes; UWORD_VALUE reserve1; UWORD_VALUE reserve2; UWORD_VALUE reserve3; UWORD_VALUE reserve4; UWORD_VALUE reserve5; UWORD_VALUE reserve6; UWORD_VALUE reserve7; UWORD_VALUE reserve8; } History_PARAMETER; typedef struct { MOTOR_PARAMETER stMotorPara; BIKE_PARAMETER stBikePara; MControl_PARAMETER stMControlPara; Sensor_PARAMETER stSensorPara; Assist_PARAMETER stAssistPara; History_PARAMETER stHistoryPara; } SYSTEM_PARAMETER2; /************************************************************************ Constant Table *************************************************************************/ /************************************************************************ Exported Variables *************************************************************************/ #ifdef _I2C_MASTER_C_ _I2C_MASTER_EXT SYSTEM_PARAMETER2 Syspara2 = SYSPARA2; _I2C_MASTER_EXT I2C_TX_COF i2c_stTXCoef; _I2C_MASTER_EXT I2C_TX_OUT i2c_stTXOut; _I2C_MASTER_EXT I2C_RXCRC_OUT i2c_stRXCRCOut = {FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}; _I2C_MASTER_EXT UBYTE I2C_ubReadBuffer[I2C_RX_TIMES][I2C1_RX_DMA_NUM]; _I2C_MASTER_EXT UWORD I2C_uwMotorParaRead[I2C_MOTOR_PARA_N_WORDS]; _I2C_MASTER_EXT UWORD I2C_uwBikeParaRead[I2C_BIKE_PARA_N_WORDS]; _I2C_MASTER_EXT UWORD I2C_uwMControlRead[I2C_MCONTROL_PARA_N_WORDS]; _I2C_MASTER_EXT UWORD I2C_uwSensorRead[I2C_SENSOR_PARA_N_WORDS]; _I2C_MASTER_EXT UWORD I2C_uwAssistParaRead[I2C_ASSIST_PARA_N_WORDS]; _I2C_MASTER_EXT UWORD I2C_uwHistoryParaRead[I2C_HISTORY_PARA_N_WORDS]; _I2C_MASTER_EXT UBYTE I2C_ubWriteBuffer[I2C_TX1_NBYTES]; _I2C_MASTER_EXT UBYTE I2C_ubHistoyWriteBuffer[I2C_TX2_NBYTES]; _I2C_MASTER_EXT UBYTE *I2C_pWriteBuffer = I2C_ubWriteBuffer; _I2C_MASTER_EXT UBYTE *I2C_pHistoryWriteBuffer = I2C_ubHistoyWriteBuffer; _I2C_MASTER_EXT UBYTE *I2C_pReadBuffer = I2C_ubReadBuffer[0]; _I2C_MASTER_EXT BOOL I2C_EE_ComuFltFlg = FALSE; #else _I2C_MASTER_EXT SYSTEM_PARAMETER2 Syspara2; _I2C_MASTER_EXT I2C_TX_COF i2c_stTXCoef; _I2C_MASTER_EXT I2C_TX_OUT i2c_stTXOut; _I2C_MASTER_EXT I2C_RXCRC_OUT i2c_stRXCRCOut; _I2C_MASTER_EXT UBYTE I2C_ubReadBuffer[I2C_RX_TIMES][I2C1_RX_DMA_NUM]; _I2C_MASTER_EXT UWORD I2C_uwMotorParaRead[I2C_MOTOR_PARA_N_WORDS]; _I2C_MASTER_EXT UWORD I2C_uwBikeParaRead[I2C_BIKE_PARA_N_WORDS]; _I2C_MASTER_EXT UWORD I2C_uwMControlRead[I2C_MCONTROL_PARA_N_WORDS]; _I2C_MASTER_EXT UWORD I2C_uwSensorRead[I2C_SENSOR_PARA_N_WORDS]; _I2C_MASTER_EXT UWORD I2C_uwAssistParaRead[I2C_ASSIST_PARA_N_WORDS]; _I2C_MASTER_EXT UWORD I2C_uwHistoryParaRead[I2C_HISTORY_PARA_N_WORDS]; _I2C_MASTER_EXT UBYTE I2C_ubWriteBuffer[I2C_TX1_NBYTES]; _I2C_MASTER_EXT UBYTE I2C_ubHistoyWriteBuffer[I2C_TX2_NBYTES]; _I2C_MASTER_EXT UBYTE *I2C_pWriteBuffer; _I2C_MASTER_EXT UBYTE *I2C_pHistoryWriteBuffer; _I2C_MASTER_EXT UBYTE *I2C_pReadBuffer; _I2C_MASTER_EXT BOOL I2C_EE_ComuFltFlg; #endif /************************************************************************ Exported Function Call Prototypes *************************************************************************/ #ifdef _I2C_MASTER_C_ _I2C_MASTER_EXT void i2c_voDefaultWriteBuffer(void); _I2C_MASTER_EXT void i2c_voParaWriteBuffer(void); _I2C_MASTER_EXT void i2c_voHistoryDefaultWriteBuffer(void); _I2C_MASTER_EXT void i2c_voHistoryWriteBuffer(void); _I2C_MASTER_EXT void i2c_voInfoWrite2EE(const I2C_TX_COF *coef, I2C_TX_OUT *out); _I2C_MASTER_EXT void i2c_voHistoryWrite2EE(const I2C_TX_COF *coef, I2C_TX_OUT *out); _I2C_MASTER_EXT void i2c_voSysparaReadFromEE(I2C_RXCRC_OUT *out); _I2C_MASTER_EXT UWORD i2c_uwCRCCcitt(const UBYTE *ptubBuf, UWORD length); _I2C_MASTER_EXT void i2c_voReadBufferCRC(I2C_RXCRC_OUT *out); _I2C_MASTER_EXT void i2c_voGetValueFrmBuffer(const I2C_RXCRC_OUT *out); #else _I2C_MASTER_EXT void i2c_voDefaultWriteBuffer(void); _I2C_MASTER_EXT void i2c_voParaWriteBuffer(void); _I2C_MASTER_EXT void i2c_voHistoryDefaultWriteBuffer(void); _I2C_MASTER_EXT void i2c_voHistoryWriteBuffer(void); _I2C_MASTER_EXT void i2c_voInfoWrite2EE(const I2C_TX_COF *coef, I2C_TX_OUT *out); _I2C_MASTER_EXT void i2c_voHistoryWrite2EE(const I2C_TX_COF *coef, I2C_TX_OUT *out); _I2C_MASTER_EXT void i2c_voSysparaReadFromEE(I2C_RXCRC_OUT *out); _I2C_MASTER_EXT UWORD i2c_uwCRCCcitt(const UBYTE *ptubBuf, UWORD length); _I2C_MASTER_EXT void i2c_voReadBufferCRC(I2C_RXCRC_OUT *out); _I2C_MASTER_EXT void i2c_voGetValueFrmBuffer(const I2C_RXCRC_OUT *out); #endif /************************************************************************ Flag Define (N/A) *************************************************************************/ #endif /************************************************************************ Copyright (c) 2022 Welling Motor Technology(Shanghai) Co. Ltd. All rights reserved. ************************************************************************* End of this File (EOF)! Do not put anything after this part! *************************************************************************/