原创 Cortex-M0修行心得-3

2011-2-24 13:41 4870 7 8 分类: MCU/ 嵌入式

 


M0的看门狗和普通51单片机的看门狗类似。比较简单。在配置完看门狗寄存器后看门狗模块就会随程序一直执行不能关闭。唯一关闭的方法就是系统发生复位。狗狗工作标记位就会由硬件自动清零而不工作了。在对看门狗寄存器写数据前需要先使能看门狗模块 :SYSAHBCLKCTRL|=1<<15;//使能看门狗模块。这一点非常重要否则造成狗不工作


来认识一下狗狗的寄存器,WDTCLKUEN-看门狗时钟源使能寄存器。因为狗狗的时钟是可选的。在对狗进行时钟源选择前是要关闭狗狗的时钟连接!该寄存器的有效位只有一位。WDTCLKUEN=0X01;//第0位为1连接看门狗时钟源


WDTCLKSEL-看门狗时钟源选择寄存器。用于选择看门狗的时钟源。狗的时钟源可以由LPC1114内部时钟源IRC提供,还可以由系统主时钟和内部看门狗时钟提供。默认是选择IRC。这里我们选择系统主时钟。WDTCLKSEL=0X01;//选择系统主时钟


WDTCLKDIV-看门狗时钟分频寄存器。看门狗的时钟源设置好了以后就可以对狗进行分频设置了。一般选择1分频。WDTCLKDIV=0X01;//选择1分频


设置完看门狗的时钟后,就可以对狗狗的计数时间进行设置了。LPC1114的看门狗计数器采用的减法计数。不像一般的计数器是往上下而是往下减。减到0还没喂狗。系统就复位了。


WDTTC-看门狗计数寄存器。设置的是看门狗的计数时间。这个是一个32位的寄存器。有点特殊。最小值要求为0XFF,给它赋小于0XFF的值时系统自动会为其设置成0XFF。WDTTC=0XFFFF;//设置看门狗的计数时间(既溢出时间)


WDTMOD-看门狗模式寄存器。设置完这些看门狗并不会工作。因为还没有对看门狗模块设置成使能。需要启动看门狗模块.该寄存器第0位是看门狗的使能位。要设置其为1.第2位是看门狗复位使能。M0的看门狗在未正常的喂狗的情况下是可以执行2个步骤的。一个是产生系统复位,一个是产生中断。这里我们选择产生复位。WDTMOD=0X03;//设置开启看门狗使能和狗溢出后系统复位。完成上面的设置现在看门狗还是没有启动的。那是因为在启动前必须要先喂一次狗(哈哈。。类似于先吃了才能工作)。


WDTFEED-看门狗馈送序列寄存器。该寄存器用来为喂狗。要分2次写入0XAA,0X55。写的时候要注意!两次写入要接连着完成。如果只写了一句会引起系统复位。所以说喂狗时最好先关掉中断以免引起系统不正常复位!


WDTFEED=0XAA;WDTFEED=0X55;//以上完成后看门狗就彻彻底底的开始工作了


以下是程序源代码及工程文件(基于TKStduio环境)attachment download


#include "..\config.h"



