ARM通用定時器解析PPT學習教案_第1頁
ARM通用定時器解析PPT學習教案_第2頁
ARM通用定時器解析PPT學習教案_第3頁
ARM通用定時器解析PPT學習教案_第4頁
ARM通用定時器解析PPT學習教案_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、會計學1ARM通用定時器解析通用定時器解析回顧回顧教學內容1、定時器概述2、定時器庫函數(shù)3、定時器編程實例4、看門狗概述5、看門狗應用第1頁/共50頁回顧回顧隔隔2秒秒(在循環(huán)中使用延時函數(shù)實現(xiàn)在循環(huán)中使用延時函數(shù)實現(xiàn)),向,向PC機發(fā)送機發(fā)送“hi, com test ok!”For(:) send(“hi, com test ok!”); delay(2S)第2頁/共50頁回顧回顧 /初始化 SysTickPeriodSet(12000000UL); SysTickIntEnable(); IntMasterEnable(); SysTickEnable(); /中斷服務程序void Sy

2、sTick_ISR(void) /send “com test ok” 注意:更改中斷向量表 startup_ewarm.c 第3頁/共50頁通用定時器通用定時器(Timer)(Timer) 8962集成有 4 個通用定時器(General-Purpose Timer Module,GPTM),分別稱為 Timer0、Timer1、Timer2 和 Timer3。 每個 Timer 模塊都可以配置為一個 32 位定時器或一個 32 位 RTC 定時器用于捕獲;也可以拆分為兩個16 位的定時/計數(shù)器 TimerA 和 TimerB。 每個 Timer 模塊可以被配置為獨立運行的定時器、事件計數(shù)器

3、或 PWM。Timer 總體特性總體特性第4頁/共50頁通用定時器通用定時器(Timer)(Timer)Timer 功能結構圖功能結構圖第5頁/共50頁通用定時器通用定時器(Timer)(Timer)關于定時器的幾個概念關于定時器的幾個概念增計數(shù)與減計數(shù)模式增計數(shù)與減計數(shù)模式以定時以定時1000S 為例,假設為例,假設8962每秒每秒 計數(shù)一次,如何實現(xiàn)實時?計數(shù)一次,如何實現(xiàn)實時?第6頁/共50頁通用定時器通用定時器(Timer)(Timer)關于定時器的幾個概念關于定時器的幾個概念硬件定時器與軟件定時器硬件定時器與軟件定時器第7頁/共50頁通用定時器通用定時器(Timer)(Timer)關

4、于定時器的幾個概念關于定時器的幾個概念單次觸發(fā)與周期觸發(fā)單次觸發(fā)與周期觸發(fā)連續(xù)的單次觸發(fā)等同于周期觸發(fā)!第8頁/共50頁通用定時器通用定時器(Timer)(Timer)關于定時器的幾個概念關于定時器的幾個概念16位定時器與位定時器與32位定時器位定時器16位定時器 最大初值 0 xffff32位定時器 最大初值 0 xffff ffff 兩個16位定時器級聯(lián)為32位定時器,而32位定時器可以拆分為兩個16位定時器!1第9頁/共50頁通用定時器通用定時器(Timer)(Timer)關于定時器的幾個概念關于定時器的幾個概念16位輸入邊沿計數(shù)捕獲位輸入邊沿計數(shù)捕獲Count 用于計數(shù), 信號的頻率是

5、多少?第10頁/共50頁通用定時器通用定時器(Timer)(Timer)關于定時器的幾個概念關于定時器的幾個概念16位輸入邊沿定時捕獲位輸入邊沿定時捕獲信號的頻率是多少?或者說它的周期是多少?第11頁/共50頁通用定時器通用定時器(Timer)(Timer)關于定時器的幾個概念關于定時器的幾個概念16位位PWM16位PWM的用途在哪里?第12頁/共50頁通用定時器通用定時器(Timer)(Timer) #define SysCtlPeriEnable SysCtlPeripheralEnable SysCtlPeriEnable(SYSCTL_PERIPH_TIMERn); Timer 庫函數(shù)

