衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用MAXQ系列微控制器中的定時(shí)器

星星科技指導(dǎo)員 ? 來源:ADI ? 作者:ADI ? 2023-03-02 13:56 ? 次閱讀

本應(yīng)用筆記描述了如何針對(duì)不同的應(yīng)用設(shè)置和使用MAXQ?系列微控制器中的Type 2定時(shí)器。它包括供參考的源代碼。

介紹

MAXQ系列微控制器有三種類型的定時(shí)器:定時(shí)器0、定時(shí)器1和定時(shí)器2。

MAXQ定時(shí)器0型是仿照許多0微型控制器上常見的定時(shí)器8051型。MAXQ定時(shí)器1類型仿照8051定時(shí)器2類型。大多數(shù)MAXQ產(chǎn)品都有一個(gè)新的定時(shí)器,稱為定時(shí)器2,這是MAXQ系列獨(dú)有的。本應(yīng)用筆記詳細(xì)介紹了如何為不同目的設(shè)置和使用這款新的定時(shí)器2,并附有一些源代碼供參考。

概述

功能
定時(shí)器的三個(gè)主要用途是生成輸出波形、對(duì)輸入信號(hào)的轉(zhuǎn)換進(jìn)行計(jì)數(shù)(包括對(duì)系統(tǒng)時(shí)鐘轉(zhuǎn)換進(jìn)行計(jì)數(shù),從而起到定時(shí)器的作用)以及對(duì)輸入信號(hào)進(jìn)行計(jì)時(shí)。本節(jié)介紹使用計(jì)時(shí)器 2 的配置模式執(zhí)行這些計(jì)時(shí)器功能的方法。

比較
在此模式下,計(jì)數(shù)器由系統(tǒng)時(shí)鐘或備用時(shí)鐘(通常為 32,768 Hz RTC 時(shí)鐘)在內(nèi)部提供,其中任何一個(gè)都可以選擇按 1、2、4、8、16、32、64 或 128 進(jìn)行預(yù)分頻。然后,計(jì)數(shù)器用于控制初級(jí)和/或次級(jí)定時(shí)器引腳的輸出,以生成各種波形。

通過改變重載(T2R)和比較(T2C)寄存器中的值,可以修改輸出波形的頻率和占空比。這樣,MAXQ處理器就可以產(chǎn)生脈寬調(diào)制(PWM)波形。輸出可以有選擇地使能,起始極性可以反轉(zhuǎn)。頻率和占空比的限制由選擇作為源的時(shí)鐘的頻率(無論是系統(tǒng)時(shí)鐘還是備用時(shí)鐘)和所選的時(shí)鐘除數(shù)決定。最小脈沖寬度為預(yù)分頻源時(shí)鐘的一個(gè)時(shí)鐘周期(通過將比較值和重載值設(shè)置為相同值或?qū)⒈容^值設(shè)置為 FFFEh 來選擇)。最大脈沖寬度為預(yù)分頻源時(shí)鐘的 65,536 個(gè)周期。預(yù)標(biāo)因數(shù)為 128 時(shí),最大脈沖寬度為 8,388,608 個(gè)系統(tǒng)時(shí)鐘周期 - 對(duì)于 1 MHz 系統(tǒng)時(shí)鐘,超過 <> 秒。使用頻率較低的交替時(shí)鐘可以進(jìn)一步增加此值。

比較模式還提供了通過使用單脈沖 (SS2) 功能生成單個(gè)脈沖的功能。單脈沖允許固件在觸發(fā)脈沖之前設(shè)置脈沖的長(zhǎng)度,從而排除了固件對(duì)脈沖進(jìn)行計(jì)時(shí)并確定何時(shí)結(jié)束的要求。門控允許初級(jí)引腳觸發(fā)次級(jí)輸出上的單個(gè)脈沖或打開和關(guān)閉計(jì)數(shù)器,從而允許輸入信號(hào)修改次級(jí)引腳上的PWM輸出。比較模式還可用于按特定計(jì)劃生成重復(fù)中斷。

捕獲
在這種模式下,計(jì)數(shù)器在內(nèi)部供電,但用于計(jì)算或計(jì)時(shí)主定時(shí)器引腳上輸入信號(hào)的持續(xù)時(shí)間。計(jì)數(shù)器可以在輸入信號(hào)的任一或兩個(gè)邊緣進(jìn)行選通和觸發(fā),從而可以靈活地定時(shí)脈沖、單個(gè)事件或遞歸波形。T2C寄存器中的值可用于計(jì)算測(cè)量事件的周期。

計(jì)數(shù)器 在此模式下,主定時(shí)器引腳為計(jì)數(shù)器
提供時(shí)鐘源。在這種模式下,計(jì)數(shù)器計(jì)算主引腳上的轉(zhuǎn)換,上升沿或下降沿,或兩者兼而有之。次級(jí)引腳可用于輸出波形,當(dāng)計(jì)數(shù)溢出以及計(jì)數(shù)器與特定值匹配時(shí),波形將切換。在這兩種情況下也可以生成中斷。

雙八位模式定時(shí)器2可以在十六位模式下運(yùn)行(在這種情況下只有一個(gè)計(jì)數(shù)器可用)或八位模式,八位模式
將計(jì)數(shù)器視為兩個(gè)八位計(jì)數(shù)器,可以獨(dú)立使用。這允許定時(shí)器電路具有三個(gè)附加功能。在八位模式下,主計(jì)數(shù)器(高計(jì)數(shù)器)可用于比較、捕獲或計(jì)數(shù)器功能,而次級(jí)計(jì)數(shù)器(低計(jì)數(shù)器)可用于比較或PWM輸出。

