历史上的今天
返回首页

历史上的今天

今天是: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;

推荐阅读

史海拾趣

Active-Semi公司的发展小趣事

Active-Semi是一家专注于功率管理芯片和解决方案的领先企业。以下是该公司发展的五个相关故事:

  1. 公司成立与初期发展: Active-Semi成立于2004年,总部位于美国德克萨斯州达拉斯。公司的创始人致力于研发创新的功率管理解决方案,以满足日益增长的电子设备对于高效能耗、高性能和低成本的需求。初期,公司聚焦于LED照明、消费电子和工业应用等领域。

  2. 技术创新与产品推出: Active-Semi在功率管理领域取得了多项技术创新,不断推出具有高性能和高集成度的芯片产品。公司的产品涵盖了DC-DC转换器、AC-DC转换器、LED驱动器、电池管理器等多个子领域,并通过不断创新提高了产品性能和稳定性。

  3. 市场拓展与国际化发展: 随着产品线的扩展和市场认可度的提高,Active-Semi逐步拓展了国内外市场。公司在美国、中国、日本等地设立了销售和技术支持中心,与全球各地的客户建立了合作关系。通过与国际渠道商合作,Active-Semi的产品远销至全球各地,赢得了广泛的市场认可。

  4. 并购与战略合作: 为了加强自身的技术实力和市场地位,Active-Semi进行了一系列的并购和战略合作。其中最重要的是2018年,Active-Semi被斯图尔特半导体(Stewart Semiconductor)收购。这一并购进一步扩大了Active-Semi在功率管理领域的影响力和市场份额。

  5. 持续创新与未来展望: Active-Semi致力于持续创新,不断推出符合市场需求的新产品和解决方案。公司将继续加强技术研发投入,提升产品性能和稳定性,以满足客户在不断变化的市场需求。未来,Active-Semi将继续致力于成为功率管理领域的领先企业,并在全球范围内提供优质的产品和服务。

Calmos Systems Inc公司的发展小趣事

Calmos Systems Inc公司注重企业文化建设和团队建设。公司倡导创新、协作、务实的企业文化,鼓励员工敢于尝试、勇于创新。同时,公司还注重员工的培训和发展,为员工提供广阔的职业发展空间和晋升机会。在团队建设方面,公司定期组织各类团建活动,增强员工之间的凝聚力和向心力。这些举措使得公司拥有一支高效、团结、富有创造力的团队,为公司的发展提供了有力保障。

以上便是关于Calmos Systems Inc公司在电子行业里发展起来的5个相关故事。这些故事展示了公司在创立初期、技术创新、市场拓展、国际化战略以及企业文化与团队建设等方面的努力和成果,为公司的发展奠定了坚实的基础。

复旦微电子(FM)公司的发展小趣事

Calmos Systems Inc公司创立之初,面临着资金短缺、市场竞争激烈的挑战。公司创始人凭借对电子技术的深厚理解和对市场需求的敏锐洞察,带领团队研发出了一款具有创新性的电子产品。然而,由于品牌知名度低,市场推广困难,产品销量一度不佳。为了打开市场,创始人亲自拜访潜在客户,了解他们的需求,不断优化产品功能。经过不懈的努力,产品逐渐赢得了客户的认可,为公司的发展奠定了基础。

全鹏(CHAMPION)公司的发展小趣事

为了提升国际市场竞争力,全鹏公司一直致力于提高产品质量和管理水平。在2014年,全鹏电子科技有限公司成立,并成功通过了ISO9001国际质量管理体系、ISO14001环境管理体系认证和汽车与医疗器材体系IATF/16949认证。这些认证不仅证明了全鹏公司在质量管理方面的实力,也为其在国际市场上赢得了更多的信任和机会。

CINTERION公司的发展小趣事

