STM32之DS1682

/******************************************************************************
* 文 件  名 称: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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值