雙比較
在這種模式下,每個(gè)八位計(jì)數(shù)器單獨(dú)計(jì)數(shù),可用于輸出波形,但每個(gè)計(jì)數(shù)器都來自相同的內(nèi)部時(shí)鐘源。通過使用每個(gè)八位計(jì)數(shù)器的不同重載和比較值,可以在兩個(gè)定時(shí)器引腳上輸出波形的不同頻率和占空比。

捕獲/PWM
在此模式下,一個(gè)八位計(jì)數(shù)器(高計(jì)數(shù)器)在捕獲模式下工作,以計(jì)時(shí)輸入信號(hào)的持續(xù)時(shí)間。另一個(gè)八位計(jì)數(shù)器(低計(jì)數(shù)器)在比較模式下工作,可用于輸出波形。

計(jì)數(shù)器/PWM
在這種模式下,一個(gè)八位計(jì)數(shù)器(高計(jì)數(shù)器)在計(jì)數(shù)器模式下工作,以計(jì)算輸入信號(hào)的轉(zhuǎn)換。另一個(gè)八位計(jì)數(shù)器(低計(jì)數(shù)器)在比較模式下工作,可用于輸出波形。

選項(xiàng)

單次 (SS2) 此選項(xiàng)允許計(jì)數(shù)器像運(yùn)行位 (T2R)
已打開一樣運(yùn)行,但僅在計(jì)數(shù)器下一次溢出之前運(yùn)行。然后,計(jì)數(shù)器恢復(fù)為使用運(yùn)行位來確定它是否將繼續(xù)計(jì)數(shù)。在八位模式下,此位僅適用于主八位計(jì)數(shù)器(高計(jì)數(shù)器)。

門控使能 (G2EN)
此選項(xiàng)允許在一段時(shí)間內(nèi)關(guān)閉計(jì)數(shù)器(即門控),而無需固件手動(dòng)切換運(yùn)行位 (T2R)。在比較和計(jì)數(shù)器模式下,門控適用于源時(shí)鐘。在捕獲模式下,門控適用于重新加載事件。

門控由主引腳上的值控制。這要求主引腳是輸入(T2OE [0]=0),因此輸出波形(如果需要)必須輸出在次級(jí)(或B)引腳上。門控控制僅在主輸入端可用。

極性選擇 極性位
(T2POL [0] 和 T2POL [1])可用于反轉(zhuǎn)輸出波形。用于此功能時(shí),必須在設(shè)置相應(yīng)的輸出使能位(T2OE [0] 和 T2OE [1])之前設(shè)置它們。設(shè)置使能位后設(shè)置極性位不起作用。T2POL [0] 位還可用于在初級(jí)引腳不用作輸出時(shí)反相選通條件。T2POL [0] 位在捕獲模式下也具有額外的含義,當(dāng)兩個(gè)邊沿都定義為捕獲時(shí)。在這種情況下,它定義哪個(gè)邊緣開始單次注射循環(huán),并在啟用門控時(shí)禁止在一個(gè)邊緣上重新加載。

輸出使能 輸出使能
位(T2OE [0] 和 T2OE [1])確定初級(jí)和次級(jí)引腳是否由定時(shí)器電路主動(dòng)驅(qū)動(dòng)。當(dāng)輸出使能位關(guān)斷時(shí),可以使用相應(yīng)的端口輸入寄存器將這些引腳讀取為輸入。當(dāng)輸出主引腳未使能時(shí),可用于對(duì)計(jì)數(shù)器進(jìn)行選通(關(guān)斷)。

時(shí)鐘選擇 T2CI 位(備用時(shí)鐘選擇
)和 T2DIV [2:0] 位(時(shí)鐘除數(shù))用于設(shè)置計(jì)數(shù)器使用的時(shí)鐘源和預(yù)縮放因子。T2CI 用于在系統(tǒng)時(shí)鐘和備用時(shí)鐘之間進(jìn)行選擇。然后,這些中的任何一個(gè)都可以按 2 倍進(jìn)行預(yù)縮放n(n 是存儲(chǔ)在 T0DIV 中的 7 到 2 之間的值)。

使用計(jì)時(shí)器

計(jì)數(shù)器寄存器 計(jì)數(shù)器在 2 位模式下有三個(gè)與之關(guān)聯(lián)的寄存器,在 2 位模式下有三個(gè)附加寄存器
。這些寄存器可以在任一模式(2 位或 2 位)下讀取和寫入,但在 2 位模式下,低寄存器的行為不同。在 2 位模式下工作時(shí),T2V、T2R 和 T2C 分別用作 <> 位計(jì)數(shù)器、重新加載和比較寄存器。在八位模式下工作時(shí),這三個(gè)寄存器用作低階八位寄存器。高階寄存器由T<>H、T<>RH和T<>CH分別表示計(jì)數(shù)器、重載和比較寄存器。此外,這些寄存器充當(dāng)主計(jì)數(shù)器的角色,T<>V、T<>R 和 T<>C 寄存器承擔(dān)輔助角色。

這意味著,當(dāng)定時(shí)器處于 8 位模式與 16 位模式時(shí),使用定時(shí)器寄存器的任何代碼的操作都將大不相同。因此,建議您對(duì)特定計(jì)時(shí)器使用八位模式或十六位模式。如果您需要在不同時(shí)間在兩種模式下使用它,則為每種模式使用單獨(dú)的函數(shù)將減少程序員的困惑。

