历史上的今天
今天是:2025年04月06日(星期日)
2021年04月06日 | 恩智浦 飞思卡尔Freescale Kinetis KEA128学习笔记3——看门狗
2021-04-06 来源:eefocus
KEA128是M0内核的ARM单片机,只有一个看门狗,不像其他ARM单片机,可能有多个看门狗,如STM32F103系列就有2个看门狗,KEA128只有一个,单可配置成两种模式,即独立看门狗模式或窗口模式。
在使用看门狗时,系统上电后对WDOG_CS1、WDOG_CS2,WDOG_TOVAL只能写一次,之后再写就无效了,除非在需要重新写的寄存器之前加上那个解锁序列:WDOG->CNT = 0x20C5,WDOG->CNT = 0x28D9. 所以在对这些寄存器进行写操作时,最好一次性写完。

//============================================================================
//文件名称:wdog.h
//功能概要:KEA128 看门狗驱动程序头文件
//版权所有:苏州大学飞思卡尔嵌入式中心(sumcu.suda.edu.cn)
//版本更新:2015-05-11 V1.0 初始版本
//=================苏州大学飞思卡尔嵌入式中心2015=========================
#ifndef __WDOG_H__
#define __WDOG_H__
//1 头文件
#include "common.h"
//=================接口函数声明===========================================
//=========================================================================
//函数名称:wdog_init
//功能概要:初始化看门狗模块
//参数说明:无
//函数返回:无
//=========================================================================
void wdog_init(void);
//=========================================================================
//函数名称:wdog_disable
//功能概要:关闭看门狗模块
//参数说明:无
//函数返回:无
//=========================================================================
void wdog_disable(void);
//=========================================================================
//函数名称:wdog_enable
//功能概要:启动看门狗
//参数说明:无
//函数返回:无
//=========================================================================
void wdog_enable(void);
//=========================================================================
//函数名称:wdog_feed
//功能概要:复位看门狗定时器,喂狗
//参数说明:无
//函数返回:无
//=========================================================================
void wdog_feed(void);
//=========================================================================
//函数名称:wdog_enable_int
//功能概要:启动看门狗中断
//参数说明:无
//函数返回:无
//=========================================================================
void wdog_enable_int(void);
//=========================================================================
//函数名称:wdog_disable_int
//功能概要:关闭看门狗中断
//参数说明:无
//函数返回:无
//=========================================================================
void wdog_disable_int(void);
#endif

