ADM706是一款硬件看门狗,驱动如下:
/******************************************************************************
* 文 件 名 称:BspADM706.c
* 文件功能概述:实现ADM706接口声明
* 文 件 作 者:
* 版 本:V1.0.0.0
* 修 订 记 录:2017-6-30创建
******************************************************************************/
#include "..\inc\BspADM706.h"
/*
* 用于记录ADM706的端口信息
*/
static S_GpioCtrl stADM706Ctrl[E_ADM706_Max] =
{
{ RCC_AHB1Periph_GPIOC, GPIOC, GPIO_Pin_13 }
};
/*
* 用于记录喂狗模式:中断喂狗或应用喂狗
*/
static E_FEED_DOG_MODE stFeedDogMode[E_ADM706_Max] =
{ E_FEED_DOG_Invalid };
/*******************************************************************************
* 函 数 名:void WatchDogInit(E_ADM706 eADM706)
* 参 数:E_ADM706 eADM706:详见E_ADM706
* 返 回:无
* 创 建 人:
* 创建时间:2017-6-30
* 详 述:看门狗初始化
* 修改记录:2017-6-30创建
*******************************************************************************/
void WatchDogInit(E_ADM706 eADM706)
{
if(eADM706 < E_ADM706_Max)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(stADM706Ctrl[eADM706].GPIOxSource, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Pin = stADM706Ctrl[eADM706].GPIOxPinx;
GPIO_Init(stADM706Ctrl[eADM706].GPIOx, &GPIO_InitStructure);
stFeedDogMode[eADM706] = E_FEED_DOG_IN_APP;
WatchDogFeed(eADM706);
WatchDogFeed(eADM706);
}
else
{
/* do nothing */
}
}
/*******************************************************************************
* 函 数 名:void WatchDogFeed(E_ADM706 eADM706)
* 参 数:E_ADM706 eADM706:详见E_ADM706
* 返 回:无
* 创 建 人:
* 创建时间:2017-6-30
* 详 述:喂狗操作
* 修改记录:2017-6-30创建
*******************************************************************************/
void WatchDogFeed(E_ADM706 eADM706)
{
if(eADM706 < E_ADM706_Max)
{
GPIOxToggleBit(stADM706Ctrl[eADM706].GPIOx, stADM706Ctrl[eADM706].GPIOxPinx);
}
else
{
/* do nothing */
}
}
/*******************************************************************************
* 函 数 名:void WatchDogFeed(void)
* 参 数:无
* 返 回:无
* 创 建 人:
* 创建时间:2017-6-30
* 详 述:喂狗操作(所有的硬件看门狗)
* 修改记录:2017-6-30创建
*******************************************************************************/
void WatchDogFeedAll(void)
{
E_ADM706 eADM706 = E_ADM706_Invalid;
for(eADM706=E_ADM706_1; eADM706<E_ADM706_Max; eADM706++)
{
WatchDogFeed(eADM706);
}
}
/*******************************************************************************
* 函 数 名:void WatchDogSetMode(E_ADM706 eADM706,E_FEED_DOG_MODE FeedDogMode)
* 参 数:E_ADM706 eADM706:详见E_ADM706
E_FEED_DOG_MODE FeedDogMode :
E_FEED_DOG_IN_INT:在中断中喂狗
E_FEED_DOG_IN_APP:在应用程序中喂狗
* 返 回:无
* 创 建 人:
* 创建时间:2017-6-30
* 详 述:设置喂狗的方式,可以选择在中断中喂狗或者在应用程序中喂狗
* 修改记录:2017-6-30创建
*******************************************************************************/
void WatchDogSetMode(E_ADM706 eADM706,E_FEED_DOG_MODE FeedDogMode)
{
if(eADM706 < E_ADM706_Max)
{
stFeedDogMode[eADM706] = FeedDogMode;
}
else
{
/* do nothing */
}
}
/*******************************************************************************
* 函 数 名:E_FEED_DOG_MODE WatchDogGetMode(E_ADM706 eADM706)
* 参 数:E_ADM706 eADM706:详见E_ADM706
* 返 回:当前的喂狗方式:E_FEED_DOG_IN_INT 或 E_FEED_DOG_IN_APP
* 创 建 人:
* 创建时间:2017-6-30
* 详 述:获取当前的喂狗方式
* 修改记录:2017-6-30创建
*******************************************************************************/
E_FEED_DOG_MODE WatchDogGetMode(E_ADM706 eADM706)
{
if(eADM706 < E_ADM706_Max)
{
return stFeedDogMode[eADM706];
}
else
{
return E_FEED_DOG_Invalid;
}
}
头文件如下:
/******************************************************************************
* 文 件 名 称:BspADM706.h
* 文件功能概述:实现ADM706驱动接口声明
* 文 件 作 者:
* 版 本:V1.0.0.0
* 修 订 记 录:2017-6-30创建
******************************************************************************/
#ifndef __BSP_ADM706_H__
#define __BSP_ADM706_H__
/*----------------------------------------------*
* 包含头文件 *
*----------------------------------------------*/
#include "..\BspInterface.h"
/*----------------------------------------------*
* 宏定义 *
*----------------------------------------------*/
/*----------------------------------------------*
* 常量定义 *
*----------------------------------------------*/
typedef enum
{
E_ADM706_1=0x00,
E_ADM706_Max,
E_ADM706_Invalid
}E_ADM706;
typedef enum
{
E_FEED_DOG_IN_INT,
E_FEED_DOG_IN_APP,
E_FEED_DOG_Invalid
}E_FEED_DOG_MODE;
/*----------------------------------------------*
* 外部变量说明 *
*----------------------------------------------*/
/*----------------------------------------------*
* 全局变量 *
*----------------------------------------------*/
/*----------------------------------------------*
* 模块级变量 *
*----------------------------------------------*/
/*----------------------------------------------*
* 外部函数原型说明 *
*----------------------------------------------*/
/*----------------------------------------------*
* 内部函数原型说明 *
*----------------------------------------------*/
void WatchDogInit(E_ADM706 eADM706);
void WatchDogFeed(E_ADM706 eADM706);
void WatchDogFeedAll(void);
void WatchDogSetMode(E_ADM706 eADM706, E_FEED_DOG_MODE FeedDogMode);
E_FEED_DOG_MODE WatchDogGetMode(E_ADM706 eADM706);
#endif