在2位模式下,T2V寄存器包含電流計(jì)數(shù)。當(dāng)運(yùn)行位 (TR2) 或單脈沖位 (SS2) 導(dǎo)通且選通未激活 (G0EN=2) 時(shí),此寄存器隨所選時(shí)鐘邊沿遞增。如果門控處于活動(dòng)狀態(tài) (G1EN=2),則除了 TR2 或 SS2 導(dǎo)通外,初級(jí)引腳上的輸入必須與初級(jí)極性位 (T0POL [<>]) 的極性相反,計(jì)數(shù)器才能遞增。

T2R 寄存器保存計(jì)數(shù)器的重新加載值。每當(dāng)此值溢出(已達(dá)到 FFFFh 并且由于再次遞增)時(shí),該值都會(huì)自動(dòng)插入計(jì)數(shù)器 (T2V) 中。

控制和配置寄存器

有三個(gè)控制和配置寄存器:T2CFG、T2CNA 和 T2CNB。 T2CFG 包含常規(guī)配置信息。

pYYBAGQAOqGAXJCoAAALVcRkESo511.gif

C/T2位(計(jì)數(shù)器/定時(shí)器選擇)選擇定時(shí)器是在計(jì)數(shù)器模式還是定時(shí)器模式下工作(捕獲、比較和捕獲與比較輸出是定時(shí)器模式的子模式)。在定時(shí)器模式下,CCF [1:0] 位(捕獲/比較選擇)確定定時(shí)器是處于比較模式 (CCF [1:0] = 00) 還是捕獲模式 (CCF [1:0] = 01、10 或 11)。在計(jì)數(shù)器模式下,CCF 位確定將計(jì)算哪些邊沿(下降、上升或兩者兼而有之)。在計(jì)數(shù)器模式下,不使用 CCF 位中的值 00,因?yàn)橛?jì)數(shù)器沒有可計(jì)數(shù)的內(nèi)容。 模式選擇位 (T2MD) 確定定時(shí)器是作為一個(gè) <> 位定時(shí)器還是兩個(gè)獨(dú)立的 <> 位定時(shí)器運(yùn)行。設(shè)置后,選擇兩個(gè)八位定時(shí)器。次級(jí)定時(shí)器始終是比較/PWM 定時(shí)器。

可以選擇系統(tǒng)時(shí)鐘或備用時(shí)鐘(在某些MAXQ實(shí)現(xiàn)中為32 kHz RTC時(shí)鐘)作為源時(shí)鐘,并且每個(gè)時(shí)鐘都可以根據(jù)需要進(jìn)行預(yù)分頻。備用時(shí)鐘選擇位 (T2CI) 默認(rèn)為 0,用于選擇系統(tǒng)時(shí)鐘。設(shè)置此位將選擇備用時(shí)鐘。

預(yù)分頻器位 (T2DIV [2:0]) 選擇時(shí)鐘除數(shù),范圍從 1 到 128。預(yù)分頻器的公式為 2n,其中 n 是 T2DIV [2:0] 中的值。

T2CNA 包含選通使能、單次觸發(fā)、重載使能、運(yùn)行使能、低運(yùn)行使能、初級(jí)輸出極性、主輸出使能和中斷使能位。

poYBAGQAOqKAc1FPAAAIwxvtox8302.gif

選通使能位(G2EN)允許有選擇地禁用計(jì)數(shù)器。 單次觸發(fā)位 (SS2) 允許定時(shí)器運(yùn)行,直到下一個(gè)溢出情況,此時(shí)定時(shí)器停止。

捕獲和重裝位 (CPRL2) 指示定時(shí)器將其值捕獲到其捕獲寄存器中,并從外部邊沿上的重載寄存器重新加載該值。CPRL2 不用于比較和計(jì)數(shù)器模式。

運(yùn)行使能位 (TR2) 允許主計(jì)數(shù)器運(yùn)行,低運(yùn)行使能位 (TR2L) 允許輔助計(jì)數(shù)器在 <> 位模式下運(yùn)行。

初級(jí)極性選擇位 (T2POL0) 選擇初級(jí)輸出的初始極性。通過 T2OE0 啟用輸出后更改此位不起作用。設(shè)置主輸出使能位 (T2OE0) 將打開初級(jí)引腳的輸出,并將其值設(shè)置為等于極性位 (T2POL0) 中的值。

設(shè)置主中斷使能 (ET2) 允許生成中斷,前提是定時(shí)器模塊已啟用中斷(在 IMR 寄存器中設(shè)置適當(dāng)?shù)奈唬┎⑶乙褑⒂萌种袛啵?a target="_blank">IC 寄存器位 0 設(shè)置為 1)。當(dāng)主計(jì)數(shù)器溢出(達(dá)到FFFFh)或與比較寄存器匹配時(shí),將生成中斷。在這些情況下,將設(shè)置適當(dāng)?shù)奈唬?a target="_blank">TF2 用于溢出,TCC2 用于比較),并應(yīng)由中斷處理程序中的固件重置。未能重置這些位將導(dǎo)致重復(fù)中斷,直到它們被重置或中斷被禁用。

T2CNB 包含比較和溢出標(biāo)志、次級(jí)中斷使能以及次級(jí)輸出極性和使能位。

pYYBAGQAOqOAB_oxAAAJEnj8mOI469.gif

