国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 17105|回復: 11
打印 上一主題 下一主題

MSP430的定時器太牛了

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2009-4-18 11:09:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
關鍵詞: 定時器
不過中斷系統有點暈菜,沒有優先級的。
沙發
發表于 2009-4-18 19:39:56 | 只看該作者
俺抄來的,哈哈
————————
msp430的定時器

對于學習新的單片機來說,就我個人意見在知道基本功能后應該先掌握定時器的用法,可以能幫助你很快的掌握單片機的用法并盡快能進行單片機的應用,所以對于430我也同樣先掌握定時器的用法。

msp430單片機一共有5種類型的定時器,看門狗定時器(WDT)、基本定時器(Basic Timer1)、8位定時器/計數器(8-bit Timer/Counter)、定時器A(Timer_A)和定時器B(Timer_B)。但是這些模塊不是所有msp430型號都具有的功能。

1、看門狗定時器(WDT)

學過電子的人可能都知道,看門狗的主要功能就是當程序發生故障時能使受控系統重新啟動。msp430中它是一個16位的定時器,有看門狗和定時器兩種模式。

2、基本定時器(Basic Timer1)

基本定時器是msp430x3xx和msp430F4xx系列器件中的模塊,通常向其他外圍提供低頻控制信號。它可以只兩個8位定時器,也可以是一個16位定時器。

3、8位定時器/計數器(8-bit Timer/Counter)

如其名字所示,它是8位的定時器,主要應用在支持串行通信或數據交換,脈沖計數或累加以及定時器使用。

4、16位定時器A和B

定時器A在所有msp430系列單片機中都有,而定時器B在msp430f13x/14x和msp430f43x/44x等器件中出現,基本的結構和定時器A是相同的,由于本人最先熟悉并應用的是定時器A所以在這里就主要談一下自己對定時器A的了解和應用。

定時器A是16位定時器,有4種工作模式,時鐘源可選,一般都會有3個可配置輸入端的比較/捕獲寄存器。并且有8種輸出模式。通過8種輸出模式很容易實現PWM波。

我先給出我的一個應用程序,然后通過程序來書名定時器A的基本用法。程序如下:

/****************************************************
*             定時器初始化
****************************************************/
void init_TimerA ( void )
{
CCTL0 = CCIE;                     // 開啟比較器0中斷
CCR0 = 32768;                    // 1S秒的定時  
CCTL1 = CCIE;                     // 開啟比較器1中斷
CCR1 = 100;                      // 3.66mS顯示延遲
TACTL = TASSEL_1 + MC_1;          // 開啟定時器   
}

/****************************************************
*           定時器0中斷
****************************************************/
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A0(void)
{
time_flag = 1;                   // 時間變動標志
if(time_stop == 1)               // 設置模式標志
    time[0] ++;                    // 秒加1
start_ADC12();                   // 開啟AD
}

/****************************************************
*            定時器中斷
*****************************************************/
#pragma vector = TIMERA1_VECTOR
__interrupt void Timer_A1 ( void )
{
unsigned char tmp;
tmp = TAIV;

if ( tmp == 2 )                 // 比較器1中斷
{
    led_flag = 1;                 // 刷新顯示標志
    CCR1 += 100;                  // 3.35mS
    if ( CCR1 >= 32768 )
      CCR1 -= 32768;
}
if ( tmp == 4 )                 // 比較器2中斷
{
    keyread_flag = 1;             // 讀取鍵值標志
    CCR2 += 5000;                 // 152.6mS長按鍵自加間隔
    if ( CCR2 >= 32768 )
      CCR2 -= 32768;
}   
LPM3_EXIT;                     // 退出低功耗
}

定時器A大致可分為四個功能模塊:計數器、比較/捕獲寄存器0、比較/捕獲寄存器 1、比較/捕獲寄存器2。計數器是主體它是一個開啟和關閉的定時器,如果開啟它就是一直在循環計數,只會有一個溢出中斷,也就是當計數由0xffff到0 時會產生一個中斷。那怎么實現定時功能呢?這就要靠三個比較/捕獲寄存器了以后用CCRx表示。CCR0比較特殊,通過他可以改變計數器的最大計數值,也就是當計數器計數到CCR0的值時自動會將計數器清零。但這需要設置相應的工作模式,模式列表如下:

0——停止模式,用于定時器的暫停