6、庫函數(shù)使能使能第13頁/共50頁通用定時器通用定時器(Timer)(Timer)Timer 庫函數(shù)庫函數(shù) 配置void TimerConfigure(unsigned long ulBase, unsigned long ulConfig)ulConfig:Timer模塊的配置 在32位模式下應當取下列值之一: TIMER_CFG_32_BIT_OS /32位單次觸發(fā)定時器 TIMER_CFG_32_BIT_PER /32位周期定時器 TIMER_CFG_32_RTC /32位RTC 定時器 實例:配置Timer0為32位單次觸發(fā)定時器 TimerConfigure(TIMER0_BASE,

7、TIMER_CFG_32_BIT_OS); 第14頁/共50頁通用定時器通用定時器(Timer)(Timer)Timer 庫函數(shù)庫函數(shù) 配置void TimerConfigure(unsigned long ulBase, unsigned long ulConfig)在16位模式下,配置 TimerA 的方法是參數(shù) ulConfig 先取值 TIMER_CFG_16_BIT_PAIR 再與下列值之一進行“或運算”的組合形式: TIMER_CFG_A_ONE_SHOT /TimerA為單次觸發(fā)定時器 TIMER_CFG_A_PERIODIC /TimerA為周期定時器 TIMER_CFG_A_

8、CAP_COUNT /TimerA為邊沿事件計數(shù)器 TIMER_CFG_A_CAP_TIME /TimerA為邊沿事件定時器 TIMER_CFG_A_PWM /TimerA為PWM輸出 在Timer0當中,配置TimerA為單次觸發(fā)定時器(不配置TimerB) TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_ONE_SHOT); 如果要求配置TimerB,又該如何處置?第15頁/共50頁通用定時器通用定時器(Timer)(Timer)Timer 庫函數(shù)庫函數(shù) 配置void TimerConfigure(unsign

9、ed long ulBase, unsigned long ulConfig)配置 TimerB 的方法是參數(shù) ulConfig 先取值 TIMER_CFG_16_BIT_PAIR 再與下列值之一進行“或運算”的組合形式: TIMER_CFG_B_ONE_SHOT /TimerB為單次觸發(fā)定時器 TIMER_CFG_B_PERIODIC /TimerB為周期定時器 TIMER_CFG_B_CAP_COUNT /TimerB為邊沿事件計數(shù)器 TIMER_CFG_B_CAP_TIME /TimerB為邊沿事件定時器 TIMER_CFG_B_PWM /TimerB為PWM輸出 在Timer0當中,配

10、置TimerB為單次觸發(fā)定時器(不配置TimerA) TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_B_ONE_SHOT); 第16頁/共50頁通用定時器通用定時器(Timer)(Timer)函數(shù)函數(shù)名稱名稱TimerLoadSet( )功能功能設置Timer的裝載值原型原型void TimerLoadSet(unsigned long ulBase, unsigned long ulTimer, unsigned long ulValue)參數(shù)參數(shù)ulTimer:指定的Timer,取值TIMER_A、TIMER_B

11、或TIMER_BOTH ulValue:32位裝載值(32位模式)或16位裝載值(16位模式)庫函數(shù)裝載初值第17頁/共50頁通用定時器通用定時器(Timer)(Timer)TimerLoadSet(TIMER0_BASE, TIMER_A, 9000000UL); /設置32位Timer0初值,定時1.5s 主頻6M 注意: Timer 模塊的功能在總體上可以分成 32 位模式和 16 位模式兩大類。在 32 位模式下,對 Timer 的各項操作,如裝載初值、運行控制、中斷控制等,都用對 TimerA的操作作為總體上的 32 位控制。 庫函數(shù)裝載初值第18頁/共50頁通用定時器通用定時器(T

12、imer)(Timer)庫函數(shù)運行控制函數(shù)名稱函數(shù)名稱TimerEnable( )功能功能使能Timer計數(shù)(即啟動啟動Timer)原型原型void TimerEnable(unsigned long ulBase, unsigned long ulTimer)參數(shù)參數(shù)ulBase:Timer模塊的基址,取值TIMERn_BASE(n為0、1、2或3) ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH 函數(shù)名稱函數(shù)名稱TimerDisable( )功能功能禁制Timer計數(shù)(即停止停止Timer)原型原型void TimerDisable(unsign

13、ed long ulBase, unsigned long ulTimer)參數(shù)參數(shù)ulBase:Timer模塊的基址,取值TIMERn_BASE(n為0、1、2或3) ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH 第19頁/共50頁通用定時器通用定時器(Timer)(Timer)庫函數(shù)中斷控制函數(shù)名函數(shù)名稱稱TimerIntDisable( )功能功能禁止Timer的中斷模塊原型原型void TimerIntDisable(unsigned long ulBase, unsigned long ulIntFlags) 參數(shù)參數(shù)ulBase:Tim

