16.3.2.2.3SysTick初始化函數(shù)
列表3:代碼清單17?3 SysTick初始化函數(shù)
左右滑動(dòng)查看完整內(nèi)容
/** *@brief啟動(dòng)系統(tǒng)滴答計(jì)時(shí)器 SysTick *@paramIT_frequency: 滴答計(jì)時(shí)器每秒的中斷次數(shù) *@retval無 */ voidSysTick_Init(uint32_t IT_frequency) { /* SystemCoreClock 在這里默認(rèn)為 200M * SystemCoreClock / 1000 1ms 中斷一次 * SystemCoreClock / 100000 10us 中斷一次 * SystemCoreClock / 1000000 1us 中斷一次 */ IT_Period =SystemCoreClock/ IT_frequency; uint32_t err =SysTick_Config (IT_Period); assert(err==0);//capture error }
SysTick_Init函數(shù)里面調(diào)用了SysTick_Config()這個(gè)固件庫函數(shù),通過設(shè)置該固件庫函數(shù)的形參,就決定了系統(tǒng)定時(shí)器經(jīng)過多少時(shí)間就產(chǎn)生一次中斷。
16.3.2.2.4SysTick中斷時(shí)間的計(jì)算
SysTick定時(shí)器的計(jì)數(shù)器是向下遞減計(jì)數(shù)的,計(jì)數(shù)一次的時(shí)間TDEC=1/CLKICLK,當(dāng)重裝載寄存器中的值VALUELOAD減到0的時(shí)候,產(chǎn)生中斷,可知中斷一次的時(shí)間TINT=VALUELOAD*TDEC=VALUELOAD/CLKICLK,其中CLKICLK=200MHZ。
如果設(shè)置VALUELOAD為200,那中斷一次的時(shí)間TINT=200/200M=1us。不過1us的中斷沒啥意義,整個(gè)程序的重心都花在進(jìn)出中斷上了,根本沒有時(shí)間處理其他的任務(wù)。
左右滑動(dòng)查看完整內(nèi)容
IT_Period =SystemCoreClock/ IT_frequency;//IT_frequency 為中斷的頻率 (單位為 Hz) SysTick_Config(IT_Period)//IT_Period 為中斷一次的時(shí)間 (單位為時(shí)鐘節(jié)拍數(shù))
SysTick_Config()的形參我們配置為 IT_Period。例如,當(dāng)IT_frequency為1000,IT_Period=SystemCoreClock/IT_frequency=200M/1000=200K,從剛剛分析我們知道這個(gè)形參的值最終是寫到重裝載寄存器LOAD中的,從而可知我們現(xiàn)在把SysTick定時(shí)器中斷一次的時(shí)間TINT=200k/200M=1ms。
16.3.2.2.5SysTick定時(shí)時(shí)間的計(jì)算
當(dāng)設(shè)置好中斷時(shí)間TINT后,我們可以設(shè)置一個(gè)變量t,用來記錄進(jìn)入中斷的次數(shù),那么變量t乘以中斷的時(shí)間TINT就可以計(jì)算出需要定時(shí)的時(shí)間。
16.3.2.2.6SysTick定時(shí)函數(shù)
現(xiàn)在我們定義一個(gè)延時(shí)函數(shù),類似官方的延時(shí)函數(shù)“R_BSP_SoftwareDelay”,形參為delay和unit,這兩個(gè)形參相乘就得出我們需要的延時(shí)時(shí)間 TSUM,因此進(jìn)入中斷的次數(shù) t=TSUM/TINT。
列表4:代碼清單17?4 SysTick延時(shí)函數(shù)
左右滑動(dòng)查看完整內(nèi)容
/** *@brief延時(shí)程序 *@paramdelay: 延時(shí)的單位時(shí)間 *@paramunit: 延時(shí)的單位 *@retval無 */ voidSysTick_Delay(uint32_t delay, sys_delay_units_t unit) { uint32_tSumTime= delay * unit;//計(jì)算總延時(shí)時(shí)間 (單位為時(shí)鐘節(jié)拍數(shù)) IT_nums =SumTime/IT_Period; while(IT_nums !=0); }
SysTick_Delay()中我們等待IT_nums為0,當(dāng)IT_nums為0的時(shí)候表示延時(shí)時(shí)間到。變量 IT_nums在中斷函數(shù)中遞減,即SysTick每進(jìn)一次中斷即TINT的時(shí)間IT_nums遞減一次。
16.3.2.2.7sys_delay_units_t
列表5:代碼清單17?5 sys_delay_units_t
左右滑動(dòng)查看完整內(nèi)容
typedefenum { SYS_DELAY_UNITS_SECONDS=200000000,///< Requested delay amount? →is?in?seconds SYS_DELAY_UNITS_MILLISECONDS?=?200000,?///< Requested delay amount? →is?in?milliseconds SYS_DELAY_UNITS_MICROSECONDS?=?200///< Requested delay amount? →is?in?microseconds } sys_delay_units_t;
16.3.2.2.8SysTick中斷服務(wù)函數(shù)
列表6:代碼清單17?6 SysTick中斷服務(wù)函數(shù)
左右滑動(dòng)查看完整內(nèi)容
/** *@briefSysTick 的中斷服務(wù)函數(shù) *@param無 *@retval無 */ externvoidSysTick_Handler(void);//需要先 extern 聲明一下避免編譯器警告 voidSysTick_Handler(void) { if(IT_nums !=0x00) { IT_nums--; } }
16.3.2.2.9hal_entry入口函數(shù)
列表7:
代碼清單17?7由main函數(shù)轉(zhuǎn)入的hal_entry函數(shù)
左右滑動(dòng)查看完整內(nèi)容
voidhal_entry(void) { /*TODO:add your own code here */ R_BSP_PinAccessEnable ();//啟用對 PFS 寄存器的訪問, 因?yàn)楹竺鎸?IO 口都用 BSP 內(nèi)聯(lián)函數(shù) SysTick_Init(1000);//初始化系統(tǒng)時(shí)鐘, 設(shè)置中斷頻率為 1000Hz while(1) { R_BSP_PinWrite (LED_G, BSP_IO_LEVEL_LOW);//點(diǎn)亮綠色 LED SysTick_Delay(1, SYS_DELAY_UNITS_SECONDS);//延時(shí) 1s R_BSP_PinWrite (LED_G, BSP_IO_LEVEL_HIGH);//熄滅綠色 LED SysTick_Delay(1, SYS_DELAY_UNITS_SECONDS);//延時(shí) 1s } #ifBSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter(); #endif }
主函數(shù)中初始化了SysTick,然后在一個(gè)while循環(huán)中以1s的頻率讓LED閃爍。
-
中斷
+關(guān)注
關(guān)注
5文章
911瀏覽量
43372 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3349瀏覽量
121137 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4401瀏覽量
66451 -
Systick
+關(guān)注
關(guān)注
0文章
66瀏覽量
13816
原文標(biāo)題:SysTick初始化函數(shù)、定時(shí)函數(shù)、延時(shí)函數(shù)、中斷服務(wù)函數(shù)——瑞薩RA系列FSP庫開發(fā)實(shí)戰(zhàn)指南(42)
文章出處:【微信號(hào):瑞薩嵌入式小百科,微信公眾號(hào):瑞薩嵌入式小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
RT-Thread自動(dòng)初始化詳解

自動(dòng)初始化機(jī)制原理詳解

請問哪個(gè)函數(shù)初始化了SysTick_Handler中斷?
STM32外部中斷端口初始化函數(shù)
配置SYSTICK
中斷初始化和中斷函數(shù)的代碼示例
USART初始化結(jié)構(gòu)體詳解
SEED-DEC2812函數(shù)
CC2530中斷初始化和中斷函數(shù)

STM32—關(guān)于SYSTICK系統(tǒng)時(shí)鐘的詳解及學(xué)習(xí)筆記

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

OP-TEE的內(nèi)核初始化函數(shù)調(diào)用

評論