历史上的今天
返回首页

历史上的今天

今天是:2024年10月19日(星期六)

正在发生

2019年10月19日 | MSP430学习笔记-看门狗

2019-10-19 来源:eefocus

WDTCTL 看门狗控制寄存器

image.png?imageView2/2/w/550

WDTCTL 由两部分组成: 
高 8 位是对 WDT 操作的控制命令。要写入操作 WDT 的控制命令,出于安全原因必须先正确写入高字节 
看门狗口令。口令位 5AH,如果口令写错将导致系统复位。 
读 WDTCTL 时,不需要口令,可直接读取地址 120H 中的内容,读出数据低字节位 WDTCTL 的值,高字 
节始终位 69H。WDTCTL 除了看门狗定时器的控制位之外,还有两个用于设置 NMI 引脚功能。 
WDTISx:选择看门狗定时器的计时输出 
其中 T 是 WDTCNT 的输入时钟源周期。 
0 T×2的15次方 
1 T×2的13次方 
2 T×2的9次方 
3 T×2的6次方 
WDTSSEL:选择 WDTCNT 的时钟源 
0 SMCLK 
1 ACLK 
由 WDTISx 及 WDTSSEL 位便可确定 WDT 定时时间,因此通过软件对计数器设置不同的初始值就可实现 
不同时间的定时。与其他定时器不同之处在于,WDT 最多只能定时 8 种和时钟源相关的时间。 
下表列出了 WDT 可选的定时时间(晶振为 32.768KHz,SMCLK=1MHz)。

image.png?imageView2/2/w/550

WDTCNTCL:看门狗计数器清零位 
0: 无操作 
1: 将 WDTCTL 的值清零 
当该位为 1 时,清除 WDTCNT。 
WDTTMSEL:工作模式选择 
0 看门狗模式; 
1 定时器模式。 
WDTNMI:选择 RST/NMI 引脚功能(在 PUC 后被复位) 
0 RST/NMI 引脚为复位端; 
1 RST/NMI 引脚为边沿触发的非屏蔽中断输入。 
WDTNMIES:选择中断的边沿触发方式 


WDTHOLD:停止看门狗计数器 
0 WDT 功能激活 
1 时钟禁止输入,计数停止

WDTCNT 计数单元


image.png?imageView2/2/w/550

WDTCNT 时 16 位增计数器,由于 MSP430 所选定的时钟电路产生的固定周期脉冲信号对计数器进行加 
法计数。如果计数器事先被预置的初始状态不同,那么从开始计数到计数溢出为止的时间就不同。 
WDTCNT 不能直接通过软件直接通过软件存取,必须通过看门狗定时器的控制寄存器 WDTCTL 来控制。

IE1 中断允许寄存器

image.png?imageView2/2/w/550

WDTIE:看门狗定时器模式中断允许控制位 
0 看门狗定时器中断禁止 
1 看门狗定时器中断允许 
NMIIE:非屏蔽中断允许控制位 
0 禁止非屏蔽中断 
1 允许非屏蔽中断

IFG1 中断标志寄存器

image.png?imageView2/2/w/550

WDTIFG:看门狗定时器模式中断标志 
0 无看门狗定时器中断标志 
1 有看门狗定时器中断标志 
NMIIFG:非屏蔽中断标志 
0 无非屏蔽中断标志 
1 有非屏蔽中断标志

看门狗定时器操作

用户可以通过 WDTCTL 寄存器中的 WDTTMSEL 和 WDTHOLD 控制位设置 WDT 工作在看门狗模式、定 
时器模式和低功耗模式。

看门狗模式

由于在上电复位或系统复位时,WDTCNT 和 WDTCL 两寄存器内容被全部清除(晶振为 32768Hz, 
SMCLK=1MHz): 
复位后,工作在看门狗模式,以 ACLK 为时钟,WDT 定时时间为 32ms。 
上述情况将导致 WDT 的运行自动进入看门狗模式。 
所以,用户软件一般都需要进行如下操作:

  • 进行 WDT 的初始化:设置合适的时间(通过 SSEL、IS0、IS1 位来选定)。

  • 周期性的对 WDTCNT 清零:防止 WDT 溢出,保证 WDT 的正确使用。

  • 在看门狗模式下,如果计数器超过了定时时间,就会产生复位和激活系统上电清除信号,系统从上电 复位的地址重启动。

  • 如果系统不用看门狗功能,应该在程序开始处禁止看门狗功能。

定时器模式 
WDTCTL 的 WDTTMSEL 位置位选择定时器模式。这一模式产生选定时间的周期性中断。定时时间 
可以通过 WDTCTL 的 WDTCNCTL 位置位来开始。

  • 改变定时时间而不同时清楚 WDTCNT 将导致不可预料的系统立即复位或中断。定时时间可以通过 WDTCTL 的 CNCTL 位置位来开始。

  • 如果先后分别进行清除和定时时间选择,则可能立即引起不可预料的系统复位或中断。

  • 另外,在终场工作时。改变时钟源可能导致 WDTCNT 额外的计数时钟。