14、er模塊的基址,取值TIMERn_BASE(n為0、1、2或3) ulIntFlags:被禁止的中斷源,取值與中斷使能當中的參數(shù)ulIntFlags相同 返回返回無第20頁/共50頁通用定時器通用定時器(Timer)(Timer)庫函數(shù)中斷控制函數(shù)名函數(shù)名稱稱TimerIntEnable( )功能功能使能Timer的中斷原型原型void TimerIntEnable(unsigned long ulBase, unsigned long ulIntFlags) 參數(shù)參數(shù)ulBase:Timer模塊的基址,取值TIMERn_BASE(n為0、1、2或3) ulIntFlags:被使能的中斷源,應

15、當取下列值之一或者它們之間的任意“或運算”組合形式: TIMER_TIMA_TIMEOUT /TimerA超時中斷 TIMER_CAPA_MATCH /TimerA捕獲模式匹配中斷 TIMER_CAPA_EVENT /TimerA捕獲模式邊沿事件中斷 TIMER_TIMB_TIMEOUT /TimerB超時中斷 TIMER_CAPB_MATCH /TimerB捕獲模式匹配中斷 TIMER_CAPB_EVENT /TimerB捕獲模式邊沿事件中斷 TIMER_RTC_MATCH /RTC匹配中斷 第21頁/共50頁通用定時器通用定時器(Timer)(Timer)庫函數(shù)中斷控制函數(shù)名函數(shù)名稱稱Ti

16、merIntStatus( )功能功能獲取當前Timer的中斷狀態(tài)原型原型unsigned long TimerIntStatus(unsigned long ulBase, tBoolean bMasked) 參數(shù)參數(shù)ulBase:Timer模塊的基址,取值TIMERn_BASE(n為0、1、2或3) bMasked:一般取值true 返回返回中斷狀態(tài),數(shù)值與中斷使能表的參數(shù)ulIntFlags相同第22頁/共50頁通用定時器通用定時器(Timer)(Timer)庫函數(shù)中斷控制函數(shù)函數(shù)名稱名稱TimerIntClear( )功能功能清除Timer的中斷原型原型void TimerIntCle

17、ar(unsigned long ulBase, unsigned long ulIntFlags) 參數(shù)參數(shù)ulBase:Timer模塊的基址,取值TIMERn_BASE(n為0、1、2或3)ulIntFlags:被清除的中斷源,取值與中斷使能表中的參數(shù)相同 第23頁/共50頁通用定時器通用定時器(Timer)(Timer)實例:32位單次觸發(fā) 采用定時器timer0 的32位單次觸發(fā)模式,觸發(fā)條件是 檢測到KEY按下時;定時器裝置初值1.5秒;同時使能超時中斷,在中斷服務程序中翻轉 LED亮滅狀態(tài)。第24頁/共50頁通用定時器通用定時器(Timer)(Timer)實例:32位單次觸發(fā)#in

18、clude “systemInit.h” /工作目錄#include /系統(tǒng)目錄 必須添加/ 定義LED#define LED_PERIPH SYSCTL_PERIPH_GPIOF#define LED_PORT GPIO_PORTF_BASE#define LED_PIN GPIO_PIN_2/ 定義KEY#define KEY_PERIPH SYSCTL_PERIPH_GPIOE#define KEY_PORT GPIO_PORTE_BASE#define KEY_PIN GPIO_PIN_2 /PE2為KEY1鍵連接第25頁/共50頁通用定時器通用定時器(Timer)(Timer)實例:

19、32位單次觸發(fā) clockInit(); /時鐘初始化:晶振,6MHz SysCtlPeriEnable(LED_PERIPH); /使能LED所在的GPIO端口 GPIOPinTypeOut(LED_PORT, LED_PIN); /設置LED所在管腳為輸出 GPIOPinWrite(LED_PORT, LED_PIN, 1 2); /熄滅LED SysCtlPeriEnable(KEY_PERIPH); /使能KEY所在的GPIO端口 GPIOPinTypeIn(KEY_PORT, KEY_PIN); /設置KEY所在管腳為輸入 SysCtlPeriEnable(SYSCTL_PERIPH

20、_TIMER0); /使能Timer模塊 TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_OS); /配置 Timer0為32位單次觸發(fā)第26頁/共50頁通用定時器通用定時器(Timer)(Timer)實例:32位單次觸發(fā) TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); /使能Timer超時中斷 IntEnable(INT_TIMER0A); /使能Timer中斷 IntMasterEnable(); /使能處理器中斷 為什么 IntEnable(INT_TIMER0A),而不是IntEnable(IN

21、T_TIMER0)?第27頁/共50頁通用定時器通用定時器(Timer)(Timer)實例:32位單次觸發(fā) for (;) if (GPIOPinRead(KEY_PORT, KEY_PIN) = 0 x00) /如果復位時按下KEY SysCtlDelay(10 * (TheSysClock / 3000); /延時,消除按鍵抖動 while (GPIOPinRead(KEY_PORT, KEY_PIN) = 0 x00); /等待按鍵抬起 SysCtlDelay(10 * (TheSysClock / 3000); /延時,消除松鍵抖動 TimerLoadSet(TIMER0_BASE,

22、TIMER_A, 9000000UL); /設置Timer初值,定時1.5s TimerEnable(TIMER0_BASE, TIMER_A); /使能Timer計數(shù) GPIOPinWrite(LED_PORT, LED_PIN, 0 x00); /點亮LED,定時開始 第28頁/共50頁通用定時器通用定時器(Timer)(Timer)實例:32位單次觸發(fā)void Timer0A_ISR(void) unsigned char ucVal; unsigned long ulStatus; ulStatus = TimerIntStatus(TIMER0_BASE, true); /獲取當前中

23、斷狀態(tài) TimerIntClear(TIMER0_BASE, ulStatus); /清除全部中斷狀態(tài) if (ulStatus & TIMER_TIMA_TIMEOUT) /如果是超時中斷 ucVal = GPIOPinRead(LED_PORT, LED_PIN); /反轉LED GPIOPinWrite(LED_PORT, LED_PIN, ucVal); 第29頁/共50頁通用定時器通用定時器(Timer)(Timer)實例:32位周期觸發(fā) 采用定時器timer0 的32位周期觸發(fā)模式,觸發(fā)條件無;定時器裝置初值1.5秒;同時使能超時中斷,在中斷服務程序中翻轉 LED亮滅狀態(tài)。第30頁

24、/共50頁通用定時器通用定時器(Timer)(Timer)實例:32位周期觸發(fā)#include “systemInit.h” /工作目錄#include /系統(tǒng)目錄 必須添加/ 定義LED#define LED_PERIPH SYSCTL_PERIPH_GPIOF#define LED_PORT GPIO_PORTF_BASE#define LED_PIN GPIO_PIN_2第31頁/共50頁通用定時器通用定時器(Timer)(Timer)實例:32位周期觸發(fā) clockInit(); /時鐘初始化:晶振,6MHz SysCtlPeriEnable(LED_PERIPH); /使能LED所在

25、的GPIO端口 GPIOPinTypeOut(LED_PORT, LED_PIN); /設置LED所在管腳為輸出第32頁/共50頁通用定時器通用定時器(Timer)(Timer)實例:32位周期觸發(fā) SysCtlPeriEnable(SYSCTL_PERIPH_TIMER0); /使能Timer模塊 TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER); /配置Timer為32位周期定時器 TimerLoadSet(TIMER0_BASE, TIMER_A, 9000000UL); /設置Timer初值,定時1.5s 第33頁/共50頁通用定時器通

26、用定時器(Timer)(Timer)實例:32位周期觸發(fā) TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); /使能Timer超時中斷 IntEnable(INT_TIMER0A); /使能Timer中斷 IntMasterEnable(); /使能處理器中斷 TimerEnable(TIMER0_BASE, TIMER_A); /使能Timer計數(shù) 第34頁/共50頁通用定時器通用定時器(Timer)(Timer)實例:32位周期觸發(fā) void Timer0A_ISR(void) unsigned char ucVal; unsigned lon