CINTERION的前身可追溯到西门子于1995年创建的无线模块业务。在成立之初,该公司便专注于工业用机器对机器(M2M)无线通信模块的研发与生产。随着技术的不断进步,CINTERION逐渐在行业内崭露头角,其产品在智能电网、汽车、公用事业等领域得到了广泛应用。1996年,CINTERION成功推出了全球第一款蜂窝模组,这一创新为公司在无线通信模组市场打下了坚实的基础。

Elcoma公司的发展小趣事

面对日益变化的市场环境和客户需求,Elcoma公司始终保持创新的精神。他们不断投入研发资金,引进高端人才,加强技术创新和产品研发。同时,Elcoma还积极探索新的商业模式和市场机会,以适应市场变化并抓住发展机遇。这种创新驱动的发展策略使Elcoma在电子行业中保持领先地位,并为企业的未来发展奠定了坚实的基础。

问答坊 | AI 解惑

谁有 ACD资料

谁有ACD 资料啊…

查看全部问答>

IGBT短路失效机理

IGBT负载短路下的几种后果 (1) 超过热极限:半导体的本征温度极限为250℃,当结温超过本征温度,器件将丧失阻断能力,IGBT负载短路时,由于短路电流时结温升高,一旦超过其热极限时,门级保护也相应失效. (2) 电流擎住效应:正常工作电流下,IGBT由于薄 ...…

查看全部问答>

无线信号 高手进

我在这招了半天也莫有找到我要的答案,发个帖看看有没有高手给我支支招。 关于无线信号如何检测的问题,方法越具体越多越好。。。用示波器的话说明具体的用法。我琢磨很久了,奈何能力有限。。。…

查看全部问答>

proteus 的键盘在哪

单个的键(不是开关) 和 矩阵键盘…

查看全部问答>

条码手持终端应用程序开发!!!

条码手持终端应用程序开发!!! 本人在条码行业有多年的工作经验,一直从事条码手持终端应用程序的开发 开发过多种设备: CASIO DT900,DT300,DTX10; Cipher 711 ; SYMBOL MC50,MC1000,PPT8800; Intermec 700系列 有需要的请联系本人 QQ:6 ...…

查看全部问答>

急!!!如何在PC机上实现对单片机的控制(用VC++6.0编程)

小弟正在想弄一个在PC机上实现对单片机的控制,但不知道从哪个方面入手? 希望各位达人给予小弟一些指点.发个程序给小弟参考参考(用C语言编写的)…

查看全部问答>

正式入手STM8S103K3

经历了很多推销的宣传,今天买了10片样品,准备把以前ATMEL8的东西都移植过来. 有几个问题,一直没搞明白: 1. STM8S103K3会不会象ATMEL那样,1000元就能把代码都读出来?STM8S103K3的     解密难度有多大? 2. 以前一直用ICC和KEIL开 ...…

查看全部问答>

2812程序烧到片内flash中运行,能否用CCS和仿真器观察内部变量

2812程序烧到片内flash中运行,能否用CCS和仿真器观察内部变量, 调试电机程序,使用仿真器容易跑飞,希望能烧到flash中运行,同时也希望能像在ccs里仿真一样观察几个关键变量,听有的工程师说是能实现的,希望有能得到指点?…

查看全部问答>

用io口控制k9k8G08U0A写不进去数(急)

这是个试验程序,就是把整页写入同一个数据,,另外ID什么都可以读出来,,个人感觉数据是可以读出来的,,但读出来的全是FF,2112个FF后是64个0x15,我把读命令改错的话,读出来的是那个输入的数据,说明内部没把数据读出来,这是不是说明FF读出来 ...…

查看全部问答>

有源电力滤波器的控制技术的实现

在整个APF中基准电流的产生方法是核心环节,只有产生正确的基准电流信号才能很好的补偿谐波和无功电流。当只是补偿谐波电流时只需获取负载电流中的谐波分量即可,当补偿谐波及无功时除了要获取谐波电流信号外还需获取基波电流中的无功分量。基准电 ...…

查看全部问答>