1——增計數模式,計數器計數到CCR0,再清零計數

2——連續計數模式,計數器增計數到0xffff,再清零計數

3——增/減計數模式,增計數到CCR0,再減計數到0

當計數器計數到CCR0時,CCR0單元會產生一個中斷。同樣當計數器計數到CCR1和CCR2時,兩個單元也都會個產生一個中斷。這樣我們可以通過定時器A得到三個定時時間了。

看程序中的定時器初始化模塊。CCTLx是相應比較/捕獲寄存器的控制寄存器。它可對比較/捕獲寄存器進行設置,在這里只用到比較功能,也就是當計數到CCRx時產生中斷,由于CCTLx默認的是比較功能,所以一般也就只用到CCIE 這個控制字,就是開啟相應比較器的中斷。CCRx就是相應比較器的值。TACTL是計數器的控制寄存器,TASSEL_x是時鐘源的選擇。

0——TACLK,使用外部引腳信號作為輸入

1——ACLK,輔助時鐘

2——MCLK,系統主時鐘

3——INCLK,外部輸入時鐘

我暫時之用到ACLK,32.768KHZ。MC_x是工作模式列表為上邊的工作模式列表。對TACTL進行模式設置的同時也開啟了定時器,要停止只需把MC_0賦值給TACTL就可以。所以這個計數器工作在增計數模式時鐘源為ACLK。

中斷函數比較/捕獲寄存器0和比較/捕獲寄存器1、2是分開的,CCR0的中斷很容易只需在函數中加上自己的中斷相應程序就行。但是CCR1和CCR2是公用一個中斷函數的,所這就需要識別到底是哪個中斷,這可以通過一個寄存器TAIV來識別,

2——比較/捕獲寄存器1中斷

4——比較/捕獲寄存器2中斷

10——定時器溢出

0——沒有中斷

在這里需要注意的是TAIV在進行讀取時會清楚數值,所以為了能分辨兩次值,就需要一個中間變量了 。

還要注意的是在增加計數模式時CCR1和CCR2的值應該小于CCR0,否則CCR1和CCR2不會產生中斷。并且每次CCR1和CCR2中斷后要把他重新賦值這樣才能保證CCR1和CCR2的中斷間隔時間不變。類似語句如下:

CCR1 += 100;                  
    if ( CCR1 >= 32768 )
      CCR1 -= 32768;

以上就是定時器A的最基本的應用了,以后會結合實際的應用來具體說明的。
板凳
 樓主| 發表于 2009-4-18 23:13:15 | 只看該作者
MSP430的定時是我有接觸的MCU中,功能最強大的了。

在中斷系統中不小心踩空了一腳,沒有優先級的,弄得我后來只好改電路。
地板
發表于 2009-4-23 21:11:18 | 只看該作者
MSP430的中斷優先級、打開關閉、中斷嵌套

優先級順序從高到低為:

PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */
PORT1_VECTOR (4 * 2u) /* 0xFFE8 Port 1 */
TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CC1-2, TA */
TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CC0 */
ADC_VECTOR (7 * 2u) /* 0xFFEE ADC */
USART0TX_VECTOR (8 * 2u) /* 0xFFF0 USART 0 Transmit */
USART0RX_VECTOR (9 * 2u) /* 0xFFF2 USART 0 Receive */
WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */
COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */
TIMERB1_VECTOR (12 * 2u) /* 0xFFF8 Timer B CC1-2, TB */
TIMERB0_VECTOR (13 * 2u) /* 0xFFFA Timer B CC0 */
NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maska××e */
RESET_VECTOR (15 * 2u) /* 0xFFFE Reset [Highest Priority] */
當同時有多個中斷來的時候才有優先級的考慮(優先級順序可查看向量表)
有中斷響應以后自動關閉總中斷,這個時候即使來更高優先級的中斷都不會響應
要中斷嵌套的話,就必須在中斷中打開總中斷
msp430的指令中,DINT和EINT分別指關和開所有中斷,也就是包涵P1IE、P2IE、WDTIE、TAIE、TBIE、ADC12IE、串口中斷允許的所有中斷允許位為“0”和為“1”。

實現中斷嵌套需要注意以下幾點:
1)430默認的是關閉中斷嵌套的,除非你在一個中斷程序中再次開總中斷EINT;

