就在前一段時(shí)間,有人突然問(wèn)我SysTick_Handler(void)這個(gè)定時(shí)器中斷處理函數(shù)是怎么定義的?根據(jù)以往的經(jīng)驗(yàn),我感覺(jué)在底層應(yīng)該會(huì)有一個(gè)類似于函數(shù)聲明的東西的存在,但是往下跟程序的話,一直都沒(méi)有找到相應(yīng)的定義或者聲明,那么究竟SysTick_Handler這個(gè)函數(shù)怎么來(lái)的呢?是不是可以人為的做修改呢?給我的第一感覺(jué)是,肯定是可以做修改的,畢竟只是一個(gè) 函數(shù) 的名字而已,于是就翻看LPC1114的數(shù)據(jù)手冊(cè),結(jié)合網(wǎng)上的一些參考文件,去理清楚到底是怎么回事。
那么還是非常容易找到SysTick_Handler()這個(gè)函數(shù)的位置的,如下圖所示:
我們會(huì)發(fā)現(xiàn),幾乎所有的中斷函數(shù)的名字都已經(jīng)在這里寫好了,所以我們有的時(shí)候在程序中使用的一些中斷,都可以在這個(gè)地方進(jìn)行查找。
那么,我們?nèi)绻胍淖円粋€(gè)中斷的名字,那么只需要在這里做下修改就可以了,在程序中再使用我們自己定義的中斷的名字,但是結(jié)合實(shí)際的情況來(lái)考慮問(wèn)題,如果我們修改了這些中斷函數(shù)的名字的話,那么就會(huì)降低我們代碼的可移植性,所以基本上我們?cè)谶@里不建議大家做修改。
說(shuō)到了定時(shí)器中斷處理函數(shù),那么定時(shí)器Systick是怎樣來(lái)進(jìn)行設(shè)置的呢?
上圖是LPC1114系統(tǒng)滴答定時(shí)器SysTick的結(jié)構(gòu)圖。系統(tǒng)滴答定時(shí)器位于Cortex-M0內(nèi)核中,也就是說(shuō)對(duì)于LPC1114或者其他的以CortexM0為內(nèi)核的板子中,都會(huì)有這個(gè)系統(tǒng)的定時(shí)器。它存在的主要目的是為嵌入式操作系統(tǒng)提供100HZ(即10ms)的定時(shí)功能。
系統(tǒng)定時(shí)器一共有四個(gè)寄存器:這個(gè)可以從數(shù)據(jù)手冊(cè)上面清楚的了解到:
SYST_CSR : 系統(tǒng)定時(shí)器控制和狀態(tài)寄存器
SYST_RVR : 系統(tǒng)定時(shí)器重載值寄存器
SYST_CVR :系統(tǒng)定時(shí)器當(dāng)前值寄存器
SYST_CALIB : 系統(tǒng)定時(shí)器校準(zhǔn)寄存器
在系統(tǒng)定時(shí)器的四個(gè)寄存器中,SYST_CALIB為校準(zhǔn)寄存器,這個(gè)是在出廠之前就已經(jīng)配置好了的,我們不必考慮這個(gè)寄存器。那么我們一共需要配置3個(gè)寄存器就可以完成我們工作的模塊。
那么接下來(lái)我們對(duì)我們所要操作的三個(gè)寄存器做進(jìn)一步的剖析
(1)SYST_CSR 寄存器
CSR寄存器用到的位有4個(gè),bit0用于是否開(kāi)啟定時(shí)器,置1的話就是允許,bit1用于控制是否產(chǎn)生中斷,該位置為1為允許產(chǎn)生中斷,bit2用于設(shè)置定時(shí)器的時(shí)鐘源,設(shè)為1,定時(shí)器的時(shí)鐘源為主時(shí)鐘,反之設(shè)為0的話定時(shí)器的時(shí)鐘源為主時(shí)鐘的一半。
(2)SYST_RVR 寄存器
RVR寄存器用到0~23位,這個(gè)值是定時(shí)器倒計(jì)時(shí)的初始值,打開(kāi)定時(shí)器以后,就會(huì)從這里設(shè)置的值倒計(jì)時(shí)到0,倒計(jì)時(shí)到0以后,又會(huì)從此值開(kāi)始倒計(jì)時(shí)。
(3)SYST_CVR 寄存器
CURRENT : 讀此寄存器返回系統(tǒng)定時(shí)器的當(dāng)前值,給這個(gè)寄存器賦值,將使定時(shí)器歸0,且清CTRL中的COUNTFLAG位。
CVR寄存器也是用到0~23位,這是一個(gè)狀態(tài)寄存器,當(dāng)定時(shí)器開(kāi)始運(yùn)作的時(shí)候,這個(gè)值在不斷的變化,從RVR寄存器獲取初值以后,倒計(jì)時(shí)到0.
系統(tǒng)定時(shí)器函數(shù)——SysTick_Config()函數(shù)
系統(tǒng)自帶的Systick函數(shù),由CMSIS提供,位于core_cm0.h文件中,在使用的時(shí)候,可以直接調(diào)用的,函數(shù)有一個(gè)參數(shù)ticks,由函數(shù)內(nèi)部的語(yǔ)句
SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;
知道ticks就是重載值,表示兩次中斷的計(jì)數(shù)。
SysTick_Config()函數(shù)中的LOAD就是我們之前說(shuō)的RSR,VAL就是CVR,CTRL就是之前的CSR,上面的操作就是對(duì)寄存器相應(yīng)位進(jìn)行設(shè)置的過(guò)程。
函數(shù)中,對(duì)控制寄存器的bit0,bit1,bit2都置1,對(duì)照前面寄存器相關(guān)位的定義可以知道,時(shí)鐘設(shè)置為等于主頻,打開(kāi)系統(tǒng)定時(shí)器中斷,允許定時(shí)器運(yùn)行。
上一篇:Stm32f01x_SysTick定時(shí)器_延時(shí)功能
下一篇:問(wèn)題:stm32 SysTick_Handler()使用
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 神經(jīng)形態(tài)芯片可能是革新機(jī)器人實(shí)時(shí)電機(jī)控制的未來(lái)
- 從三個(gè)方面理解ARM嵌入式系統(tǒng)
- 自動(dòng)報(bào)警 基于MCU的家庭防盜報(bào)警系統(tǒng)的設(shè)計(jì)
- 存儲(chǔ)控制器及其訪問(wèn)外設(shè)的原理
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- RISC-V人才該怎么培養(yǎng)?專家這樣說(shuō)
- 割草機(jī)器人,四大流派的巔峰之戰(zhàn)
- 車載顯示迎來(lái)三大革命丨“形態(tài)”革命
- 什么是“CDC+空懸”?
- 汽車電子信息安全:如何有效保護(hù)硬件Debug口?
- 新能源汽車核心技術(shù)之“大三電”、“小三電”
- 芯原如何推動(dòng)RISC-V嵌入式軟件人才發(fā)展?
- Arm 技術(shù)助力《國(guó)家地理》探險(xiǎn)家繪制地球海洋圖景
- Arm SME2 技術(shù)加速安卓 AI 升級(jí),驅(qū)動(dòng)移動(dòng)應(yīng)用下一代功能革新
- VGA接口定義、功能用途和種類
- 有獎(jiǎng)電源小課堂 | PI 1250V高壓氮化鎵芯片
- 逛村田在線云展廳,了解通信、移動(dòng)、工業(yè)+環(huán)境、健康四大領(lǐng)域的應(yīng)用干貨!
- 答題贏好禮 | TDK專題報(bào)道只等你來(lái)(第3期)
- 免費(fèi)申請(qǐng) | SFH 4713B紅外LED樣片,體驗(yàn)革新性IR:6技術(shù)
- ST有獎(jiǎng)直播 | 75V降壓控制器和隔離降壓方案
- 【搶樓贏禮】聊聊“我眼中的ADI實(shí)驗(yàn)室電路”
- ADI有獎(jiǎng)下載活動(dòng)之19:ADI可編程邏輯控制器(PLC)解決方案(更新版)
- 免費(fèi)申請(qǐng)測(cè)評(píng) | Sipeed MAix BiT AIoT 開(kāi)發(fā)套件,搭載K210、屏幕和攝像頭
- 有獎(jiǎng)直播|ADI電機(jī)控制解決方案
- TI MSP430系列單片機(jī)串口通信波特率計(jì)算方法
- 油管10w+播放量的、國(guó)產(chǎn)VisionFive RISC-V Linux單板,預(yù)計(jì)要來(lái)咱們論壇了
- msp430調(diào)試遇到問(wèn)題,求教大哥大姐啊
- exlzvy01
- 【小熊派-鴻蒙-季 BearPi-HM Nano】之開(kāi)箱上電
- 亂點(diǎn)鴛鴦譜——表白接力賽
- vhdl (0 downto 0)
- MPS 新年福利|注冊(cè)即有機(jī)會(huì)贏取京東卡
- 也來(lái)發(fā)個(gè)區(qū)別帖:電氣化跟電動(dòng)的區(qū)別。
- 職業(yè)規(guī)劃:最常見(jiàn)的三個(gè)“逆期”行為