低功耗模式 
当系统不需要 WDT 做看门狗和定时器时,可关闭 WDT 以减小功耗。 
控制位 WDTHOLD=1 时关闭 WDT,这时看门狗停止工作。

看门狗定时器头文件定义

在 msp430x14x.h 头文件中定义如下:

/************************************************************ 

* WATCHDOG TIMER 

************************************************************/ 

#define WDTCTL_ (0x0120) /* Watchdog Timer Control */

DEFW( WDTCTL , WDTCTL_) 

/* The bit names have been prefixed with "WDT" */ 

#define WDTIS0 (0x0001) 

#define WDTIS1 (0x0002) 

#define WDTSSEL (0x0004) 

#define WDTCNTCL (0x0008) 

#define WDTTMSEL (0x0010) 

#define WDTNMI (0x0020) 

#define WDTNMIES (0x0040) 

#define WDTHOLD (0x0080) 

#define WDTPW (0x5A00) 

/* WDT-interval times [1ms] coded with Bits 0-2 */ 

/* WDT is clocked by fMCLK (assumed 1MHz) */ 

#define WDT_MDLY_32 (WDTPW+WDTTMSEL+WDTCNTCL) /* 32ms interval (default) */ 

#define WDT_MDLY_8 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0) /* 8ms " */

#define WDT_MDLY_0_5 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1) /* 0.5ms " */

#define WDT_MDLY_0_064 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0) /* 0.064ms " */

/* WDT is clocked by fACLK (assumed 32KHz) */ 

#define WDT_ADLY_1000 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL) /* 1000ms " */

#define WDT_ADLY_250 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0) /* 250ms " */

#define WDT_ADLY_16 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1) /* 16ms " */

#define WDT_ADLY_1_9 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0)/* 1.9ms " */

/* Watchdog mode -> reset after expired time */ 

/* WDT is clocked by fMCLK (assumed 1MHz) */ 

#define WDT_MRST_32 (WDTPW+WDTCNTCL) /* 32ms interval (default) */

#define WDT_MRST_8 (WDTPW+WDTCNTCL+WDTIS0) /* 8ms " */

#define WDT_MRST_0_5 (WDTPW+WDTCNTCL+WDTIS1) /* 0.5ms " */

#define WDT_MRST_0_064 (WDTPW+WDTCNTCL+WDTIS1+WDTIS0) /* 0.064ms " */

/* WDT is clocked by fACLK (assumed 32KHz) */ 

#define WDT_ARST_1000 (WDTPW+WDTCNTCL+WDTSSEL) /* 1000ms " */

#define WDT_ARST_250 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0) /* 250ms " */

#define WDT_ARST_16 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1) /* 16ms " */

#define WDT_ARST_1_9 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0) /* 1.9ms " */

所以我们使用 WDT 的时候可以直接写成下面的形式: 
做定时器用: 
WDTCTL = WDT_ADLY_1000; // 以 ACLK 延迟 1000ms 
WDTCTL = WDT_MDLY_32; // 以 SMCLK 延迟 32ms 
// 记得要开 IE1 中的 WDTIE 和_EINT(); 
做看门狗用: 
WDTCTL = WDT_ARST_1000; // 以 ACLK 设定 1000ms 的看门狗 
WDTCTL = WDT_MRST_32; // 以 SMCLK 设定 32ms 的看门狗 
// 由于在看门狗的定义里面包含 WDTCNCTL 
// 所以需要喂狗的时候只需要再写一边 WDTCTL = WDT_MRST_32; 就行了

推荐阅读

史海拾趣

Degson Electronics Co Ltd公司的发展小趣事

在电子连接器领域取得成功后,Degson开始寻求多元化发展,并逐步拓展到其他相关行业。公司利用自身在电子连接器领域的技术优势和经验积累,成功开发出了一系列应用于工业自动化、仪器仪表、电梯、电力电气等领域的电子产品。这些新产品不仅丰富了Degson的产品线,还进一步扩大了公司的市场份额和影响力。通过多元化发展,Degson在电子行业中的地位得到了进一步巩固和提升。

GETEDZ ( HVGT)公司的发展小趣事
要仔细分析电器设备之间的动作关系,确保联锁逻辑的正确性。
Accuride公司的发展小趣事

在经营过程中,Accuride公司也进行了一系列子公司出售和业务调整。例如,它曾宣布出售其子公司Fabco汽车公司。这一举措有助于Accuride公司更加专注于其核心业务,优化资源配置,提升整体运营效率。同时,通过出售子公司,Accuride也获得了一定的资金回流,为公司的未来发展提供了资金支持。

Astec [Astec America, Inc]公司的发展小趣事

