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

下載本文檔

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

文檔簡介

1、ARM通用定時器解析回顧教學內容1、定時器概述2、定時器庫函數3、定時器編程實例4、看門狗概述5、看門狗應用回顧隔2秒(在循環(huán)中使用延時函數實現),向PC機發(fā)送“hi, com test ok!For(:) send(“hi, com test ok!); delay(2S)回顧 /初始化 SysTickPeriodSet(12000000UL); SysTickIntEnable(); IntMasterEnable(); SysTickEnable(); /中斷效勞程序void SysTick_ISR(void) /send “com test ok 注意:更改中斷向量表 startup_

2、ewarm.c 通用定時器(Timer) 8962集成有 4 個通用定時器General-Purpose Timer Module,GPTM,分別稱為 Timer0、Timer1、Timer2 和 Timer3。 每個 Timer 模塊都可以配置為一個 32 位定時器或一個 32 位 RTC 定時器用于捕獲;也可以拆分為兩個16 位的定時/計數器 TimerA 和 TimerB。 每個 Timer 模塊可以被配置為獨立運行的定時器、事件計數器或 PWM。Timer 總體特性通用定時器(Timer)Timer 功能構造圖通用定時器(Timer)關于定時器的幾個概念增計數與減計數形式以定時1000

3、S 為例,假設8962每秒 計數一次,如何實現實時?通用定時器(Timer)關于定時器的幾個概念硬件定時器與軟件定時器通用定時器(Timer)關于定時器的幾個概念單次觸發(fā)與周期觸發(fā)連續(xù)的單次觸發(fā)等同于周期觸發(fā)!通用定時器(Timer)關于定時器的幾個概念16位定時器與32位定時器16位定時器 最大初值 0 xffff32位定時器 最大初值 0 xffff ffff 兩個16位定時器級聯為32位定時器,而32位定時器可以拆分為兩個16位定時器!1通用定時器(Timer)關于定時器的幾個概念16位輸入邊沿計數捕獲Count 用于計數, 信號的頻率是多少?通用定時器(Timer)關于定時器的幾個概念

4、16位輸入邊沿定時捕獲信號的頻率是多少?或者說它的周期是多少?通用定時器(Timer)關于定時器的幾個概念16位PWM16位PWM的用處在哪里?通用定時器(Timer) #define SysCtlPeriEnable SysCtlPeripheralEnable SysCtlPeriEnable(SYSCTL_PERIPH_TIMERn); Timer 庫函數使能通用定時器(Timer)Timer 庫函數 配置void TimerConfigure(unsigned long ulBase, unsigned long ulConfig)ulConfig:Timer模塊的配置 在32位形式下

5、應當取以下值之一: 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, TIMER_CFG_32_BIT_OS); 通用定時器(Timer)Timer 庫函數 配置void TimerConfigure(unsigned long ulBase, unsigned long ulConfig)在16位形式下,配置 TimerA 的方法是參數 ulConfig 先取

6、值 TIMER_CFG_16_BIT_PAIR 再與以下值之一進展“或運算的組合形式: TIMER_CFG_A_ONE_SHOT /TimerA為單次觸發(fā)定時器 TIMER_CFG_A_PERIODIC /TimerA為周期定時器 TIMER_CFG_A_CAP_COUNT /TimerA為邊沿事件計數器 TIMER_CFG_A_CAP_TIME /TimerA為邊沿事件定時器 TIMER_CFG_A_PWM /TimerA為PWM輸出 在Timer0當中,配置TimerA為單次觸發(fā)定時器不配置TimerB TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BI

7、T_PAIR | TIMER_CFG_A_ONE_SHOT); 假設要求配置TimerB,又該如何處置?通用定時器(Timer)Timer 庫函數 配置void TimerConfigure(unsigned long ulBase, unsigned long ulConfig)配置 TimerB 的方法是參數 ulConfig 先取值 TIMER_CFG_16_BIT_PAIR 再與以下值之一進展“或運算的組合形式: TIMER_CFG_B_ONE_SHOT /TimerB為單次觸發(fā)定時器 TIMER_CFG_B_PERIODIC /TimerB為周期定時器 TIMER_CFG_B_CAP

8、_COUNT /TimerB為邊沿事件計數器 TIMER_CFG_B_CAP_TIME /TimerB為邊沿事件定時器 TIMER_CFG_B_PWM /TimerB為PWM輸出 在Timer0當中,配置TimerB為單次觸發(fā)定時器不配置TimerA TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_B_ONE_SHOT); 通用定時器(Timer)函數名稱TimerLoadSet( )功能設置Timer的裝載值原型void TimerLoadSet(unsigned long ulBase, unsigned long

9、 ulTimer, unsigned long ulValue)參數ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH ulValue:32位裝載值(32位模式)或16位裝載值(16位模式)庫函數裝載初值通用定時器(Timer)TimerLoadSet(TIMER0_BASE, TIMER_A, 9000000UL); /設置32位Timer0初值,定時1.5s 主頻6M 注意: Timer 模塊的功能在總體上可以分成 32 位形式和 16 位形式兩大類。在 32 位形式下,對 Timer 的各項操作,如裝載初值、運行控制、中斷控制等,都用對 Timer

