第16章
SysTick——系統(tǒng)定時(shí)器
本章參考資料
《DEFINITIVE GUIDE TO ARM CORTEX-M23 AND CORTEX-M33 PROCESSORS》-11.2章節(jié)SysTick Timer,《Cortex-M3內(nèi)核編程手冊》-4.5章節(jié)SysTick Timer(STK),和4.48章節(jié)SHPRx,這個(gè)章節(jié)有SysTick的簡介和寄存器的詳細(xì)描述。因?yàn)镾ysTick是屬于CORTEX-M33內(nèi)核的外設(shè),有關(guān)寄存器的定義和部分庫函數(shù)都在core_cm33.h這個(gè)頭文件中實(shí)現(xiàn)。所以學(xué)習(xí)SysTick的時(shí)候可以參考這兩個(gè)資料,一個(gè)是文檔,一個(gè)是源碼。
16.1
SysTick系統(tǒng)滴答定時(shí)器簡介
SysTick—系統(tǒng)定時(shí)器是屬于CM33內(nèi)核中的一個(gè)外設(shè),內(nèi)嵌在NVIC中。系統(tǒng)定時(shí)器是一個(gè)24bit的向下遞減的計(jì)數(shù)器,計(jì)數(shù)器每計(jì)數(shù)一次的時(shí)間為 1/SYSCLK,一般我們設(shè)置系統(tǒng)時(shí)鐘SYSCLK等于 200MHz。當(dāng)重裝載數(shù)值寄存器的值遞減到0的時(shí)候,系統(tǒng)定時(shí)器就產(chǎn)生一次中斷,以此循環(huán)往復(fù)。
因?yàn)镾ysTick是屬于CM33內(nèi)核的外設(shè),所以所有基于CM33內(nèi)核的單片機(jī)都具有這個(gè)系統(tǒng)定時(shí)器,使得軟件在CM33單片機(jī)中可以很容易的移植。系統(tǒng)定時(shí)器一般用于操作系統(tǒng),用于產(chǎn)生時(shí)基,維持操作系統(tǒng)的心跳。
16.2
SysTick寄存器介紹
SysTick—系統(tǒng)定時(shí)器有4個(gè)寄存器,簡要介紹如下。在使用SysTick產(chǎn)生定時(shí)的時(shí)候,只需要配置前三個(gè)寄存器,最后一個(gè)校準(zhǔn)寄存器不需要使用。
表1:表17?1 SysTick寄存器匯總
表2:表17?2 SysTick控制及狀態(tài)寄存器
表3:表17?3 SysTick重裝載數(shù)值寄存器
表4:表17?4 SysTick當(dāng)前數(shù)值寄存器
表5:表17?5 SysTick校準(zhǔn)數(shù)值寄存器
系統(tǒng)定時(shí)器的校準(zhǔn)數(shù)值寄存器在定時(shí)實(shí)驗(yàn)中不需要用到。本章不會(huì)詳細(xì)講解該寄存器,感興趣的讀者可自行研究。
16.3
使用SysTick定時(shí)實(shí)驗(yàn)
利用SysTick產(chǎn)生1s的時(shí)基,LED以1s的頻率閃爍。
16.3.1
硬件設(shè)計(jì)
SysTick屬于單片機(jī)內(nèi)部的外設(shè),不需要額外的硬件電路,剩下的只需一個(gè)LED燈即可。
16.3.2
軟件設(shè)計(jì)
這里只講解核心的部分代碼,有些變量的設(shè)置,頭文件的包含等并沒有涉及到,完整的代碼請(qǐng)參考本章配套的工程。我們創(chuàng)建了兩個(gè)文件:bsp_SysTick.c和bsp_SysTick.h文件用來存放 SysTick驅(qū)動(dòng)程序,中斷服務(wù)函數(shù)及相關(guān)宏定義。
16.3.2.1
編程要點(diǎn)
設(shè)置重加載寄存器的值
清除當(dāng)前數(shù)值寄存器的值
配置控制與狀態(tài)寄存器
16.3.2.2
代碼分析
SysTick屬于內(nèi)核的外設(shè),有關(guān)的寄存器定義和庫函數(shù)都在內(nèi)核相關(guān)的庫文件core_cm33.h中。
16.3.2.2.1SysTick配置庫函
列表1:代碼清單17?1 SysTick配置庫函數(shù)
左右滑動(dòng)查看完整內(nèi)容
__STATIC_INLINEuint32_tSysTick_Config(uint32_tticks) { // 不可能的重加載值,超出范圍 if((ticks -1UL) > SysTick_LOAD_RELOAD_Msk) { return(1UL); } // 設(shè)置重加載寄存器 SysTick->LOAD = (uint32_t)(ticks -1UL); // 設(shè)置中斷優(yōu)先級(jí) NVIC_SetPriority(SysTick_IRQn, (1UL<< __NVIC_PRIO_BITS) -?1UL); // 設(shè)置當(dāng)前數(shù)值寄存器 SysTick->VAL =0UL; // 設(shè)置系統(tǒng)定時(shí)器的時(shí)鐘源為 ICLK=200M // 使能系統(tǒng)定時(shí)器中斷 // 使能定時(shí)器 SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; return(0UL); }
用固件庫編程的時(shí)候我們只需要調(diào)用庫函數(shù) SysTick_Config()即可,形參ticks用來設(shè)置重加載寄存器的值,最大不能超過重加載寄存器的值224,當(dāng)重加載寄存器的值遞減到0的時(shí)候產(chǎn)生中斷,然后重加載寄存器的值又重新被裝載并再次遞減計(jì)數(shù),以此循環(huán)往復(fù)。緊隨其后設(shè)置好中斷優(yōu)先級(jí),最后配置系統(tǒng)定時(shí)器的時(shí)鐘等于ICLK=200M,使能定時(shí)器和定時(shí)器中斷,這樣系統(tǒng)定時(shí)器就配置好了,一個(gè)庫函數(shù)搞定。
SysTick_Config()庫函數(shù)主要配置了SysTick中的三個(gè)寄存器:LOAD、VAL和CTRL,有關(guān)具體
的部分看代碼注釋即可。
16.3.2.2.2配置SysTick中斷優(yōu)先級(jí)
SysTick_Config()庫函數(shù)主要配置了SysTick中的三個(gè)寄存器:LOAD、VAL和CTRL,有關(guān)具體的部分看代碼注釋即可。其中還調(diào)用了函數(shù)庫函數(shù) NVIC_SetPriority()來配置系統(tǒng)定時(shí)器的中斷優(yōu)先級(jí),該庫函數(shù)也在core_cm33.h中定義,原型如下:
列表2:代碼清單17?2 NVIC中斷優(yōu)先級(jí)配置函數(shù)
左右滑動(dòng)查看完整內(nèi)容
__STATIC_INLINEvoid__NVIC_SetPriority(IRQn_Type IRQn,uint32_tpriority) { if((int32_t)(IRQn) >=0) { NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U?- __NVIC_ →PRIO_BITS)) & (uint32_t)0xFFUL); } else { SCB->SHPR[(((uint32_t)IRQn) &0xFUL)-4UL] = (uint8_t)((priority < →(8U?- __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); } }
-
單片機(jī)
+關(guān)注
關(guān)注
6071文章
45265瀏覽量
660755 -
內(nèi)核
+關(guān)注
關(guān)注
4文章
1431瀏覽量
42289 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3349瀏覽量
121142 -
Systick
+關(guān)注
關(guān)注
0文章
66瀏覽量
13816
原文標(biāo)題:SysTick系統(tǒng)定時(shí)器——瑞薩RA系列FSP庫開發(fā)實(shí)戰(zhàn)指南(41)
文章出處:【微信號(hào):瑞薩嵌入式小百科,微信公眾號(hào):瑞薩嵌入式小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
系統(tǒng)滴答定時(shí)器SYSTICK
STM32 SysTick定時(shí)器簡介
對(duì)于Systick滴答定時(shí)器的理解
最簡單的滴答定時(shí)器程序簡介
SysTick—系統(tǒng)定時(shí)器
stm32的systick(滴答定時(shí)器)實(shí)現(xiàn)精準(zhǔn)延時(shí)

利用systick實(shí)現(xiàn)1s定時(shí)

STM32入門(十五)----SysTick系統(tǒng)定時(shí)器

STM32F4: Systick滴答定時(shí)器-延時(shí)函數(shù)講解(五)

Systick定時(shí)器幾個(gè)簡單的函數(shù)簡介

SysTick 定時(shí)器

STM32筆記(七)---Systick系統(tǒng)定時(shí)器

初學(xué)stm32-Systick滴答時(shí)鐘定時(shí)

【STM32】SysTick滴答定時(shí)器(delay延時(shí)函數(shù)講解)

評(píng)論