捕獲/比較標(biāo)志 (TCC2) 是在主計(jì)數(shù)器值與比較值匹配時(shí)設(shè)置的。

低捕獲/比較標(biāo)志 (TC2L) 類似于 TCC2,但僅在處于 <> 位模式且低計(jì)數(shù)器或次級(jí)計(jì)數(shù)器與低比較值匹配時(shí)才設(shè)置。

溢出標(biāo)志 (TF2) 在主計(jì)數(shù)器溢出時(shí)設(shè)置。低溢出標(biāo)志 (TF2L) 與 TF2 類似,但僅在處于 2 位模式且低計(jì)數(shù)器或次級(jí)計(jì)數(shù)器溢出時(shí)設(shè)置。 次級(jí)極性選擇位 (T1POL2) 選擇次級(jí)或 B 輸出引腳的初始極性。通過 T1OE2 啟用輸出后更改此位不起作用。設(shè)置次級(jí)輸出使能位 (T1OE2) 將打開次級(jí)引腳的輸出,并將其值設(shè)置為等于極性位 (T1POL<>) 中的值。次級(jí)輸出不直接鏈接到次級(jí)計(jì)數(shù)器,因?yàn)樵?<> 位模式下,主計(jì)數(shù)器提供輸出,而在 <> 位模式下,低計(jì)數(shù)器源輸出。

設(shè)置次級(jí)中斷使能 (ET2L) 允許在 2 位模式下,當(dāng)次級(jí)或低位 2 位計(jì)數(shù)器的溢出 (TF2L) 或比較 (TC2L) 設(shè)置 TF2L 或 TC<>L 位時(shí)生成中斷。ET<>L 位不用于 <> 位模式。

例子

比較示例 1 - 輸出帶門控
的波形 以下代碼將輸出頻率為 100 Hz、占空比為 1/3 的信號(hào)。該代碼是為 4.9152 MHz 的時(shí)鐘速度編寫的。4000h(16384 十進(jìn)制)的重載值在重載和溢出以及隨后的重載之間提供 C000h(49152 十進(jìn)制)時(shí)鐘周期,持續(xù)時(shí)間為 10 ms (100 Hz)。C000 的比較值為我們提供了 32768 個(gè)時(shí)鐘周期 (C000h - 4000h) 或重新加載后 6.7 毫秒,將進(jìn)行比較(以及因此產(chǎn)生的脈沖邊沿)。

T2POL1 位設(shè)置初始值,因?yàn)槲覀兪褂玫氖谴渭?jí)輸出,主輸出用于選通。在這種情況下,T2POL0 位選擇門控電平。當(dāng) T2POL1 設(shè)置為 0 時(shí),輸出的初始值為 0,因此輸出低電平持續(xù) 6.7 毫秒,然后高電平持續(xù) 3.3 毫秒。只要初級(jí)引腳保持高電平,就會(huì)輸出1/3占空比波形。當(dāng)初級(jí)引腳被拉低時(shí),計(jì)數(shù)器將停止計(jì)數(shù),并將次級(jí)引腳保持在當(dāng)前電平。通過將T2POL3設(shè)置為2,可以反轉(zhuǎn)波形(產(chǎn)生1/1占空比脈沖)。通過將 T2POL0 設(shè)置為 1,可以將門控電平更改為高電平有效。

move	T2V0, #04000h ; set to reload value to keep first pulse
  ; from being extra long
	move 	T2R0, #04000h ; reload value
	move 	T2C0, #0C000h ; compare value

	move 	T2CFG0, #000h ;
; 0000,0000 - use system clock (0), divide by 1 (000),
;	16 bit mode (0), compare mode (00), c/t2=timer (0)

move 	T2CNB0, #040h
; 0100,0000 - ET2L off - low interrupts not available in 16-bit mode (0),
;	secondary OE is on (1), POL1 = low starting value (0), reserved (0)
;	TF2 is not used (0), TF2L is not used (0), TCC2 is not used (0),
;	TC2L is not used (0)

move 	T2CNA0, #009h
; 0000,1001 - ET2 off - interrupts not needed (0),
;	primary OE off as primary pin is used for gating (0),
;	POL0 low, gated when primary pin is low (0), TR2L is not needed (0)
;	TR2 on, run enabled (1), CPRL2 is not needed (0),
;	SS2 is not needed (0), gating enabled (1)

比較示例2 - 單次脈沖
以下代碼是為MAXQ2000器件編寫的,該器件具有3個(gè)獨(dú)立的定時(shí)器2。它使用模塊 4 中的第三個(gè)計(jì)時(shí)器。它也是為4.9152 MHz的系統(tǒng)時(shí)鐘頻率編寫的,觸發(fā)時(shí)將輸出寬度為兩毫秒的低脈沖,輸出通常為高電平。在脈沖結(jié)束時(shí),將生成一個(gè)中斷,以指示脈沖已完成。此代碼在八位模式下使用計(jì)時(shí)器,還演示了預(yù)分頻器的用法。

為了獲得所需的兩毫秒周期,使用預(yù)標(biāo)度值 64 和定時(shí)器周期 154 個(gè)預(yù)分頻時(shí)鐘 (4915200 / 64 * 0.002 = 153.6)。選擇 66h (100h - 9Ah) 的比較值,在計(jì)數(shù)器從 FFh 溢出到 9 之前,會(huì)得到 154Ah(00 個(gè)十進(jìn)制)的刻度。將重新加載值設(shè)置為 65h 會(huì)導(dǎo)致脈沖在我們?cè)O(shè)置 SS1(單次)位后開始 2 個(gè)刻度。

