www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]上圖是LPC1114系統(tǒng)滴答定時器(SysTick)的結(jié)構(gòu)圖。系統(tǒng)滴答定時器位于Cortex-M0內(nèi)核中,也就是說,不論是LPC1114,還是其他的Cortex-M0內(nèi)核單片機,都有這個系統(tǒng)定時器。其存在的主要目的是為嵌入式操作系統(tǒng)提供100

上圖是LPC1114系統(tǒng)滴答定時器(SysTick)的結(jié)構(gòu)圖。系統(tǒng)滴答定時器位于Cortex-M0內(nèi)核中,也就是說,不論是LPC1114,還是其他的Cortex-M0內(nèi)核單片機,都有這個系統(tǒng)定時器。其存在的主要目的是為嵌入式操作系統(tǒng)提供100Hz(即10ms)的定時節(jié)拍。當然,也可以做為其它的普通定時等其他用途。下面是LPC1114用戶手冊上列舉出的一些用途,你可以了解了解。

可編程設(shè)置頻率的RTOS 定時器(例如100 Hz),調(diào)用一個SysTick 服務(wù)程序。

用于核時鐘的高速報警定時器。

簡單計數(shù)器。軟件可使用它測量時間 (如:完成任務(wù)所需時間、已使用時間)。

基于丟失 / 命中期限控制的內(nèi)部時鐘源。控制和狀態(tài)寄存器中的COUNTFLAG 位域,
可用于決定一個動作是否在設(shè)定的期限內(nèi)完成,作為動態(tài)時鐘管理控制環(huán)的一部分。

一、寄存器

系統(tǒng)定時器使用起來非常簡單。它一共有4個寄存器:SYST_CSR、SYST_RVR、SYST_CVR、SYST_CALIB。定義如下所示:

4個寄存器中,校準寄存器SYST_CALIB不用我們考慮,出廠前就配置好了。這時,就剩下3個寄存器了。一共需要配置3個寄存器就可以完成工作的模塊,你想想會很難使用嗎?英文不好的同學(xué),請看下面的寄存器翻譯:

SYST_CSR寄存器,就是系統(tǒng)定時器控制和狀態(tài)寄存器

SYST_RVR寄存器,就是系統(tǒng)定時器重載值寄存器

SYST_CVR寄存器,就是系統(tǒng)定時器當前值寄存器

1.SYST_CSR寄存器

翻譯成中文的:

CSR寄存器用到的位有4個,bit0用于是否開啟定時器,bit1用于是否產(chǎn)生中斷,bit2用于選擇定時器的時鐘源是等于主時鐘還是等于主時鐘的一半,bit16是定時器的狀態(tài)。

2.SYST_RVR寄存器

翻譯成中文的:

RVR寄存器用到bit0~23,即24位數(shù),這個值是定時器倒計時的初值,打開定時器以后,值會從此值倒計時到0,因為倒計時到0以后,又會從此值開始倒計時,所以定義里面叫這個寄存器位重載值。

3.SYST_CVR寄存器

翻譯成中文:

CVR寄存器用到bit0~23,即24位數(shù),這是一個狀態(tài)寄存器,當定時器開始運作,這個值在不斷地變化,從RVR寄存器獲取初值以后,倒計時到0.

二、如何調(diào)用Keil自帶的系統(tǒng)定時器函數(shù)

系統(tǒng)自帶的Systick函數(shù),由CMSIS(關(guān)于什么是CMSIS,去百度搜吧)提供,位于core_cm0.h文件,你可以在LPC1114工程中,如下地方找到:

雙擊上圖紅色框內(nèi)的文件名稱,打開對應(yīng)文件。在core_cm0.h文件的最底部,有一個函數(shù),如下所示:

__STATIC_INLINEuint32_tSysTick_Config(uint32_tticks){if((ticks-1)>SysTick_LOAD_RELOAD_Msk)return(1);/*Reloadvalueimpossible*/SysTick->LOAD=ticks-1;/*setreloadregister*/NVIC_SetPriority(SysTick_IRQn,(1<<__NVIC_PRIO_BITS)-1);/*setPriorityforSystickInterrupt*/SysTick->VAL=0;/*LoadtheSysTickCounterValue*/SysTick->CTRL=SysTick_CTRL_CLKSOURCE_Msk|SysTick_CTRL_TICKINT_Msk|SysTick_CTRL_ENABLE_Msk;/*EnableSysTickIRQandSysTickTimer*/return(0);/*Functionsuccessful*/}