看门狗操作步骤:
1.取消写保护,解锁看门狗保护
2.确定时钟(KEA128只需确定时钟,其他芯片看情况)
3.设置看门狗重载值,确定溢出时间
4.使能看门狗,设置何种模式下使能看门狗
5,在应用程序开始处要初始化看门狗,在程序容易跑飞的地方设置看门狗
//========================================================================
//文件名称:wdog.c
//功能概要:KEA128看门狗驱动程序程序源文件
//=================苏州大学飞思卡尔嵌入式中心2015==========================
#include "wdog.h" //包含wdog.h头文件
#include "uart.h"
//=================内部函数声明===========================================
//=========================================================================
//函数名称:wdog_unlock
//功能概要:解锁看门狗
//参数说明:无
//函数返回:无
//=========================================================================
static void wdog_unlock(void);
//=================接口函数实现===========================================
//=========================================================================
//函数名称:wdog_init
//功能概要:初始化看门狗模块
//参数说明:无
//函数返回:无
//=========================================================================
void wdog_init()
{
//给看门狗模块解锁,以便写寄存器
wdog_unlock();
//看门狗超时时间设置为1s,0x03e8=1000
WDOG_TOVALL = 0xE8;
WDOG_TOVALH = 0x03;
//使用1KHz时钟源
//00 总线时钟。01 1 KHz内部低功耗振荡器(LPOCLK)。10 32KHz内部振荡器(ICSIRCLK)。11 外部时钟源
WDOG_CS2 = WDOG_CS2_CLK(1);
//开启看门狗,允许解锁从而更新寄存器,开启停止模式和等待模式
WDOG_CS1 = WDOG_CS1_EN_MASK|WDOG_CS1_UPDATE_MASK
|WDOG_CS1_STOP_MASK|WDOG_CS1_WAIT_MASK;
}
//=========================================================================
//函数名称:wdog_disable
//功能概要:关闭看门狗模块
//参数说明:无
//函数返回:无
//=========================================================================
void wdog_disable(void)
{
//给看门狗模块解锁,以便写寄存器
wdog_unlock();
//关闭看门狗
WDOG_CS1 &= ~WDOG_CS1_EN_MASK;
}
//=========================================================================
//函数名称:wdog_enable
//功能概要:启动看门狗
//参数说明:无
//函数返回:无
//=========================================================================
void wdog_enable(void)
{
//给看门狗模块解锁,以便写寄存器
wdog_unlock();
//开启看门狗
WDOG_CS1 |= WDOG_CS1_EN_MASK;
}
//=========================================================================
//函数名称:wdog_feed
//功能概要:喂狗,清看门狗计数器
//参数说明:无
//函数返回:无
//=========================================================================
void wdog_feed()
{
DISABLE_INTERRUPTS;
//刷新序列
WDOG_CNT = 0x02A6;
WDOG_CNT = 0x80B4;
ENABLE_INTERRUPTS;
}
//=========================================================================
//函数名称:wdog_enable_int
//功能概要:启动看门狗中断
//参数说明:无
//函数返回:无
//=========================================================================
void wdog_enable_int()
{
//给看门狗模块解锁,以便写寄存器
wdog_unlock();
//开看门狗中断
WDOG_CS1 |= WDOG_CS1_INT_MASK;
//启动IRQ中断
NVIC_EnableIRQ(WDOG_IRQn);//28
}
//=========================================================================
//函数名称:wdog_disable_int
//功能概要:关闭看门狗中断,操作WDOG控制和状态寄存器1,WDOG_CS1
//参数说明:无
//函数返回:无
//=========================================================================
void wdog_disable_int()
{
//给看门狗模块解锁,以便写寄存器
wdog_unlock();
//开看门狗中断
WDOG_CS1 &= ~WDOG_CS1_INT_MASK;
史海拾趣
|
IGBT负载短路下的几种后果 (1) 超过热极限:半导体的本征温度极限为250℃,当结温超过本征温度,器件将丧失阻断能力,IGBT负载短路时,由于短路电流时结温升高,一旦超过其热极限时,门级保护也相应失效. (2) 电流擎住效应:正常工作电流下,IGBT由于薄 ...… 查看全部问答> |
|
条码手持终端应用程序开发!!! 本人在条码行业有多年的工作经验,一直从事条码手持终端应用程序的开发 开发过多种设备: CASIO DT900,DT300,DTX10; Cipher 711 ; SYMBOL MC50,MC1000,PPT8800; Intermec 700系列 有需要的请联系本人 QQ:6 ...… 查看全部问答> |
|
急!!!如何在PC机上实现对单片机的控制(用VC++6.0编程) 小弟正在想弄一个在PC机上实现对单片机的控制,但不知道从哪个方面入手? 希望各位达人给予小弟一些指点.发个程序给小弟参考参考(用C语言编写的)… 查看全部问答> |
|
经历了很多推销的宣传,今天买了10片样品,准备把以前ATMEL8的东西都移植过来. 有几个问题,一直没搞明白: 1. STM8S103K3会不会象ATMEL那样,1000元就能把代码都读出来?STM8S103K3的 解密难度有多大? 2. 以前一直用ICC和KEIL开 ...… 查看全部问答> |
|
2812程序烧到片内flash中运行,能否用CCS和仿真器观察内部变量 2812程序烧到片内flash中运行,能否用CCS和仿真器观察内部变量, 调试电机程序,使用仿真器容易跑飞,希望能烧到flash中运行,同时也希望能像在ccs里仿真一样观察几个关键变量,听有的工程师说是能实现的,希望有能得到指点?… 查看全部问答> |
|
这是个试验程序,就是把整页写入同一个数据,,另外ID什么都可以读出来,,个人感觉数据是可以读出来的,,但读出来的全是FF,2112个FF后是64个0x15,我把读命令改错的话,读出来的是那个输入的数据,说明内部没把数据读出来,这是不是说明FF读出来 ...… 查看全部问答> |
|
在整个APF中基准电流的产生方法是核心环节,只有产生正确的基准电流信号才能很好的补偿谐波和无功电流。当只是补偿谐波电流时只需获取负载电流中的谐波分量即可,当补偿谐波及无功时除了要获取谐波电流信号外还需获取基波电流中的无功分量。基准电 ...… 查看全部问答> |




