#ifndef _FRam_H_ #define _FRam_H_ /****************************************************************************** * NAME: fRam.h *******************************************************************************/ /*_____ M A C R O S __________________________________________________________*/ //端口 #define FM_CS_EN GPIO_ResetBits(GPIOC, GPIO_Pin_6); #define FM_CS_DIS GPIO_SetBits(GPIOC, GPIO_Pin_6); #define FM_WP_EN GPIO_ResetBits(GPIOC, GPIO_Pin_7); #define FM_WP_DIS GPIO_SetBits(GPIOC, GPIO_Pin_7); //FM 命令 #define FM_WREN 0X06 //读写使能 #define FM_READ 0X03 //读命令 #define FM_WRITE 0X02 //写命令 #define CLI() __set_PRIMASK(1) #define SEI() __set_PRIMASK(0) /*_____ M A C R O S __________________________________________________________*/ //CONFIG(配置) #define FRAM_SPACE_SIZE (0X800) ///定义铁电最大保存容量 #define FristStart_Addr 0 //****************************************************************************** // 存储器内容 #define uniGlobal s_uniGlobal.u //****************************************************************************** // FRAM_DATA_MAP //****************************************************************************** #define checkLen_1 0 ///如果数据组带有校验,增加1byte //============================================================================== //单价 ///全局缓冲中的值 #define buf_Price uniGlobal.Price ///结构体定义 #define Price_FADR 100 #define Price_SADR FRAM_SPACE_SIZE/2+100 #define Price_LEN (sizeof(buf_Price) + checkLen_1) #define Price_arrayNb gunNumber //============================================================================== //班累 ///全局缓冲中的值 #define buf_M_SquadTop uniGlobal.M_SquadTop ///结构体定义 #define M_SquadTop_FADR (Price_FADR + Price_LEN) #define M_SquadTop_SADR (Price_SADR + Price_LEN) #define M_SquadTop_LEN (sizeof(buf_M_SquadTop) + checkLen_1) #define M_SquadTop_arrayNb gunNumber //============================================================================== //班累 ///全局缓冲中的值 #define buf_V_SquadTop uniGlobal.V_SquadTop ///结构体定义 #define V_SquadTop_FADR (M_SquadTop_FADR + M_SquadTop_LEN) #define V_SquadTop_SADR (M_SquadTop_SADR + M_SquadTop_LEN) #define V_SquadTop_LEN (sizeof(buf_V_SquadTop) + checkLen_1) #define V_SquadTop_arrayNb gunNumber //============================================================================== //班累 ///全局缓冲中的值 #define buf_S_SquadTop uniGlobal.S_SquadTop ///结构体定义 #define S_SquadTop_FADR (V_SquadTop_FADR + V_SquadTop_LEN) #define S_SquadTop_SADR (V_SquadTop_SADR + V_SquadTop_LEN) #define S_SquadTop_LEN (sizeof(buf_S_SquadTop) + checkLen_1) #define S_SquadTop_arrayNb gunNumber //体积总累 ///全局缓冲中的值 #define buf_MassTop uniGlobal.MassTop ///结构体定义 #define MassTop_FADR (S_SquadTop_FADR + S_SquadTop_LEN) #define MassTop_SADR (S_SquadTop_SADR + S_SquadTop_LEN) #define MassTop_LEN (sizeof(buf_MassTop) + checkLen_1) #define MassTop_arrayNb gunNumber //质量总累 ///全局缓冲中的值 #define buf_VolumeTop uniGlobal.VolumeTop ///结构体定义 #define VolumeTop_FADR (MassTop_FADR + MassTop_LEN) #define VolumeTop_SADR (MassTop_SADR + MassTop_LEN) #define VolumeTop_LEN (sizeof(buf_VolumeTop) + checkLen_1) #define VolumeTop_arrayNb gunNumber //金额总累 ///全局缓冲中的值 #define buf_SaleTop uniGlobal.SaleTop ///结构体定义 #define SaleTop_FADR (VolumeTop_FADR + VolumeTop_LEN) #define SaleTop_SADR (VolumeTop_SADR + VolumeTop_LEN) #define SaleTop_LEN (sizeof(buf_SaleTop) + checkLen_1) #define SaleTop_arrayNb gunNumber //卸车总累 ///全局缓冲中的值 #define buf_StockTop uniGlobal.StockTop ///结构体定义 #define StockTop_FADR (SaleTop_FADR + SaleTop_LEN) #define StockTop_SADR (SaleTop_SADR + SaleTop_LEN) #define StockTop_LEN (sizeof(buf_StockTop) + checkLen_1) #define StockTop_arrayNb gunNumber //小数点 ///全局缓冲中的值 #define buf_Decimal uniGlobal.Decimal ///结构体定义 #define Decimal_FADR (StockTop_FADR + StockTop_LEN) #define Decimal_SADR (StockTop_SADR + StockTop_LEN) #define Decimal_LEN (sizeof(buf_Decimal) + checkLen_1) #define Decimal_arrayNb gunNumber //系统时间 ///全局缓冲中的值 #define buf_SystemTime uniGlobal.SystemTime ///结构体定义 #define SystemTime_FADR (Decimal_FADR + Decimal_LEN) #define SystemTime_SADR (Decimal_SADR + Decimal_LEN) #define SystemTime_LEN (sizeof(buf_SystemTime) + checkLen_1) #define SystemTime_arrayNb gunNumber //流量计模式 ///全局缓冲中的值 #define buf_GasWorkMode uniGlobal.GasWorkMode ///结构体定义 #define GasWorkMode_FADR (SystemTime_FADR + SystemTime_LEN) #define GasWorkMode_SADR (SystemTime_SADR + SystemTime_LEN) #define GasWorkMode_LEN (sizeof(buf_GasWorkMode) + checkLen_1) #define GasWorkMode_arrayNb gunNumber //脉冲当量 ///全局缓冲中的值 #define buf_PulseEqu uniGlobal.PulseEqu ///结构体定义 #define PulseEqu_FADR (GasWorkMode_FADR + GasWorkMode_LEN) #define PulseEqu_SADR (GasWorkMode_SADR + GasWorkMode_LEN) #define PulseEqu_LEN (sizeof(buf_PulseEqu) + checkLen_1) #define PulseEqu_arrayNb gunNumber //密度 ///全局缓冲中的值 #define buf_Density uniGlobal.Density ///结构体定义 #define Density_FADR (PulseEqu_FADR + PulseEqu_LEN) #define Density_SADR (PulseEqu_SADR + PulseEqu_LEN) #define Density_LEN (sizeof(buf_Density) + checkLen_1) #define Density_arrayNb gunNumber //最小显示量 ///全局缓冲中的值 #define buf_MinDisp uniGlobal.MinDisp ///结构体定义 #define MinDisp_FADR (Density_FADR + Density_LEN) #define MinDisp_SADR (Density_SADR + Density_LEN) #define MinDisp_LEN (sizeof(buf_MinDisp) + checkLen_1) #define MinDisp_arrayNb gunNumber //提前关阀量 ///全局缓冲中的值 #define buf_ValueTurnOff uniGlobal.ValueTurnOff ///结构体定义 #define ValueTurnOff_FADR (MinDisp_FADR + MinDisp_LEN) #define ValueTurnOff_SADR (MinDisp_SADR + MinDisp_LEN) #define ValueTurnOff_LEN (sizeof(buf_ValueTurnOff) + checkLen_1) #define ValueTurnOff_arrayNb gunNumber //过冲量 ///全局缓冲中的值 #define buf_ValueOverShoot uniGlobal.ValueOverShoot ///结构体定义 #define ValueOverShoot_FADR (ValueTurnOff_FADR + ValueTurnOff_LEN) #define ValueOverShoot_SADR (ValueTurnOff_SADR + ValueTurnOff_LEN) #define ValueOverShoot_LEN (sizeof(buf_ValueOverShoot) + checkLen_1) #define ValueOverShoot_arrayNb gunNumber //时间计数器 ///全局缓冲中的值 #define buf_TimeCount uniGlobal.TimeCount ///结构体定义 #define TimeCount_FADR (ValueOverShoot_FADR + ValueOverShoot_LEN) #define TimeCount_SADR (ValueOverShoot_SADR + ValueOverShoot_LEN) #define TimeCount_LEN (sizeof(buf_TimeCount) + checkLen_1) #define TimeCount_arrayNb gunNumber //当次加油数据 ///全局缓冲中的值 #define buf_FuelRecord0 uniGlobal.FuelRecord0 ///结构体定义 #define FuelRecord0_FADR (TimeCount_FADR + TimeCount_LEN) #define FuelRecord0_SADR (TimeCount_SADR + TimeCount_LEN) #define FuelRecord0_LEN (sizeof(buf_FuelRecord0) + checkLen_1) #define FuelRecord0_arrayNb gunNumber //前次加油数据 ///全局缓冲中的值 #define buf_FuelRecord1 uniGlobal.FuelRecord1 ///结构体定义 #define FuelRecord1_FADR (FuelRecord0_FADR + FuelRecord0_LEN) #define FuelRecord1_SADR (FuelRecord0_SADR + FuelRecord0_LEN) #define FuelRecord1_LEN (sizeof(buf_FuelRecord1) + checkLen_1) #define FuelRecord1_arrayNb gunNumber //限制加油次数 ///全局缓冲中的值 #define buf_TriesLimit uniGlobal.TriesLimit ///结构体定义 #define TriesLimit_FADR (FuelRecord1_FADR + FuelRecord1_LEN) #define TriesLimit_SADR (FuelRecord1_SADR + FuelRecord1_LEN) #define TriesLimit_LEN (sizeof(buf_TriesLimit) + checkLen_1) #define TriesLimit_arrayNb gunNumber //流量计地址 ///全局缓冲中的值 #define buf_GasAddr uniGlobal.GasAddr ///结构体定义 #define GasAddr_FADR (TriesLimit_FADR + TriesLimit_LEN) #define GasAddr_SADR (TriesLimit_SADR + TriesLimit_LEN) #define GasAddr_LEN (sizeof(buf_GasAddr) + checkLen_1) #define GasAddr_arrayNb gunNumber //流量计地址 ///全局缓冲中的值 #define buf_GasAddr uniGlobal.GasAddr ///结构体定义 #define GasAddr_FADR (TriesLimit_FADR + TriesLimit_LEN) #define GasAddr_SADR (TriesLimit_SADR + TriesLimit_LEN) #define GasAddr_LEN (sizeof(buf_GasAddr) + checkLen_1) #define GasAddr_arrayNb gunNumber //比例系数 ///全局缓冲中的值 #define buf_GasScaleCoefficients uniGlobal.GasScaleCoefficients ///结构体定义 #define GasScaleCoefficients_FADR (GasAddr_FADR + GasAddr_LEN) #define GasScaleCoefficients_SADR (GasAddr_SADR + GasAddr_LEN) #define GasScaleCoefficients_LEN (sizeof(buf_GasScaleCoefficients) + checkLen_1) #define GasScaleCoefficients_arrayNb gunNumber //密度 ///全局缓冲中的值 #define buf_GasDensity uniGlobal.GasDensity ///结构体定义 #define GasDensity_FADR (GasScaleCoefficients_FADR + GasScaleCoefficients_LEN) #define GasDensity_SADR (GasScaleCoefficients_SADR + GasScaleCoefficients_LEN) #define GasDensity_LEN (sizeof(buf_GasDensity) + checkLen_1) #define GasDensity_arrayNb gunNumber ///全局缓冲中的值 #define buf_GasPourTo1 uniGlobal.GasPourTo1 ///结构体定义 #define GasPourTo1_FADR (GasDensity_FADR + GasDensity_LEN) #define GasPourTo1_SADR (GasDensity_SADR + GasDensity_LEN) #define GasPourTo1_LEN (sizeof(buf_GasPourTo1) + checkLen_1) #define GasPourTo1_arrayNb gunNumber //低中到高流速切换 ///全局缓冲中的值 #define buf_GasPour1To2 uniGlobal.GasPour1To2 ///结构体定义 #define GasPour1To2_FADR (GasPourTo1_FADR + GasPourTo1_LEN) #define GasPour1To2_SADR (GasPourTo1_SADR + GasPourTo1_LEN) #define GasPour1To2_LEN (sizeof(buf_GasPour1To2) + checkLen_1) #define GasPour1To2_arrayNb gunNumber //最大流速 ///全局缓冲中的值 #define buf_GasFlowMax uniGlobal.GasFlowMax ///结构体定义 #define GasFlowMax_FADR (GasPour1To2_FADR + GasPour1To2_LEN) #define GasFlowMax_SADR (GasPour1To2_SADR + GasPour1To2_LEN) #define GasFlowMax_LEN (sizeof(buf_GasFlowMax) + checkLen_1) #define GasFlowMax_arrayNb gunNumber //最小流速 ///全局缓冲中的值 #define buf_GasFlowMin uniGlobal.GasFlowMin ///结构体定义 #define GasFlowMin_FADR (GasFlowMax_FADR + GasFlowMax_LEN) #define GasFlowMin_SADR (GasFlowMax_SADR + GasFlowMax_LEN) #define GasFlowMin_LEN (sizeof(buf_GasFlowMin) + checkLen_1) #define GasFlowMin_arrayNb gunNumber //最大压力值 ///全局缓冲中的值 #define buf_PressureMax uniGlobal.PressureMax ///结构体定义 #define PressureMax_FADR (GasFlowMin_FADR + GasFlowMin_LEN) #define PressureMax_SADR (GasFlowMin_SADR + GasFlowMin_LEN) #define PressureMax_LEN (sizeof(buf_PressureMax) + checkLen_1) #define PressureMax_arrayNb gunNumber //最小压力值 ///全局缓冲中的值 #define buf_PressureMin uniGlobal.PressureMin ///结构体定义 #define PressureMin_FADR (PressureMax_FADR + PressureMax_LEN) #define PressureMin_SADR (PressureMax_SADR + PressureMax_LEN) #define PressureMin_LEN (sizeof(buf_PressureMin) + checkLen_1) #define PressureMin_arrayNb gunNumber //卡介质 ///全局缓冲中的值 #define buf_Medium uniGlobal.Medium ///结构体定义 #define Medium_FADR (PressureMin_FADR + PressureMin_LEN) #define Medium_SADR (PressureMin_SADR + PressureMin_LEN) #define Medium_LEN (sizeof(buf_Medium) + checkLen_1) #define Medium_arrayNb gunNumber //显示类型设置 ///全局缓冲中的值 #define buf_DispSet uniGlobal.DispSet ///结构体定义 #define DispSet_FADR (Medium_FADR + Medium_LEN) #define DispSet_SADR (Medium_SADR + Medium_LEN) #define DispSet_LEN (sizeof(buf_DispSet) + checkLen_1) #define DispSet_arrayNb gunNumber //补偿 ///全局缓冲中的值 #define buf_Compensation uniGlobal.Compensation ///结构体定义 #define Compensation_FADR (DispSet_FADR + DispSet_LEN) #define Compensation_SADR (DispSet_SADR + DispSet_LEN) #define Compensation_LEN (sizeof(buf_Compensation) + checkLen_1) #define Compensation_arrayNb gunNumber //RTC时钟第一次开机标志 ///全局缓冲中的值 #define buf_RTCTimer_Flag uniGlobal.RTCTimer_Flag ///结构体定义 #define RTCTimer_Flag_FADR (Compensation_FADR + Compensation_LEN) #define RTCTimer_Flag_SADR (Compensation_SADR + Compensation_LEN) #define RTCTimer_Flag_LEN (sizeof(buf_RTCTimer_Flag) + checkLen_1) #define RTCTimer_Flag_arrayNb gunNumber //RTC时钟备份 ///全局缓冲中的值 #define buf_RTCTimer_BKB uniGlobal.RTCTimer_BKB ///结构体定义 #define RTCTimer_BKB_FADR (RTCTimer_Flag_FADR + RTCTimer_Flag_LEN) #define RTCTimer_BKB_SADR (RTCTimer_Flag_SADR + RTCTimer_Flag_LEN) #define RTCTimer_BKB_LEN (sizeof(buf_RTCTimer_BKB) + checkLen_1) #define RTCTimer_BKB_arrayNb gunNumber //存储器完好标致 ///全局缓冲中的值 #define buf_FRam_Flag uniGlobal.FRam_Flag ///结构体定义 #define FRam_Flag_FADR (RTCTimer_BKB_FADR + RTCTimer_BKB_LEN) #define FRam_Flag_SADR (RTCTimer_BKB_SADR + RTCTimer_BKB_LEN) #define FRam_Flag_LEN (sizeof(buf_FRam_Flag) + checkLen_1) #define FRam_Flag_arrayNb gunNumber typedef struct { u32 volume; //volume与sale 必须连续,符个字符对齐首地址 u32 sale; //金额 u32 price; //单价 }s_FuelRecord_Typedef; typedef struct { union { u8 Global[100]; //全局最大个数 u16 Price[gunNumber]; //单价 u64 M_SquadTop[gunNumber]; //班累 u64 V_SquadTop[gunNumber]; //班累 u64 S_SquadTop[gunNumber]; //班累 u64 MassTop[gunNumber]; //质量总累 u64 VolumeTop[gunNumber]; //体积总累 u64 SaleTop[gunNumber]; //金额总累 u64 StockTop[gunNumber]; //卸车总累 u8 Decimal[3]; //小数点 金额 体积 单价 u8 SystemTime[7]; //系统时间 年年 月 日 时 分 秒 u8 GasWorkMode[gunNumber]; //加气模式 u32 PulseEqu[gunNumber]; //脉冲当量 u32 Density[gunNumber]; //密度 u16 MinDisp[gunNumber]; //最小显示量 u8 ValueTurnOff[gunNumber][50]; //提前关阀量 int8_t ValueOverShoot[gunNumber][2]; //过冲量 u32 TimeCount; //时间计数器 s_FuelRecord_Typedef FuelRecord0[gunNumber];//当次加油数据 s_FuelRecord_Typedef FuelRecord1[gunNumber];//前次加油数据 u32 TriesLimit; //限制加油次数 /******************流量计相关*******************/ u8 GasAddr[gunNumber]; //当前地址0开始,按顺序,与抢号对应 u16 GasScaleCoefficients[gunNumber]; //比例系数 u16 GasDensity[gunNumber]; //密度 u8 GasPourTo1[gunNumber]; //低到中流速切换阀值0-5 默认 2 Kg/Min u8 GasPour1To2[gunNumber]; //中到高流速切换阀值0-5 默认 1.5Kg/Min u8 GasFlowMax[gunNumber]; //最大流速值0-90 默认 50Kg/Min u8 GasFlowMin[gunNumber]; //最小流速值0-90 默认 50Kg/Min /******************压力检测相关******************/ u16 PressureMax[gunNumber]; //最大允许压力0-40 默认20MPa u16 PressureMin[gunNumber]; //最小允许压力 u16 Medium; //卡介质 u16 DispSet; //显示类型设置 float Compensation[gunNumber];//补偿 u8 RTCTimer_Flag; //RTC初次启动标志 u32 RTCTimer_BKB; //RTC计数备份 u8 FRam_Flag; }u; u8 CheckAdd; }s_uniGlobal_Typedef; //存储器读写缓存共用体 typedef enum { CF_Price, //单价 CF_M_SquadTop, //质量班累 CF_V_SquadTop, //体积班累 CF_S_SquadTop, //金额班累 CF_MassTop, //质量总累 CF_VolumeTop, //体积总累 CF_SaleTop, //金额总累 CF_StockTop, //卸车总累 CF_Decimal, //小数点 CF_SystemTime, //系统时间 CF_GasWorkMode, //流量计模式 CF_PulseEqu, //脉冲当量 CF_Density, //密度 CF_MinDisp, //最小显示量 CF_ValueTurnOff, //提前关阀量 CF_ValueOverShoot, //过冲量 CF_TimeCount, //时间计数器 CF_FuelRecord0, //当次加油记录 CF_FuelRecord1, //前次加油记录 CF_TriesLimit, //限制加油次数 CF_GasAddr, //流量计地址 CF_GasScaleCoefficients, //流量计比例系数 CF_GasDensity, //流量计密度 CF_GasPourTo1, //低到中流速切换阀值0-5 默认 2 Kg/Min CF_GasPour1To2, //低到中流速切换阀值0-5 默认 2 Kg/Min CF_GasFlowMax, //最大流速值0-90 默认 50Kg/Min CF_GasFlowMin, //最大流速值0-90 默认 50Kg/Min CF_PressureMax, //最大允许压力0-40 默认20MPa CF_Medium, //卡介质 CF_DispSet, //显示类型设置 CF_Compensation, //补偿 CF_RTCTimer_Flag, CF_RTCTimer_BKB, CF_FRam_Flag, //存储器出错标志 FramItemEnd, }FramItem; //******************************************************************************** typedef struct { u8* pInitData;//初始化指针 u8* upData; //共用体数据缓存区指针 u8* pData; //pGun数据指针 u16 firstAdr; //第一地址 u16 secondAdr;//第二地址 u8 len; //长度 u8 Tpye; //类型 }framDataIndex; void FM_Init(void); u8 FMItemWrite(FramItem Type); u8 FMItemRead(FramItem Type); void FM_Data_Init(void); #endif