SetupPulse:
	; This code sets up the timer and should be run once
	; set up Int handler
	move    IV, #IntHandler	    ; Set interrupt vector.
    	move    IC.0, #1            ; Enable global interrupts.
    	move    IMR.4, #1           ; Enable interrupts for module 3.
	; timer 0 is in module 3, timer 1 & 2 are in module 4

	move 	T2CFG2, #068h ;
; 0110,1000 -- use system clock (0), divide by 64 (110),
;	8 bit mode (1), compare mode (00), c/t2=timer (0)

	move 	T2CNB2, #000h
; 0000,0000 -- ET2L off, low interrupts not needed (0), secondary OE off (0),
;	T2POL1 = not used (0), reserved(0)
;	TF2 is generated by the timer (0), TF2L is not used (0), TCC2 is not used (0),
;	TC2L is not used (0)

	move 	T2CNA2, #0E0h
; 1110,0000 -- ET2 on, interrupt will be generated (1), primary OE on (1),
;	T2POL0 is high (1), TR2L is not needed (0)
;	TR2 off, run not enabled (0), CPRL2 is not needed (0), SS2 is set later (0),
;	gating disabled (0)

	move	T2H2, #065h ; set to reload value
	move 	T2RH2, #065h ;
	move 	T2CH2, #066h ; 0x100 - 0x66(compare value) = 0x9A = 154 ticks

每當(dāng)要觸發(fā)脈沖時(shí),都應(yīng)調(diào)用以下代碼。

TriggerPulse:
	move T2CNA2.1, #1 ; set the single shot bit to start the timer
ret
The following is a piece of the interrupt code.
IntHandler:
move c, T2CNB2.3
jump nc, NonTimerInt
move T2CNB2.3, #0 ; turn off overflow bit so interrupt is serviced
; code for end of pulse here...

NonTimerInt:
	; other interrupt code here.

reti

比較示例 3 - 定時(shí)中斷 以下代碼將生成兩個(gè)中斷
,每 125 微秒一個(gè),第二個(gè)每毫秒一個(gè)。它使用一個(gè)分為兩個(gè)八位定時(shí)器的定時(shí)器。由于兩個(gè)八位定時(shí)器將在同一輸入時(shí)鐘上運(yùn)行,因此我們希望選擇一個(gè)時(shí)鐘除數(shù),允許兩個(gè)定時(shí)器的計(jì)數(shù)小于256(八位計(jì)數(shù)器的最大值)。使用備用時(shí)鐘作為源為我們提供了一種無需劃分系統(tǒng)時(shí)鐘即可獲得兩個(gè)時(shí)序的方法,但代價(jià)是一些精度:高計(jì)數(shù)器的實(shí)際時(shí)序接近 122 微秒,低計(jì)數(shù)器的實(shí)際時(shí)序接近 0.98 毫秒,因?yàn)閭溆脮r(shí)鐘以 32768 Hz 運(yùn)行,并且沒有所需時(shí)間段的偶數(shù)除數(shù)可用。我們將從低計(jì)數(shù)器每秒獲得 1024 個(gè)中斷,從高計(jì)數(shù)器每秒獲得 8192 個(gè)中斷。高中斷和低中斷均使能,中斷類型由TF2和TF2L位標(biāo)識(shí),必須清除這些位才能為中斷提供服務(wù)。

; This code sets up the timer and should be run once
	; set up Int handler
	move    IV, #IntHandler	    ; Set interrupt vector.
    	move    IC.0, #1            ; Enable global interrupts.
    	move    IMR.3, #1           ; Enable interrupts for module 3.
	; timer 0 is in module 3

	move 	T2CFG0, #088h ;
; 1000,1000 -- use 32 kHz clock (1), divide by 1 (000),
;	8 bit mode (1), compare mode (00), c/t2=timer (0)

	move 	T2CNB0, #080h
; 1000,0000 -- ET2L on, low interrupt will be generated (1), secondary OE off (0),
;	T2POL1 = not used (0), reserved(0)
;	TF2 is generated by the timer (0), TF2L is generated by timer (0),
;   	TCC2 is not used (0), TC2L is not used (0)

	move 	T2CNA0, #080h
; 1000,0000 -- ET2 on, interrupt will be generated (1), primary OE off (0),
;	T2POL0 is not needed (0), TR2L off, will be set later (0)
;	TR2 off, will be set later (0), CPRL2 is not needed (0),
;   	SS2 is not needed (0), gating disabled (0)

	move	T2H0, #0FCh ; set to reload value to keep first pulse from being extra long
	move 	T2RH0, #0FCh ; reload value (0x100 - 0xFC = 4 ticks)
	move 	T2CH0, #000h ;

	move	T2V0, #0E0h ; set to reload value to keep first pulse from being extra long
	move 	T2R0, #0E0h ; reload value (0x100 - 0xE0 = 32 ticks)
	move 	T2C0, #000h ;

	move	ACC, T2CNA0 ; turn on high run and low run (TR2, TR2L)
	or	#018h ;
	move	T2CNA0, ACC

以下是中斷處理程序代碼的一部分:

IntHandler:
	move c, T2CNB0.3
	jump nc, No8KHz
	; code for 8KHz interrupt here
	move T2CNB0.3, #0


No8KHz:
	move c, T2CNB0.2
	jump nc, No1KHz
	; code for 1KHz interrupt here
	move T2CNB0.2, #0


