×
嵌入式 > 技术百科 > 详情

MSP430学习笔记——头文件解析之看门狗

发布时间:2020-06-20 发布时间:
|
MSP430设定的方法方便,但前提是看懂头文件定义,只有这样才能更好的运用。
#define __MSP430_HAS_WDT__           
 
 
#define WDTCTL_             (0x0120u)  
DEFW(   WDTCTL            , WDTCTL_)
这一段中让人费解的就是DEFW,百度可以知道它代表新版本对寄存器的定义。
#define DEFCW(name, address) __no_init union  
{  
 struct  
 {  
    volatile unsigned char name##_L;
    volatile unsigned char name##_H;
 };
 volatile unsigned short   name;
} @ address; 
这种定义也变得相对好理解。以上的这种union的定义,将一个16位的地址存储空间分成2个8bits或者1个16位。可以实现字访问,也可以实现字节访问。
WDTCL_代表的就是0X0120u这个地址,那么DEFW(WDTCTL,WDTCTL_)通过宏扩展就可以理解为
__no_init union  
{  
 struct  
 {
    volatile unsigned char WDTCTL_L;
    volatile unsigned char WDTCTL_H;
 };
 volatile unsigned short   WDTCTL;
} @ 0X0120u; 
这里指出:
① __no_init是IAR扩展语法里面的一个扩展关键字。作用是声明一个non-volatile类型的内存地址(Support non-valotile memory)。
② @是一种语法。那么它的作用很明显就是将变量放置到对应的地址中。使用@,一个变量可以明确的制定一个存储地址。
就是将WDTCTL变量存放在0X0120u地址中,如此一来就可以为每个寄存器进行命名了,也就是说可以实现每个寄存器对应一个或者多个变量。
#define WDTIS0               (0x0001u)      选择时钟源周期
#define WDTIS1               (0x0002u)
#define WDTSSEL              (0x0004u)     时钟源选择(0SM+1A)
#define WDTCNTCL            (0x0008u)    清除WDTCNT
#define WDTTMSEL            (0x0010u)    0看门狗模式,1 定时器模式
#define WDTNMI              (0x0020u)     0:RST/NMI引脚复位端,1:RST/NMI引脚为边沿触发的非屏蔽中断输入
#define WDTNMIES            (0x0040u)  0为上升沿触发NMI中断,1为下降沿
#define WDTHOLD             (0x0080u)  0:WDT功能激活,1为时钟禁止输入并停止计数降低功耗
 
#define WDTPW               (0x5A00u)  口令
 
 
WDT的定时时间
WDTSSEL WDTISx 定时时间/ms
IS1 IS0
0 1 1 0.064   Tsmclk*64
0 1 0 0.51    Tsmclk*512
1 1 1 1.95    Taclk*64
0 0 1 8.19    Tsmclk*8192
1 1 0 15.63   Taclk*512
0 0 0 32.77   Tsmclk*64
1 0 1 250     Taclk*8192
1 0 0 1000    Taclk*32768
口令 :#define WDTPW               (0x5A00u)
时钟源选择:WDTTMSEL  0为SMCLK     1为ACLK 
WDTCNTCL 该位为1,清除WDTCNT
WDTIS1+WDTIS0
             0:计数次数32768   1:8192  2:512  3:64   结合时钟源的选择衍生出下面的定时器延时
                                 +++
#define WDT_MDLY_32         (WDTPW+WDTTMSEL+WDTCNTCL                               )  
MOV   #WDTPW+WDTTMSEL+WDTCNTCL ,&WDTCTL        定时32ms                     
#define WDT_MDLY_8          (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0                  
#define WDT_MDLY_0_5        (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1)                  
#define WDT_MDLY_0_064      (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0)        
 
#define WDT_ADLY_1000       (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL)                
#define WDT_ADLY_250        (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0)          #define WDT_ADLY_16         (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1)          
#define WDT_ADLY_1_9      WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0) 
 
#define WDT_MRST_32         (WDTPW+WDTCNTCL)                                  
#define WDT_MRST_8          (WDTPW+WDTCNTCL+WDTIS0)                          
#define WDT_MRST_0_5        (WDTPW+WDTCNTCL+WDTIS1)                          
#define WDT_MRST_0_064      (WDTPW+WDTCNTCL+WDTIS1+WDTIS0)                    
#define WDT_ARST_1000       (WDTPW+WDTCNTCL+WDTSSEL)                          
#define WDT_ARST_250        (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0)                  
#define WDT_ARST_16         (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1)                  
#define WDT_ARST_1_9        (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0)    



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
激光跟踪仪市场2023年有望达5.216亿美元