MSP430學習筆記——頭文件解析之看門狗
#define __MSP430_HAS_WDT__
#define WDTCTL_ (0x0120u)
DEFW( WDTCTL , WDTCTL_)
這一段中讓人費解的就是DEFW,百度可以知道它代表新版本對寄存器的定義。
#define DEFCW(name, address) __no_init union
{
} @ address;
這種定義也變得相對好理解。以上的這種union的定義,將一個16位的地址存儲空間分成2個8bits或者1個16位??梢詫崿F字訪問,也可以實現字節(jié)訪問。
WDTCL_代表的就是0X0120u這個地址,那么DEFW(WDTCTL,WDTCTL_)通過宏擴展就可以理解為
__no_init union
{
} @ 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引腳為邊沿觸發(fā)的非屏蔽中斷輸入
#define WDTNMIES (0x0040u) 0為上升沿觸發(fā)NMI中斷,1為下降沿
#define WDTHOLD (0x0080u) 0:WDT功能激活,1為時鐘禁止輸入并停止計數降低功耗
#define WDTPW (0x5A00u) 口令
WDT的定時時間 | |||
WDTSSEL | WDTISx | 定時時間/ms | |
IS1 | IS0 | ||
0 | 1 | 1 | 0.064 |
0 | 1 | 0 | 0.51 |
1 | 1 | 1 | 1.95 |
0 | 0 | 1 | 8.19 |
1 | 1 | 0 | 15.63 |
0 | 0 | 0 | 32.77 |
1 | 0 | 1 | 250 |
1 | 0 | 0 | 1000 |
口令 :#define WDTPW (0x5A00u)
時鐘源選擇:WDTTMSEL 0為SMCLK 1為ACLK
WDTCNTCL 該位為1,清除WDTCNT
WDTIS1+WDTIS0
#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)
評論