No1KHz:
	; other interrupt code here

reti

捕獲示例 - 對(duì)輸入波形進(jìn)行計(jì)時(shí)
此示例對(duì)輸入信號(hào)進(jìn)行計(jì)時(shí)。此代碼使用第二個(gè)定時(shí)器(它們編號(hào)為 0、1 和 2),并設(shè)置為對(duì)高脈沖的持續(xù)時(shí)間進(jìn)行計(jì)時(shí)。在看到上升沿之前,它不會(huì)開始計(jì)時(shí)。CPRL2位可在捕獲時(shí)重新加載,因此后續(xù)脈沖也可以定時(shí)。T2POL [0] 和 SS2 位在此模式下的含義略有不同。SS2位(單次)用于禁止計(jì)數(shù),直到檢測(cè)到起始邊沿。這使得定時(shí)器可以隨時(shí)設(shè)置,即使輸入當(dāng)前為高電平,因?yàn)槎〞r(shí)器直到下一個(gè)上升沿才會(huì)啟動(dòng)。T2POL [0] 位選擇門控電平,而不是前面示例中的輸出極性。門控電平為 0 可防止計(jì)數(shù)器在輸入為低電平時(shí)運(yùn)行。此示例適用于更長(zhǎng)的脈沖,并將系統(tǒng)時(shí)鐘除以 128。系統(tǒng)時(shí)鐘頻率為 4.9152 MHz,定時(shí)器的分辨率約為 26 微秒,溢出前可計(jì)數(shù)至 1.7 秒。

以下代碼設(shè)置捕獲。

; set up Int handler
	move    IV, #IntHandler         ; Set interrupt vector.
      move    IC.0, #1                ; Enable global interrupts.
      move    IMR.4, #1               ; Enable interrupts for module 3.
	; timer 0 is in module 3, timer 1 & 2 are in module 4

	; repeated capture of high pulse
	move T2CFG1, #074h ;
; 0111,0100 -- use system clock (0), divide by 128 (111),
;	16 bit mode (0), capture on falling edge (10), c/t2=timer (0)

	move T2CNA1, #08Fh ;
; 1000,1111 -- ET2 on, interrupt will be generated (1), primary OE off (0),
;	T2POL0 (gating) at low (0), TR2L off, will be set later (0)
;	TR2 on (1), CPRL2 (reload on capture) is on (1),
;   	SS2 on (1), gating enabled (1)

	move 	T2CNB1, #000h
; 0000,0000 -- ET2L off, low interrupt not used (0), secondary OE off (0),
;	T2POL1 = not used (0), reserved(0)
;	TF2 is generated by the timer (0), TF2L is not used (0),
;   	TCC2 is not used (0), TC2L is not used (0)

以下是中斷處理程序代碼的一部分:

IntHandler:
	; looking for Timer2 interrupt...

move c, T2CNB1.1 ; capture/reload flag
jump nc, NoCapture
move T2CNB1.1, #0
; put code for capture event here
move ACC, T2C1 ; capture value now in ACC

NoCapture:
move c, T2CNB1.3 ; overflow flag
jump nc, NoOverflow
	move T2CNB1.3, #0 ;
	; put code to deal with overflow here
	; pulse was too long to measure with current clock speed and divisor
	; can add 65536 to a 32-bit value to keep counting

NoOverflow:
	; put other interrupt code here

reti

計(jì)數(shù)器示例 - 使用中斷和輸出波形
計(jì)算傳入轉(zhuǎn)換 以下示例對(duì)初級(jí)引腳上的輸入脈沖進(jìn)行計(jì)數(shù),并在每八個(gè)脈沖后生成一個(gè)中斷。它還控制次級(jí)引腳上的輸出波形,該波形每 8 個(gè)輸入脈沖切換一次。

	; This code sets up the timer and should be run once
	; set up Int handler
	move    IV, #IntHandler	    ; Set interrupt vector.
      move    IC.0, #1            ; Enable global interrupts.
      move    IMR.3, #1           ; Enable interrupts for module 3.
	; timer 0 is in module 3

	move	T2V0, #0FFF8h ; set to reload value
	move 	T2R0, #0FFF8h ; reload value 0x10000 - 0x0ffff = 8 ticks
	move 	T2C0, #00000h ;

	move 	T2CFG0, #003h ;
; 0000,0011 -- use system clock (0), divide by 1 (000),
;	16-bit mode (0), rising edge (01), c/t2=counter (1)

	move 	T2CNB0, #060h
; 0110,0000 -- ET2L not used (0), secondary OE on (1),
;	T2POL1 start at high (1), reserved(0)
;	TF2 is generated by the timer (0), TF2L is not used (0),
;   	TCC2 is generated by the timer (0), TC2L is not used (0)

	move 	T2CNA0, #088h
; 1000,1000 -- ET2 on, interrupt will be generated (1), primary OE not used (0),
;	T2POL0 is not used (0), TR2L is not needed(0)
;	TR2 on (1), CPRL2 is not needed (0),
;   	SS2 is not needed (0), gating disabled (0)

以下是中斷處理程序的一部分

IntHandler:

	move c, T2CNB0.3
	jump nc, NoTimer
	move T2CNB0.3, #0 ; service interrupt
	; put code for every 8 pulses here

NoTimer:
	; other interrupt code here

reti

要避免的一些常見陷阱