27、g ulStatus; ulStatus = TimerIntStatus(TIMER0_BASE, true); /讀取中斷狀態(tài) TimerIntClear(TIMER0_BASE, ulStatus); /清除中斷狀態(tài),重要! if (ulStatus & TIMER_TIMA_TIMEOUT) /如果是Timer超時中斷 ucVal = GPIOPinRead(LED_PORT, LED_PIN); /反轉LED GPIOPinWrite(LED_PORT, LED_PIN, ucVal); 第35頁/共50頁看門狗概述 watchdog,全稱watchdog timer,中文名稱叫做“

28、看門狗”。1、一種定時器2、超時中斷可以引起系統(tǒng)重起信號(Reset Signal第36頁/共50頁看門狗概述 看門狗的作用就是當系統(tǒng)“跑飛”而進入死循環(huán)時,恢復系統(tǒng)的運行。第37頁/共50頁看門狗概述 設本系統(tǒng)程序完整運行一周期的時間是Tp,看門狗的定時周期為Ti,TiTp,在程序運行一周期后就“喂狗一次”,只要程序正常運行,定時器就不會溢出,若由于干擾等原因使系統(tǒng)不能喂狗,定時器將在Ti 時刻溢出,引發(fā)系統(tǒng)復位,使系統(tǒng)得以重新運行,從而起到監(jiān)控作用。第38頁/共50頁8962看門狗概述8962的看門狗定時器模塊有以下特性: p 帶可編程裝載寄存器的 32 位倒計數(shù)器 p 二次超時特性二次超

29、時特性 p 帶中斷屏蔽的可編程中斷產生邏輯 p 軟件跑飛時由鎖定寄存器提供保護 p 在調試過程中用戶可控制看門狗暫停在調試過程中用戶可控制看門狗暫停 第39頁/共50頁庫函數(shù)函數(shù)名稱函數(shù)名稱WatchdogEnable( )功能功能使能看門狗定時器原型原型void WatchdogEnable(unsigned long ulBase)參數(shù)參數(shù)ulBase:看門狗定時器模塊的基址,取值WATCHDOG_BASE第40頁/共50頁庫函數(shù)函數(shù)名稱函數(shù)名稱WatchdogResetEnable( )功能功能使能看門狗定時器的復位功能原型原型void WatchdogResetEnable(unsig

30、ned long ulBase)參數(shù)參數(shù)ulBase:看門狗定時器模塊的基址,取值WATCHDOG_BASE函數(shù)名稱函數(shù)名稱WatchdogResetDisable( )功能功能禁止看門狗定時器的復位功能原型原型void WatchdogResetDisable(unsigned long ulBase) 參數(shù)參數(shù)ulBase:看門狗定時器模塊的基址,取值WATCHDOG_BASE禁止看門狗復位功能時,看門狗可以作為一般定時器使用!第41頁/共50頁庫函數(shù)函數(shù)名稱函數(shù)名稱WatchdogStallEnable( )功能功能允許在調試過程中暫??撮T狗定時器原型原型void WatchdogSta

31、llEnable(unsigned long ulBase)參數(shù)參數(shù)ulBase:看門狗定時器模塊的基址,取值WATCHDOG_BASE第42頁/共50頁庫函數(shù)函數(shù)函數(shù)名稱名稱WatchdogReloadSet( )功能功能設置看門狗定時器的重裝值原型原型void WatchdogReloadSet(unsigned long ulBase, unsigned long ulLoadVal) 參數(shù)參數(shù)ulBase:看門狗定時器模塊的基址,取值WATCHDOG_BASE ulLoadVal:32位裝載值 第43頁/共50頁庫函數(shù)函數(shù)名稱函數(shù)名稱WatchdogLock( )功能功能使能看門狗定時器的鎖定機制原型原型void WatchdogLock(unsig

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論