在发展过程中,Astec意识到单打独斗难以应对日益激烈的市场竞争。因此,公司开始积极寻求与其他企业的战略合作,共同开拓市场。通过与上下游企业的紧密合作,Astec成功整合了产业链资源,实现了从原材料采购到产品生产的全面优化。这不仅提高了公司的生产效率,还降低了成本,进一步增强了公司的市场竞争力。

Electromagnetic Industries Llp公司的发展小趣事

在技术创新的同时,EMI公司也注重市场拓展。公司根据市场需求和产品特点,制定了有针对性的营销策略。一方面,公司积极参加国内外各种电子展会和论坛,展示产品和技术实力;另一方面,公司加强与客户的沟通和合作,深入了解客户需求,提供个性化的解决方案。通过这些努力,EMI公司的市场份额不断扩大,品牌影响力也逐渐提升。

Holmes Co Inc公司的发展小趣事

为了进一步提升竞争力,Holmes Electronics采取了一系列并购重组措施。他们首先收购了一家在物联网技术方面具有深厚积累的小型科技公司,通过整合双方资源,迅速在智能家居和智慧城市领域取得突破。随后,公司又成功并购了一家专业的半导体封装测试企业,进一步完善了产业链布局。这些并购重组不仅增强了Holmes Electronics的技术实力和市场地位,还为公司带来了新的增长动力。

问答坊 | AI 解惑

S3C2440 65x45mm核心板电路图

本人画的,有需要PCB的可以找我! [ 本帖最后由 青叶漂零 于 2009-3-21 22:42 编辑 ]…

查看全部问答>

关于阻抗匹配的理解(转发)

阻抗匹配是指信号源或者传输线跟负载之间的一种合适的搭配方式。阻抗匹配分为低频和高频两种情况讨论。        我们先从直流电压源驱动一个负载入手。实际的电压源总是有内阻的,我们可以把一个实际电压源,等效成一个理想的 ...…

查看全部问答>

IO pad里面的high-volt tolerant 是什么意思?

是新手,刚刚接触PAD,我看有的IO pad介绍里面有“high-volt tolerant”这个内容,“high-volt tolerant” 是什么意思?      是说这个IO pad可以在PAD端的电压很高的情况下也能正常工作还是说PAD端的电压的变化范围可以很大 ...…

查看全部问答>

电子方面的困惑

想问下,举个例子吧,像那个遥控器,modem,还有收音机这些个电子产品,我该如何去学习啊,我现在对这个比较感兴趣, ,看了好些个论坛什么的,都说学电路分析,还有模拟电路,数字电路,单片机等等。我也看过,但是总是感觉一点都没有学会。 想 ...…

查看全部问答>

新手问一个对话框的问题

刚开始学windows mobile编程,最近在做编程的时候碰到一个问题,我用mfc smart device建了一个对话框工程,然后在对话框上加了几个按钮,没有其他操作,但是模拟的时候手机屏幕上却一片空白,没有显示按钮,这是为什么呢?之前做了一个hello的win32 ...…

查看全部问答>

关于DXP中ERC检查的一些问题,谢谢大家的帮忙了!!急急急~~

我在画好原理图后进行了DXP的ERC检查,检查完后,出现了以下几个问题,帮忙解决一下吧~~ 1. 例如NetU1_15 contains IO pin and output pin objects(pin U1_15) 2. 例如GND contains IO pin and Power pin objects(pin U4-4、16、20、21、22等) 3 ...…

查看全部问答>

nor flash擦写

我在对Nor flash进行擦时 最后擦除完成或者对字编程操作完成后,进行校验的函数如下: bool SST39VF320X::Check_Toggle_Ready (U32 Dst, U32 MaxCycles) {     U16 CurrData, PreData;     U32  TimeOut = 0; ...…

查看全部问答>

keil 编译是提示c129错误的求助

我用keil 在编译一个c语言工程的时候,总是提示error c129: missing  \";\" before \'typedef\'; 但是我的源程序根本就没有语法方面的错误,后来我在网上搜了一下,说是因为keil 对中文的支持问题,程序中可能出现全角的;或者空格等等 ...…

查看全部问答>

OLED显示问题:每行只能显示一个汉字

最近买了块OLED的屏幕,结果调试的时候总是每行只能写一个汉字,写两个或者更多的话就花屏。 调试了两天了,总是不行,也找不到原因。 程序是参考 买屏幕时店家附送的例程。单片机是C8051F310。OLED的驱动芯片是SH1101A ,C86端已经接到V ...…

查看全部问答>

有用过TSC2046或STM8SPI的兄弟帮忙解答

大家好,我现在用STM8与TSC2046 进行SPI通信,读触摸屏的坐标。 现在我要端口模拟SPI已与TSC2046进行正常通信,但现在想用自有的SPI模块与其通信,但是老是不行。请教一下各位大虾。最好能提供代码供学习,谢谢!!! 我的SPI初始化:MCU为 ...…

查看全部问答>