在比較模式下,如果比較值和重載值相等,則在重載發(fā)生一個(gè)時(shí)鐘周期后,輸出上會(huì)發(fā)生第二次轉(zhuǎn)換。雖然當(dāng)您想要一個(gè)時(shí)鐘周期的脈沖寬度時(shí),這是一個(gè)有效的選項(xiàng),但很容易讓這種情況發(fā)生而沒有打算,因?yàn)樗鼈兌寄J(rèn)為相同的值 0。如果不要使用比較值,則應(yīng)將其設(shè)置在計(jì)時(shí)器使用的范圍之外。通常,將比較值設(shè)置為小于重新加載值的值將執(zhí)行此操作。如果無法做到這一點(diǎn)(由于使用重新加載值 0),則比較值應(yīng)設(shè)置為 <> 位模式下的 FFFFh 或 <> 位模式下的 FFh。這會(huì)導(dǎo)致比較和溢出事件發(fā)生在同一計(jì)時(shí)器時(shí)鐘周期上,從而阻止輸出的第二次轉(zhuǎn)換。

輸出使能應(yīng)在運(yùn)行使能之前或同時(shí)打開。在輸出使能之前設(shè)置運(yùn)行使能可能會(huì)導(dǎo)致輸出反轉(zhuǎn),因?yàn)樵谟?jì)時(shí)器設(shè)置為運(yùn)行和斷言輸出使能之間,中斷可能會(huì)導(dǎo)致代碼掛起(在中斷提供服務(wù)時(shí))。這可能導(dǎo)致在使能輸出之前發(fā)生比較或溢出事件,從而導(dǎo)致輸出具有相反的極性。這通常發(fā)生在B或次級(jí)輸出上,因?yàn)檩敵鍪鼓埽═2OE1)位于T2CNB寄存器中,而運(yùn)行位(TR2)和低運(yùn)行位(TR2L)位于T2CNA寄存器中。在這種情況下,應(yīng)首先設(shè)置 T2CNB 寄存器,或者應(yīng)設(shè)置 T2CNA 寄存器,將運(yùn)行位設(shè)置為零,然后在配置所有寄存器后設(shè)置運(yùn)行位。