/*********************************************************************************************************
** Function name:       myDelay
** Descriptions:        软件延时
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void myDelay (INT32U ulTime)
{
    INT32U i;
   
    i = 0;
    while (ulTime--) {
      for (i = 0; i < 5000; i++);
    }
}
/*
函数名:WDT_Init
功能:看门狗的初始化函数
参数:time-喂狗时间
返回值:无
*/
void WDT_Init(INT32U time)
{
 if(time<0xff)
  time=0xff;
 WDTCLKUEN=0X00;//关闭看门狗的时钟源
 WDTCLKSEL=0X01;//选择主时钟作为看门狗的时钟
 WDTCLKUEN=0X01;//开启看门狗的时钟源,现在看门狗还不是工作的。需要喂一次狗
 WDTCLKDIV=0X01;//进行1分频
 SYSAHBCLKCTRL|=1<<15;//使能看门狗模块。这一点非常重要否则造成狗不工作
 WDTTC=time;//设置看门狗的计数时间
 WDTMOD=0X03;//设置看门狗使能
 WDTFEED=0XAA;//启动看门狗喂狗序列。如果在看门狗正常工作后喂狗序列不完整会造成看门狗复位
 WDTFEED=0X55;//完成看门狗喂狗操作
}
/*
函数名:WDT_FEED
功能:看门狗喂狗函数
参数:无
返回值:无
*/
void WDT_FEED(void)
{
 zyIrqDisable();//喂狗的时候停止中断
 WDTFEED=0XAA;
 WDTFEED=0X55;//完成喂狗
 zyIrqEnable();//开启系统的中断
}
/*********************************************************************************************************
** Function name:       main
** Descriptions:        当硬件基于EasyCortexM3-1300开发板时,进行LED测试需要短接P2.8与LED1、P2.9与LED2、
**                      P2.10与LED3、P2.11与LED4。
**                      用户也可以根据自己的底板的设计自行连接
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
int main (void)
{
  


   targetInit();                                                        /*  初始化目标板,切勿删除      */
   pinInit();                                                           /*  引脚初始化                  */
   myDelay(1000);
   SYSAHBCLKCTRL |= (1ul << 6);                                         /*  使能GPIO模块时钟            */ 
 GPIO0DIR=0X02;//设置P0.02为IO输出
   WDT_Init(0xffff);
 GPIO0DATA=0XFD;//led持续闪烁表明系统在不停的复位
 myDelay(1000);//加延时使LED闪烁跟明显
   while (1)
   { 
     myDelay(1000);//不喂狗LED会闪烁
 
   }
}


/*********************************************************************************************************
  End Of File
*********************************************************************************************************/

文章评论1条评论)

登录后参与讨论

用户444868 2013-7-18 16:49

嗯 初学者值得一看
相关推荐阅读
用户284699 2011-03-31 18:32
新塘Cortex-M0武汉站培训见闻感受
今天受供应商邀请去参加了新塘在理工大举办的M0培训。以下分享一下今天的见闻感受。为了不迟到,今天特地起个早去参加培训,原本8:30到9:00的报道时间,当我8:30到的时候已经发现来了很多学生。竟然已...
用户284699 2011-03-16 12:57
致敬315-电子打假那些事
昨天回家看了央视的315晚会。感觉是甚为给力啊!今天抱着务必敬仰的心情揭露一些身边的电子忽悠事件。还望各位网友也能分享自己经历的那些忽悠事。 事件1:记得那时我还在读初中,当时我天天中午回家看CCTV...
用户284699 2011-03-16 10:51
初入维修部-拆解UPS及大吉手台充电器
最近工作好忙,很长时间没写博客。加上公司维修的老师傅退休了。所以我也被临时安排到维修部。俗话说:“一个好的开发人员首先一定是好的维修人员”。带着无比崇敬的心情我来到了维修部。先上图介绍哈工作环境   ...
用户284699 2011-02-22 09:03
Cortex-M0修行心得-2
M0的中断系统-M0的外部中断是所有的IO口都可以实现的,这一点比较特殊。今天试了试LPC1114的外部中断功能,本以为很简单的问题还遇到了麻烦,问题如下,根据ZLG提供的工程例子将程序烧写可以正常运...
用户284699 2011-02-18 17:53
Cortex-M0修行心得-1
大半年前去ZLG公司办事。偶然间得知ZLG的Cortex-M0开发板免费赠送,于是也申请了个。后来因为忙一直没时间研究,最近手头事不多加上EDN开展M0助学活动。因为偶决定痛下决心开始研究M0。在此将...
我要评论
1
7
关闭 站长推荐上一条 /2 下一条