2)當進入中斷程序時,只要不在中斷中再次開中斷,則總中斷是關閉的,此時來中斷不管是比當前中斷的優先級高還是低都不執行;

3)若在中斷A中開了總中斷,則可以響應后來的中斷B(不管B的優先級比A高還是低),B執行完再繼續執行A。注意:進入中斷B后總中斷同樣也會關閉,如果B中斷程序執行時需響應中斷C,則此時也要開總中斷,若不需響應中斷,則不用開中斷,B執行完后跳出中斷程序進入A程序時,總中斷會自動打開;

4)若在中斷中開了總中斷,后來的中斷同時有多個,則會按優先級來執行,即中斷優先級只有在多個中斷同時到來時才起做用!中斷服務不執行搶先原則。

5)對于單源中斷,只要響應中斷,系統硬件自動清中斷標志位,對于TA/TB定時器的比較/捕獲中斷,只要訪問TAIV/TBIV,標志位倍被自動清除;

對于多源中斷要手動清標志位,比如P1/P2口中斷,要手工清除相應的標志,如果在這種中斷用"EINT();"開中斷,而在打開中斷前沒有清標志,就會有相同的中斷不斷嵌入,而導致堆棧溢出引起復位,所以在這類中斷中必須先清標志再打開中斷開關.
地下室
 樓主| 發表于 2009-4-24 10:58:14 | 只看該作者
本帖最后由 李冬發 于 2009-4-24 19:58 編輯

正是這段說明讓我上當了。

MSP430中斷的優先級與其它CPU的中斷的優先級的概念不是一回事。
1、當同時有多個中斷來的時候才有優先級。其實這個時候很少發生。
2、有中斷響應以后自動關閉總中斷。這時候,誰也別想再中斷了,哪怕你是天王老子。
3、你打開總中斷,同樣暈菜,誰都可以打擾你的,煩不煩。

哎。中斷是MSP430敗筆。真的。其它都好,就這條,實在受不了它。
6
發表于 2009-4-25 11:24:35 | 只看該作者
是這樣。初學430得小心這個地雷。
7
發表于 2009-5-25 11:55:13 | 只看該作者
MSP430最吸引人的是他的時鐘控制,非常適合降低功耗。

其它模塊就那么回事情,他的AD模塊做的不怎么實用,稍顯得有點花。。。
8
發表于 2009-6-12 13:34:53 | 只看該作者
沒有覺得430中斷的不好,只是個人習慣而已。。。
9
發表于 2009-6-16 10:50:30 | 只看該作者
覺得沒什么特別,性能不高。 不是DSPIC,AVR的對手。PWM方面來說。
10
發表于 2010-10-22 13:06:42 | 只看該作者
呵呵  謝謝分享。。!
11
發表于 2010-10-24 12:29:11 | 只看該作者
很好,把通常不會留意、甚至不知道的地方都一一重點說明、顯露出來。
12
發表于 2010-10-25 15:40:01 | 只看該作者
牛在哪里呢?
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美国产大片| 精品无码久久久久久动漫| 野外一级毛片黑人| 香蕉久热| 在线观看日本| 国产欧美国日产在线播放| 欧美雌雄双性人交xxxx| 艳妇臀荡乳欲伦岳TXT下载| 亚洲h视频在线观看| 夜精品a一区二区三区| 色婷婷一区二区三区四区成人网| 亚洲高清视频在线播放| 天堂在线v| 中国一级特黄视频| 国产一区二区在线免费观看| 日本老妇一级特黄aa大片| 中文无码有码亚洲 欧美| 男人插女人动态图| 在线色av| 日本写真高清视频免费网站网| 四虎影院在线免费观看视频| 双性总裁(h)| 在线精品小视频| 男人把女人桶到爽免费看视频| 四虎国产精品免费观看| 青青草免费在线观看| 亚洲欧美综合网站| 一个人看的www免费高清视频| 国产激情一级毛片久久久| 乳欲性高清在线| 秋霞影院精品久久久久| 青娱极品盛宴国产精品分类| 亚洲国产资源| 五月天婷婷网亚洲综合在线| beeg日本高清xxxx| 免费毛片视频网站| 四虎影视亚洲精品| 欧美性猛交xxxx| 一级片aaaa| 永久看日本大片免费35分钟| 九九在线中文字幕无码|