審核編輯:郭婷


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7649

    瀏覽量

    152107
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5363

    瀏覽量

    121158
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3255

    瀏覽量

    115369
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    16位微控制器MAXQ613電子資料

    概述:MAXQ613是一款低功耗、16位MAXQ 微控制器 ,設(shè)計(jì)用于通用 遙控 、消費(fèi)類 電子 和白色家電等低功耗產(chǎn)品。器件結(jié)合了強(qiáng)大的16位RISC
    發(fā)表于 04-13 07:35

    MAXQ2000微控制器與MAX4397是如何連接的?

    MAX4397是什么?MAXQ2000微控制器與MAX4397是如何連接的?
    發(fā)表于 06-04 06:15

    用uIP堆棧實(shí)現(xiàn)MAXQ微控制器聯(lián)網(wǎng)-MAXQ2000的應(yīng)用

    用uIP堆棧實(shí)現(xiàn)MAXQ微控制器聯(lián)網(wǎng) 摘要:本應(yīng)用筆記描述了如何用uIP TCP/IP網(wǎng)絡(luò)協(xié)議棧實(shí)現(xiàn)MAXQ®微控制器聯(lián)網(wǎng)。本設(shè)計(jì)
    發(fā)表于 08-04 09:47 ?522次閱讀
    用uIP堆棧實(shí)現(xiàn)<b class='flag-5'>MAXQ</b><b class='flag-5'>微控制器</b>聯(lián)網(wǎng)-<b class='flag-5'>MAXQ</b>2000的應(yīng)用

    MAXQ微控制器JTAG接口引腳的復(fù)用

    摘要:通常在嵌入式應(yīng)用微控制器的每個(gè)端口引腳都是必需的,沒有多余引腳。大部分MAXQ®微控制器帶有可重新進(jìn)行寫操作的內(nèi)部程序存儲(chǔ)
    發(fā)表于 04-23 16:28 ?980次閱讀

    在應(yīng)用編程MAXQ微控制器可分區(qū)擦除的程序和數(shù)據(jù)閃存

    摘要:本應(yīng)用筆記介紹了MAXQ微控制器的程序和數(shù)據(jù)閃存,以及如何使用內(nèi)置的應(yīng)用ROM對(duì)閃存進(jìn)行擦/寫。本應(yīng)用筆記適用于所有使用分區(qū)擦除閃存的MAXQ
    發(fā)表于 04-23 17:16 ?709次閱讀
    在應(yīng)用編程<b class='flag-5'>MAXQ</b><b class='flag-5'>微控制器</b><b class='flag-5'>中</b>可分區(qū)擦除的程序和數(shù)據(jù)閃存

    MAXQ8913微控制器從RAM執(zhí)行應(yīng)用程序

    MAXQ8913微控制器從RAM執(zhí)行應(yīng)用程序 MAXQ8913及其它MAXQ®微控制器
    發(fā)表于 01-11 17:56 ?1212次閱讀
    在<b class='flag-5'>MAXQ</b>8913<b class='flag-5'>微控制器</b><b class='flag-5'>中</b>從RAM執(zhí)行應(yīng)用程序

    MAXQ1103 高性能RISC安全微控制器

    MAXQ1103 高性能RISC安全微控制器 概述 MAXQ1103微控制器是一款低功耗32位R
    發(fā)表于 01-26 16:18 ?876次閱讀

    MAXQ61H 低功耗、16位MAXQ微控制器

      MAXQ61H是一款低功耗、16位MAXQ®微控制器,設(shè)計(jì)用于通用遙控、消費(fèi)類電子和白色家電等低功耗產(chǎn)品。 MAXQ61H結(jié)合
    發(fā)表于 01-05 09:34 ?871次閱讀
    <b class='flag-5'>MAXQ</b>61H 低功耗、16位<b class='flag-5'>MAXQ</b><b class='flag-5'>微控制器</b>

    MAXQ618 低功耗6位MAXQ微控制器

    MAXQ618是一種低功耗,16位MAXQ微控制器的低功耗應(yīng)用,包括通用遙控,消費(fèi)電子和白色家電設(shè)計(jì)。該器件結(jié)合了強(qiáng)大的16位RISC微控制器
    發(fā)表于 03-14 11:02 ?1257次閱讀
    <b class='flag-5'>MAXQ</b>618 低功耗6位<b class='flag-5'>MAXQ</b><b class='flag-5'>微控制器</b>

    MAXQ612/MAXQ622低功耗、16位MAXQ微控制器

    MAXQ612/MAXQ622低功耗、16位MAXQ?微控制器設(shè)計(jì)用于通用遙控、消費(fèi)類電子和白色家電等低功耗產(chǎn)品。兩款器件均采用低功耗、高
    發(fā)表于 05-28 11:47 ?1340次閱讀
    <b class='flag-5'>MAXQ</b>612/<b class='flag-5'>MAXQ</b>622低功耗、16位<b class='flag-5'>MAXQ</b><b class='flag-5'>微控制器</b>

    微控制器MAXQ1850文數(shù)據(jù)手冊(cè)

    本文提供的微控制器MAXQ1850文數(shù)據(jù)手冊(cè),希望對(duì)你的學(xué)習(xí)有所幫助!
    發(fā)表于 06-07 15:39 ?175次下載
    <b class='flag-5'>微控制器</b><b class='flag-5'>MAXQ</b>1850<b class='flag-5'>中</b>文數(shù)據(jù)手冊(cè)

    使用uIP堆棧將MAXQ微控制器聯(lián)網(wǎng)

    本應(yīng)用筆記介紹如何使用uIP TCP/IP網(wǎng)絡(luò)堆棧將MAXQ?微控制器聯(lián)網(wǎng)。常用的SPI?轉(zhuǎn)以太網(wǎng)IC用作此應(yīng)用的MAC/PHY。MAXQ2000作為微控制器示例。
    的頭像 發(fā)表于 01-11 20:32 ?1261次閱讀
    使用uIP堆棧將<b class='flag-5'>MAXQ</b><b class='flag-5'>微控制器</b>聯(lián)網(wǎng)

    如何使用MAXQ微控制器上的定時(shí)器B生成PWM波形

    MAXQ微控制器有三種類型的定時(shí)器定時(shí)器0、定時(shí)器1和定時(shí)器2。
    的頭像 發(fā)表于 02-20 13:44 ?822次閱讀
    如何使用<b class='flag-5'>MAXQ</b><b class='flag-5'>微控制器</b>上的<b class='flag-5'>定時(shí)器</b>B生成PWM波形

    使用安全微控制器看門狗定時(shí)器

    微控制器通常用于電源瞬變、電磁干擾 (EMI) 和靜電放電 (ESD) 豐富的惡劣環(huán)境??偩€損壞和電磁放電引起的程序損壞可能導(dǎo)致微處理執(zhí)行錯(cuò)誤的指令。在這些環(huán)境,看門狗
    的頭像 發(fā)表于 03-01 14:14 ?999次閱讀

    如何使用MAXQ微控制器上的定時(shí)器B生成PWM波形

    MAXQ微控制器定時(shí)器B可以提供不同的PWM波形,這取決于TBC和TBR寄存的相對(duì)值以及DCEN位的狀態(tài)。
    的頭像 發(fā)表于 06-13 16:30 ?804次閱讀
    如何使用<b class='flag-5'>MAXQ</b><b class='flag-5'>微控制器</b>上的<b class='flag-5'>定時(shí)器</b>B生成PWM波形
    真人百家乐官网什么平台| 皇家娱乐场| 圣保罗百家乐官网的玩法技巧和规则| 明升国际| 新锦江百家乐赌场娱乐网规则| 百家乐官网博娱乐场| bet365滚球| 百家乐b28博你| 香港百家乐官网赌场娱乐网规则| 五湖四海娱乐城| 百家乐最好投| 真人百家乐官网网络游戏信誉怎么样 | 百家乐官网制胜软件| 姚记娱乐城安全| 百家乐赚钱方| 在线百家乐官网作| 现金百家乐官网伟易博| 大发888游戏平台 送1666元礼金领取lrm | 菲律宾百家乐官网的说法| 大发888 有斗地主吗| 澳门百家乐骗人| 百家乐官网是个什么样的游戏 | 城口县| 冠赌球网| 查看百家乐赌博| 百家乐官网如何捕捉长龙| 迁安市| 皇冠开户娱乐网| 百家乐翻天在线观看| 百家乐视频百家乐| 百家乐官网智能分析| 成安县| 金冠娱乐城最新网址| 将军百家乐的玩法技巧和规则| 网上百家乐骗人| 百家乐官网打鱼秘籍| 百家乐官网仿水晶筹码| 青鹏百家乐游戏币| 虎在什么方位做生意好| 网上百家乐官网真的假| 百家乐官网优博u2bet|