天天看點

msp430内置函數總結 __bic_SR_register(),__delay_cycles(x)

轉載http://blog.lehu.shu.edu.cn/879836630/A449074.html,記錄下來友善自己看

(1)  MSP430F5529支援最高工作頻率為25MHZ,也就是說你通過

             鎖相環倍頻來提高系統運作速度是有一個限制的,

             最高隻能到25MHZ(再高沒意思了)。

                 (2)幾個重要的内聯函數

                               (内聯函數定義在intrinsics.h中,但是這幾個函數使用的時候

                 不需要事先聲明該檔案頭)

                        ①__bic_SR_register();

                                      将CPU中SR寄存器中的某些位清零。即将括号内的位清零。

                                      例:__bic_SR_register(GIE);//将GIE位清零,即關閉總中斷

                        ②__bis_SR_register();

                                      将CPU中SR寄存器中的某些位置1。即将括号内的位置1。

                        ③ __interrupt

放在函數前面,标志中斷函數。下面這段程式是看門狗

WDT的中斷服務函數。WDT_VECTOR為看門狗的中斷向量。舉例:

 #pragma vector=WDT_VECTOR

__interrupt void WatchDog(void)

{… }

              ④ __monitor

放在函數前面,功能是聲明當這一函數執行的時候自動關閉中斷。應該盡量縮短這樣的函數,否則,中斷事件無法得到及時的響應。

              ⑤ __bic_SR_register_on_exit();

 功能:用于一個中斷函數或者不可中斷函數(标志為__monitor)傳回時,将CPU内SR寄存器中的某些位清0.

⑥ __bis_SR_register_on_exit();

功能:用于一個中斷函數或者不可中斷函數(标志為__monitor)傳回時,将CPU内SR寄存器中的某些位置1.

⑦ __no_init

放在全局變量前面,功能是使程式啟動時不為變量賦初值

⑧ __disable_interrupt

                     關閉總中斷

                     另外一個相同作用的表達為:    _DINT()

⑨ __enable_interrupt

                     開啟總中斷

                     另外一個相同作用的表達為:    _EINT()

⑩__even_in_range(  ,  );