10、A的操作作為總體上的 32 位控制。 庫函數裝載初值通用定時器(Timer)庫函數運行控制函數名稱TimerEnable( )功能使能Timer計數(即啟動Timer)原型void TimerEnable(unsigned long ulBase, unsigned long ulTimer)參數ulBase:Timer模塊的基址,取值TIMERn_BASE(n為0、1、2或3) ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH 函數名稱TimerDisable( )功能禁制Timer計數(即停止Timer)原型void TimerDisable(un

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

12、或3) ulIntFlags:被禁止的中斷源,取值與中斷使能當中的參數ulIntFlags相同 返回無通用定時器(Timer)庫函數中斷控制函數名稱TimerIntEnable( )功能使能Timer的中斷原型void TimerIntEnable(unsigned long ulBase, unsigned long ulIntFlags) 參數ulBase:Timer模塊的基址,取值TIMERn_BASE(n為0、1、2或3) ulIntFlags:被使能的中斷源,應當取下列值之一或者它們之間的任意“或運算”組合形式: TIMER_TIMA_TIMEOUT /TimerA超時中斷 TIME

13、R_CAPA_MATCH /TimerA捕獲模式匹配中斷 TIMER_CAPA_EVENT /TimerA捕獲模式邊沿事件中斷 TIMER_TIMB_TIMEOUT /TimerB超時中斷 TIMER_CAPB_MATCH /TimerB捕獲模式匹配中斷 TIMER_CAPB_EVENT /TimerB捕獲模式邊沿事件中斷 TIMER_RTC_MATCH /RTC匹配中斷 通用定時器(Timer)庫函數中斷控制函數名稱TimerIntStatus( )功能獲取當前Timer的中斷狀態(tài)原型unsigned long TimerIntStatus(unsigned long ulBase, tBo

14、olean bMasked) 參數ulBase:Timer模塊的基址,取值TIMERn_BASE(n為0、1、2或3) bMasked:一般取值true 返回中斷狀態(tài),數值與中斷使能表的參數ulIntFlags相同通用定時器(Timer)庫函數中斷控制函數名稱TimerIntClear( )功能清除Timer的中斷原型void TimerIntClear(unsigned long ulBase, unsigned long ulIntFlags) 參數ulBase:Timer模塊的基址,取值TIMERn_BASE(n為0、1、2或3)ulIntFlags:被清除的中斷源,取值與中斷使能表中的

15、參數相同 通用定時器(Timer)實例:32位單次觸發(fā) 采用定時器timer0 的32位單次觸發(fā)形式,觸發(fā)條件是 檢測到KEY按下時;定時器裝置初值秒;同時使能超時中斷,在中斷效勞程序中翻轉 LED亮滅狀態(tài)。通用定時器(Timer)實例:32位單次觸發(fā)#include “systemInit.h /工作目錄#include /系統目錄 必須添加/ 定義LED#define LED_PERIPH SYSCTL_PERIPH_GPIOF#define LED_PORT GPIO_PORTF_BASE#define LED_PIN GPIO_PIN_2/ 定義KEY#define KEY_PERIP

16、H SYSCTL_PERIPH_GPIOE#define KEY_PORT GPIO_PORTE_BASE#define KEY_PIN GPIO_PIN_2 /PE2為KEY1鍵連接通用定時器(Timer)實例:32位單次觸發(fā) clockInit(); /時鐘初始化:晶振,6MHz SysCtlPeriEnable(LED_PERIPH); /使能LED所在的GPIO端口 GPIOPinTypeOut(LED_PORT, LED_PIN); /設置LED所在管腳為輸出 GPIOPinWrite(LED_PORT, LED_PIN, 1 2); /熄滅LED SysCtlPeriEnable(

