/******************************************************************************
* 文 件 名 称:BspDS1682.c
* 文件功能概述:实现DS1682接口声明
* 文 件 作 者:xxx
* 版 本:V1.0.0.0
* 修 订 记 录:2017-6-30创建
******************************************************************************/
#include "BspDS1682.h"
E_I2Cx eDs1682I2c[E_DS1682_Max] = {E_I2C_1};
uint8 u8Ds1682SubAddr[E_DS1682_Max]={0xD6};
/*
* 用于记录总上电次数
*/
static uint16 stTotalPwrUpCount[E_DS1682_Max] = {0};
/*
* 用于记录当前总的运行时间,单位是250ms
*/
static uint32 stTotalRunTime[E_DS1682_Max] = {0};
/*
* 用于记录上电时刻的总运行时间
*/
static uint32 stCurRunTimeBase[E_DS1682_Max] = {0};
/*
* 用于记录本次上电的总运行时间
*/
static uint32 stCurRunTime[E_DS1682_Max] = {0};
/*******************************************************************************
* 函 数 名:uint16 DS1682GetPwrUpCount(E_DS1682 eDs1682)
* 参 数:无
* 返 回:stTotalPwrUpCount :总上电次数
* 创 建 人:xxx
* 创建时间:2017-6-30
* 详 述:获取单板的总上电次数,完成初始化之后调用该函数
* 修改记录:2017-6-30创建
*******************************************************************************/
uint16 DS1682GetPwrUpCount(E_DS1682 eDs1682)
{
return stTotalPwrUpCount[eDs1682];
}
/*******************************************************************************
* 函 数 名:uint32 DS1682GetAllRunTime(E_DS1682 eDs1682)
* 参 数:无
* 返 回:stTotalRunTime :总运行时间
* 创 建 人:xxx
* 创建时间:2017-6-30
* 详 述:获取单板的总运行时间,完成初始化之后调用该函数,以250ms为单位
* 修改记录:2017-6-30创建
*******************************************************************************/
uint32 DS1682GetAllRunTime(E_DS1682 eDs1682)
{
uint8 data[4]={0,0,0,0};
uint8 RegAddr = 0;
RegAddr = DS1682_REG_TTA_BYTE_0;
I2CxReadBytes(eDs1682I2c[eDs1682],u8Ds1682SubAddr[eDs1682],&RegAddr,1,data,4);
stTotalRunTime[eDs1682] = ((data[3]<<24)|(data[2]<<16)|(data[1]<<8)|data[0]);
return stTotalRunTime[eDs1682];
}
/*******************************************************************************
* 函 数 名:uint32 DS1682GetCurRunTime(E_DS1682 eDs1682)
* 参 数:无
* 返 回: 0xffffffff :发生错误
非0xffffffff :当次上电后的运行时间
* 创 建 人:xxx
* 创建时间:2017-6-30
* 详 述:获取本次上电单板的运行时间,完成初始化之后调用该函数,以250ms为单位
* 修改记录:2017-6-30创建
*******************************************************************************/
uint32 DS1682GetCurRunTime(E_DS1682 eDs1682)
{
uint32 value = 0;
value = DS1682GetAllRunTime(eDs1682);
if(value >= stCurRunTimeBase[eDs1682])
{
stCurRunTime[eDs1682] = (value - stCurRunTimeBase[eDs1682]);
return stCurRunTime[eDs1682];
}
return 0xFFFFFFFF;
}
/*******************************************************************************
* 函 数 名:sint8 DS1682Init(E_DS1682 eDs1682)
* 参 数:无
* 返 回: -1 :发生错误 0 :正常返回
* 创 建 人:xxx
* 创建时间:2017-6-30
* 详 述:实现DS1682的初始化
* 修改记录:2017-6-30创建
*******************************************************************************/
sint8 DS1682Init(E_DS1682 eDs1682)
{
uint8 data[2]={0,0};
uint8 RegAddr = 0;
if(I2CxInit(eDs1682I2c[eDs1682]) == -1)
{
return -1;
}
else
{}
RegAddr = DS1682_REG_ECNT_LOW;
I2CxReadBytes(eDs1682I2c[eDs1682],u8Ds1682SubAddr[eDs1682],&RegAddr,1,data,2);
stTotalPwrUpCount[eDs1682] = ((data[1]<<8) | data[0]);
if(stTotalPwrUpCount[eDs1682] == 0xffff)
{
return -1;
}
else
{}
/*获取此时的运行总时间,作为本次上电的基准时间*/
stCurRunTimeBase[eDs1682] = DS1682GetAllRunTime(eDs1682);
return 0;
}
头文件
/******************************************************************************
* 文 件 名 称:BspDS1682.h
* 文件功能概述:实现DS1682接驱动口声明
* 文 件 作 者:xxx
* 版 本:V1.0.0.0
* 修 订 记 录:2017-6-30创建
******************************************************************************/
#ifndef __BSP_DS1682_H__
#define __BSP_DS1682_H__
/*----------------------------------------------*
* 包含头文件 *
*----------------------------------------------*/
#include "..\BspInterface.h"
/*----------------------------------------------*
* 宏定义 *
*----------------------------------------------*/
typedef enum
{
DS1682_REG_CONFIG = 0x00,
DS1682_REG_ATP_BYTE_0,
DS1682_REG_ATP_BYTE_1,
DS1682_REG_ATP_BYTE_2,
DS1682_REG_ATP_BYTE_3,
DS1682_REG_TTA_BYTE_0,
DS1682_REG_TTA_BYTE_1,
DS1682_REG_TTA_BYTE_2,
DS1682_REG_TTA_BYTE_3,
DS1682_REG_ECNT_LOW,
DS1682_REG_ECNT_HIGH,
DS1682_REG_MEM_BYTE_1,
DS1682_REG_MEM_BYTE_2,
DS1682_REG_MEM_BYTE_3,
DS1682_REG_MEM_BYTE_4,
DS1682_REG_MEM_BYTE_5,
DS1682_REG_MEM_BYTE_6,
DS1682_REG_MEM_BYTE_7,
DS1682_REG_MEM_BYTE_8,
DS1682_REG_MEM_BYTE_9,
DS1682_REG_MEM_BYTE_10,
DS1682_REG_RST = 0X1D,
DS1682_REG_WR_DISABLE,
DS1682_REG_WR_MEM_DISABLE,
}eDS1682_REG;
/*----------------------------------------------*
* 常量定义 *
*----------------------------------------------*/
/*----------------------------------------------*
* 外部变量说明 *
*----------------------------------------------*/
/*----------------------------------------------*
* 全局变量 *
*----------------------------------------------*/
/*----------------------------------------------*
* 模块级变量 *
*----------------------------------------------*/
typedef enum
{
E_DS1682_1=0x00,
E_DS1682_Max,
E_DS1682_Invalid
}E_DS1682;
/*----------------------------------------------*
* 外部函数原型说明 *
*----------------------------------------------*/
/*----------------------------------------------*
* 内部函数原型说明 *
*----------------------------------------------*/
sint8 DS1682Init(E_DS1682 eDs1682);
uint32 DS1682GetAllRunTime(E_DS1682 eDs1682);
uint32 DS1682GetCurRunTime(E_DS1682 eDs1682);
uint16 DS1682GetPwrUpCount(E_DS1682 eDs1682);
#endif