此函數(shù)就是CMSIS提供的系統(tǒng)定時器控制函數(shù)SysTick_Config()。在使用的時候,可以直接調(diào)用,函數(shù)有一個參數(shù)ticks。由函數(shù)內(nèi)部的語句
“SysTick->LOAD = ticks – 1;”知道,ticks就是LOAD值,即重載值,表示兩次中斷的計數(shù)。

例如,要產(chǎn)生10ms的中斷,可以在程序中如下調(diào)用函數(shù):

Systick_Config(SystemCoreClock/100);

函數(shù)參數(shù)中的SystemCoreClock是當前主頻的值,假如現(xiàn)在的主頻是50MHz,SystemCoreClock就是50 000 000 ,50 000 000 /100=500 000。我們把參數(shù)帶進去以后,LOAD=499 999,也就是說,定時器開始運行后,定時器的值會從499 999遞減到0,進入中斷函數(shù),然后再次從499 999 遞減到0,如此循環(huán)。

這時候,你心中會有一個大大的問號:“為什么從499 999遞減到0就是10ms?”接下來,瑞生給你解答,其實很簡單,不信聽我說。

定時器運行,要知道“為什么從499 999遞減到0就是10ms”,只要知道定時器每遞減一個值需要多長時間就可以了。知道每遞減一個值需要多長時間,那么遞減500 000下,需要多長時間,就知道了。

要知道每遞減一個值需要多長時間,就需要知道當前定時器運行的時鐘是多少。由寄存器CSR知道,定時器的時鐘有兩種,一種是等于主頻,一種是等于主頻的二分之一,由CSR寄存器中的bit2決定。

函數(shù)中用到的寄存器名稱和我們手冊上給出的名稱不太一樣,但是你要知道,名稱就是個代號,實際調(diào)用的其實是名稱背后的寄存器地址。函數(shù)中LOAD就是我們之前說的RSR,VAL就是我們之前說的CVR,CTRL就是我們之前說的CSR。

函數(shù)中,對控制寄存器的bit0 bit1 bit2都置1,對照前面的寄存器定義可知,時鐘設(shè)置為等于主頻,打開系統(tǒng)定時器中斷,允許定時器運行。

我們知道了時鐘,就知道定時器每遞減一個值需要的時間了,即:1/SystemCoreClock 秒,換算成毫秒即:(1/SystemCoreClock)*1000=1000/SystemCoreClock毫秒,即每遞減一個值,耗時1000/SystemCoreClock毫秒。所以如果要使得10ms定時,即10/(1000/SystemCoreClock)=SystemCoreClock/100,回頭看看前面定時10ms的參數(shù),是不是這個值呢。以此類推,需要定時多長時間,你可以自己算一個參數(shù)帶進去了,需要注意的是,LOAD值是個24位數(shù),帶進去的數(shù)不要超過24位數(shù)的最大值。還有一個需要注意的地方,就是LOAD值最小255,當你給LOAD值帶進去小于255值,LOAD會自動變成255。

三、系統(tǒng)定時器中斷函數(shù)怎么寫

系統(tǒng)定時器的中斷函數(shù)名稱如下所示:

voidSysTick_Handler(void){}

有的童鞋會問,函數(shù)名稱可以自己改嗎?答案是不可以改,非要自己改一個,需要一定的步驟。接下來瑞生給你解答。

打開一個工程,雙擊startup_LPC11xx.h文件打開

在第74行,你可以看到系統(tǒng)定時器中斷函數(shù)的名稱,如下所示:

你不僅可以看到系統(tǒng)定時器中斷函數(shù)的名稱,所有的中斷函數(shù)的名稱,都已經(jīng)寫好了,在用其它模塊的中斷時,到這個地方找就對了。還有前面那個是否可以自己改的問題,你把這個地方的名稱改了,就可以在.c文件中使用你修改后的名稱了,不過為了程序的移植性統(tǒng)一性閱讀性,瑞生建議大家不要修改。

四、寫一個毫秒延時函數(shù)delay_ms()

1.自己配置寄存器(假設(shè)當前主頻為50MHz)

staticvolatileuint32_tTimeTick=0;voidSysTick_Handler(void)//中斷函數(shù){TimeTick++;}voiddelay_ms(uint32_tms)//參數(shù)最大帶入671{SysTick->LOAD=25000*ms-1;SysTick->VAL=0;SysTick->CTRL|=((1<<1)|(1<<0));//開定時器,開中斷while(!TimeTick);TimeTick=0;SysTick->CTRL=0;//關(guān)定時器}

為什么主頻為50MHz時,上面函數(shù)中與ms乘的數(shù)是25000?我在上面已經(jīng)講過了,這里我再講一次,非常簡單哦。CTRL寄存器bit2默認是0,也就是說默認的系統(tǒng)定

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