17、KEY_PERIPH); /使能KEY所在的GPIO端口 GPIOPinTypeIn(KEY_PORT, KEY_PIN); /設置KEY所在管腳為輸入 SysCtlPeriEnable(SYSCTL_PERIPH_TIMER0); /使能Timer模塊 TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_OS); /配置 Timer0為32位單次觸發(fā)通用定時器(Timer)實例:32位單次觸發(fā) TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); /使能Timer超時中斷 IntEnable(INT_TIMER

18、0A); /使能Timer中斷 IntMasterEnable(); /使能處理器中斷 為什么 IntEnable(INT_TIMER0A),而不是IntEnable(INT_TIMER0)?通用定時器(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

19、(10 * (TheSysClock / 3000); /延時,消除松鍵抖動 TimerLoadSet(TIMER0_BASE, TIMER_A, 9000000UL); /設置Timer初值,定時 TimerEnable(TIMER0_BASE, TIMER_A); /使能Timer計數 GPIOPinWrite(LED_PORT, LED_PIN, 0 x00); /點亮LED,定時開場 通用定時器(Timer)實例:32位單次觸發(fā)void Timer0A_ISR(void) unsigned char ucVal; unsigned long ulStatus; ulStatus = T

20、imerIntStatus(TIMER0_BASE, true); /獲取當前中斷狀態(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); 通用定時器(Timer)實例:32位周期觸發(fā) 采用定時器timer0 的32位周期觸發(fā)形式,觸發(fā)條件無;定時器裝置初值秒;同時使能超時中斷,在中斷效勞程序

21、中翻轉 LED亮滅狀態(tài)。通用定時器(Timer)實例:32位周期觸發(fā)#include “systemInit.h /工作目錄#include /系統目錄 必須添加/ 定義LED#define LED_PERIPH SYSCTL_PERIPH_GPIOF#define LED_PORT GPIO_PORTF_BASE#define LED_PIN GPIO_PIN_2通用定時器(Timer)實例:32位周期觸發(fā) clockInit(); /時鐘初始化:晶振,6MHz SysCtlPeriEnable(LED_PERIPH); /使能LED所在的GPIO端口 GPIOPinTypeOut(LED_

22、PORT, LED_PIN); /設置LED所在管腳為輸出通用定時器(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 通用定時器(Timer)實例:32位周期觸發(fā) TimerIntEnable(TIMER0_BASE, TIMER_TIMA_T

23、IMEOUT); /使能Timer超時中斷 IntEnable(INT_TIMER0A); /使能Timer中斷 IntMasterEnable(); /使能處理器中斷 TimerEnable(TIMER0_BASE, TIMER_A); /使能Timer計數 通用定時器(Timer)實例:32位周期觸發(fā) void Timer0A_ISR(void) unsigned char ucVal; unsigned long ulStatus; ulStatus = TimerIntStatus(TIMER0_BASE, true); /讀取中斷狀態(tài) TimerIntClear(TIMER0_BAS

24、E, ulStatus); /去除中斷狀態(tài),重要! if (ulStatus & TIMER_TIMA_TIMEOUT) /假設是Timer超時中斷 ucVal = GPIOPinRead(LED_PORT, LED_PIN); /反轉LED GPIOPinWrite(LED_PORT, LED_PIN, ucVal); 看門狗概述 watchdog,全稱watchdog timer,中文名稱叫做“看門狗。1、一種定時器2、超時中斷可以引起系統重起信號Reset Signal看門狗概述 看門狗的作用就是當系統“跑飛而進入死循環(huán)時,恢復系統的運行。看門狗概述 設本系統程序完好運行一周期的時間是T

25、p,看門狗的定時周期為Ti,TiTp,在程序運行一周期后就“喂狗一次,只要程序正常運行,定時器就不會溢出,假設由于干擾等原因使系統不能喂狗,定時器將在Ti 時刻溢出,引發(fā)系統復位,使系統得以重新運行,從而起到監(jiān)控作用。8962看門狗概述8962的看門狗定時器模塊有以下特性: 帶可編程裝載存放器的 32 位倒計數器 二次超時特性 帶中斷屏蔽的可編程中斷產生邏輯 軟件跑飛時由鎖定存放器提供保護 在調試過程中用戶可控制看門狗暫停 庫函數函數名稱WatchdogEnable( )功能使能看門狗定時器原型void WatchdogEnable(unsigned long ulBase)參數ulBase:

26、看門狗定時器模塊的基址,取值WATCHDOG_BASE庫函數函數名稱WatchdogResetEnable( )功能使能看門狗定時器的復位功能原型void WatchdogResetEnable(unsigned long ulBase)參數ulBase:看門狗定時器模塊的基址,取值WATCHDOG_BASE函數名稱WatchdogResetDisable( )功能禁止看門狗定時器的復位功能原型void WatchdogResetDisable(unsigned long ulBase) 參數ulBase:看門狗定時器模塊的基址,取值WATCHDOG_BASE制止看門狗復位功能時,看門狗可以作

27、為一般定時器使用!庫函數函數名稱WatchdogStallEnable( )功能允許在調試過程中暫??撮T狗定時器原型void WatchdogStallEnable(unsigned long ulBase)參數ulBase:看門狗定時器模塊的基址,取值WATCHDOG_BASE庫函數函數名稱WatchdogReloadSet( )功能設置看門狗定時器的重裝值原型void WatchdogReloadSet(unsigned long ulBase, unsigned long ulLoadVal) 參數ulBase:看門狗定時器模塊的基址,取值WATCHDOG_BASE ulLoadVal:32位裝載值 庫函數函數名稱WatchdogLock( )功能使能看門狗定時器的鎖定機制原型void WatchdogLock(unsigned long ulBase) 參數ulBase:看門狗定時器模塊的基址,取值WATCHD

溫馨提示

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

評論

0/150

提交評論