新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430學習筆記——頭文件解析之看門狗

        MSP430學習筆記——頭文件解析之看門狗

        作者: 時間:2016-11-10 來源:網絡 收藏
        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的定時時間
        WDTSSELWDTISx定時時間/ms
        IS1IS0
        0110.064Tsmclk*64
        0100.51Tsmclk*512
        1111.95Taclk*64
        0018.19Tsmclk*8192
        11015.63Taclk*512
        00032.77Tsmclk*64
        101250Taclk*8192
        1001000Taclk*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)


        關鍵詞: MSP430頭文件看門

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 郯城县| 吉林市| 大化| 隆安县| 锦屏县| 新泰市| 吴忠市| 建昌县| 钦州市| 黄大仙区| 灯塔市| 舟山市| 阳谷县| 临沭县| 大洼县| 河西区| 焉耆| 商丘市| 鄄城县| 三门县| 榆树市| 高阳县| 剑川县| 徐闻县| 星子县| 泊头市| 黑水县| 双鸭山市| 娱乐| 调兵山市| 腾冲县| 新建县| 白河县| 保德县| 舞钢市| 衡阳市| 天津市| 克山县| 九江市| 广丰县| 万山特区|