常被用在多源中斷的查詢中,如switch( __even_in_range(TAIV,10)

意思是:隻有在TAIV的值是在0--10内的偶數時才會執行

switch函數内的語句。其作用是提高switch語句的效率

A.        _NOP()

空操作,等價于__no_operation指令

B. __get_SP_register(void)

功能:傳回堆棧指針寄存器SP的值。

C.__get_SR_register_on_exit(void)

功能:用于一個中斷函數或者不可中斷函數

(标志為__monitor)傳回時,傳回狀态寄存器SR的值。

               D. __bcd_add_short(unsigned short,unsigned short);

功能:兩個16為BCD格式的數字相加,傳回和。

               E.__bcd_add_long(unsigned long,unsigned long);

 功能:兩個32位BCD格式的數字相加,傳回和。

F. __delay_cycles(x);

              系統自帶的精确延時。x必須是常量或則是常量表達式,如果是變量則編譯報錯!延時的時間為x乘以MCLK的時鐘周期

(3)關于MSP430大量寄存器如何處理的問題:

                     MSP430寄存器太多了,把每一個都記住實在太難。是以,我的建議是,學習的時候,把重要的常用的寄存器記住。

          至于其它衆多寄存器,大家隻需要有一個印象,知道這些寄存器可以控制那些設定。到具體用的時候,再查找技術手冊;

(4)頭檔案msp430f5529.h

裡面不僅定義了對各個寄存器的聲明,還定義了很多很友善的東東。

比如你要進入低功耗模式1:LPM1;

比如你要把定時器A0的時鐘選為SMCLK:

                     最原始的做法是TA0CTL=0x0200,但現在有更清晰的做法TA0CTL=TASSEL_2;//時鐘源選擇模式2

是以說要不斷發掘不斷積累!

(5)中斷寄存器的名字

                     大家都知道中斷函數是怎麼寫的,模式為:

#pragma vector=中斷向量位址(名)

__interrupt void 自定義中斷函數名(void)

{… }

                     但是想要寫出來,你首先得知道中斷向量叫什麼名字吧

到目前,我們已經遇到了看門狗中斷WDT_VECTOR、引腳P2的外部中斷PORT2_VECTOR、定時器A0(CCR1-CCR4和TAIFG)中斷TIMER0_A1_VECTOR

還有大量的中斷向量,我們目前還不知道名字該怎麼辦。

打開msp430f5529.h,拉到該檔案底部,就展示了定義的各種中斷向量名,還有解釋。

(6)

MSP430的最大特色就是低功耗,這個是展現在各個方面的。在整體層次上,MSP430可以設定整個系統的工作模式以達到适應工作要求且降低功耗的目的。

為了降低功耗,處理器有幾個考慮:

一個是降低工作電壓(F5529為3.3V很低了吧,而且内部核心電壓VCORE更低); 

第二個就是把暫時不用的子產品功能關閉掉(F5529各個子產品都可以獨立運作,如定時器、A/D轉換、看門狗等都可以在CPU休眠的狀态下獨立工作。若需要主CPU工作,任何一個子產品都可以通過中斷喚醒CPU,進而使系統以最低功耗運作。

);

第三個方法就是降低工作時鐘頻率。,

轉載http://blog.lehu.shu.edu.cn/879836630/A449074.html,記錄下來友善自己看

(1)  MSP430F5529支援最高工作頻率為25MHZ,也就是說你通過

             鎖相環倍頻來提高系統運作速度是有一個限制的,

             最高隻能到25MHZ(再高沒意思了)。

                 (2)幾個重要的内聯函數

                               (内聯函數定義在intrinsics.h中,但是這幾個函數使用的時候

                 不需要事先聲明該檔案頭)

                        ①__bic_SR_register();

                                      将CPU中SR寄存器中的某些位清零。即将括号内的位清零。

                                      例:__bic_SR_register(GIE);//将GIE位清零,即關閉總中斷

                        ②__bis_SR_register();

                                      将CPU中SR寄存器中的某些位置1。即将括号内的位置1。

                        ③ __interrupt

放在函數前面,标志中斷函數。下面這段程式是看門狗

WDT的中斷服務函數。WDT_VECTOR為看門狗的中斷向量。舉例:

 #pragma vector=WDT_VECTOR

__interrupt void WatchDog(void)

{… }

              ④ __monitor

放在函數前面,功能是聲明當這一函數執行的時候自動關閉中斷。應該盡量縮短這樣的函數,否則,中斷事件無法得到及時的響應。

              ⑤ __bic_SR_register_on_exit();

 功能:用于一個中斷函數或者不可中斷函數(标志為__monitor)傳回時,将CPU内SR寄存器中的某些位清0.

⑥ __bis_SR_register_on_exit();

功能:用于一個中斷函數或者不可中斷函數(标志為__monitor)傳回時,将CPU内SR寄存器中的某些位置1.

⑦ __no_init

放在全局變量前面,功能是使程式啟動時不為變量賦初值

⑧ __disable_interrupt

                     關閉總中斷

                     另外一個相同作用的表達為:    _DINT()

⑨ __enable_interrupt

                     開啟總中斷

                     另外一個相同作用的表達為:    _EINT()

⑩__even_in_range(  ,  );

常被用在多源中斷的查詢中,如switch( __even_in_range(TAIV,10)

意思是:隻有在TAIV的值是在0--10内的偶數時才會執行

switch函數内的語句。其作用是提高switch語句的效率

A.        _NOP()

空操作,等價于__no_operation指令

B. __get_SP_register(void)

功能:傳回堆棧指針寄存器SP的值。

C.__get_SR_register_on_exit(void)

功能:用于一個中斷函數或者不可中斷函數

(标志為__monitor)傳回時,傳回狀态寄存器SR的值。

               D. __bcd_add_short(unsigned short,unsigned short);

功能:兩個16為BCD格式的數字相加,傳回和。

               E.__bcd_add_long(unsigned long,unsigned long);

 功能:兩個32位BCD格式的數字相加,傳回和。

F. __delay_cycles(x);

              系統自帶的精确延時。x必須是常量或則是常量表達式,如果是變量則編譯報錯!延時的時間為x乘以MCLK的時鐘周期

(3)關于MSP430大量寄存器如何處理的問題:

                     MSP430寄存器太多了,把每一個都記住實在太難。是以,我的建議是,學習的時候,把重要的常用的寄存器記住。

          至于其它衆多寄存器,大家隻需要有一個印象,知道這些寄存器可以控制那些設定。到具體用的時候,再查找技術手冊;

(4)頭檔案msp430f5529.h

裡面不僅定義了對各個寄存器的聲明,還定義了很多很友善的東東。

比如你要進入低功耗模式1:LPM1;

比如你要把定時器A0的時鐘選為SMCLK:

                     最原始的做法是TA0CTL=0x0200,但現在有更清晰的做法TA0CTL=TASSEL_2;//時鐘源選擇模式2

是以說要不斷發掘不斷積累!

(5)中斷寄存器的名字

                     大家都知道中斷函數是怎麼寫的,模式為:

#pragma vector=中斷向量位址(名)

__interrupt void 自定義中斷函數名(void)

{… }

                     但是想要寫出來,你首先得知道中斷向量叫什麼名字吧

到目前,我們已經遇到了看門狗中斷WDT_VECTOR、引腳P2的外部中斷PORT2_VECTOR、定時器A0(CCR1-CCR4和TAIFG)中斷TIMER0_A1_VECTOR

還有大量的中斷向量,我們目前還不知道名字該怎麼辦。

打開msp430f5529.h,拉到該檔案底部,就展示了定義的各種中斷向量名,還有解釋。

(6)

MSP430的最大特色就是低功耗,這個是展現在各個方面的。在整體層次上,MSP430可以設定整個系統的工作模式以達到适應工作要求且降低功耗的目的。

為了降低功耗,處理器有幾個考慮:

一個是降低工作電壓(F5529為3.3V很低了吧,而且内部核心電壓VCORE更低); 

第二個就是把暫時不用的子產品功能關閉掉(F5529各個子產品都可以獨立運作,如定時器、A/D轉換、看門狗等都可以在CPU休眠的狀态下獨立工作。若需要主CPU工作,任何一個子產品都可以通過中斷喚醒CPU,進而使系統以最低功耗運作。

);

第三個方法就是降低工作時鐘頻率。,

繼續閱讀