本章參考資料《arm cortex™-m4f 技術參考手冊》 -4.5 章節 systick timer(stk), 和
4.48 章節 shprx,其中 stk 這個章節有 systick 的簡介和暫存器的詳細描述。因為
systick 是屬於 cm4 核心的外設,有關暫存器的定義和部分庫函式都在 core_cm4.h 這個頭
檔案中實現。所以學習 systick 的時候可以參考這兩個資料,乙個是文件,乙個是原始碼。
systick 簡介
systick—系統定時器是屬於 cm4 核心中的乙個外設,內嵌在 nvic 中。系統定時器
是乙個 24bit 的向下遞減的計數器,計數器每計數一次的時間為 1/sysclk,一般我們設定
系統時鐘 sysclk 等於 180m。當重裝載數值暫存器的值遞減到 0 的時候,系統定時器就
產生一次中斷,以此迴圈往復。
因為 systick 是屬於 cm4 核心的外設,所以所有基於 cm4 核心的微控制器都具有這個
系統定時器,使得軟體在 cm4 微控制器中可以很容易的移植。系統定時器一般用於作業系統,
用於產生時基,維持作業系統的心跳。
systick 屬於核心的外設,有關的暫存器定義和庫函式都在核心相關的庫檔案
core_cm4.h 中。
用韌體庫程式設計的時候我們只需要呼叫庫函式 systick_config()即可,形參 ticks 用來設
置重裝載暫存器的值,最大不能超過重裝載暫存器的值 224,當重裝載暫存器的值遞減到 0
的時候產生中斷,然後重裝載暫存器的值又重新裝載往下遞減計數,以此迴圈往復。緊隨
其後設定好中斷優先順序,最後配置系統定時器的時鐘為 180m,使能定時器和定時器中斷,
這樣系統定時器就配置好了,乙個庫函式搞定。
systick_config()庫函式主要配置了 systick 中的三個暫存器: load、 val 和 ctrl,
有關具體的部分看**注釋即可。其中還呼叫了韌體庫函式 nvic_setpriority()來配置系統
定時器的中斷優先順序,該庫函式也在 core_m4.h 中定義,
原型如下:
1 __static_inline void nvic_setpriority(irqn_type irqn, uint32_t priority)
2 else
10 }
因為 systick 屬於核心外設,跟普通外設的中斷優先順序有些區別,並沒有搶占優先順序
和子優先順序的說法。在 stm32f429 中,核心外設的中斷優先順序由核心 scb 這個外設的寄
存器: shprx( x=1.2.3)來配置。有關 shprx 暫存器的詳細描述可參考《 cortex-m4 核心
程式設計手冊》 4.4.8 章節。
在系統定時器中,配置優先順序為
(1ul << __nvic_prio_bits) - 1ul)
,其中巨集
__nvic_prio_bits 為 4
,那計算結果就等於
15,可以看出系統定時器此時設定的優先順序
在核心外設中是最低的。
systick 初始化函式由使用者編寫,裡面呼叫了 systick_config()這個韌體庫函式,通過
設定該韌體庫函式的形參,就決定了系統定時器經過多少時間就產生一次中斷。
systick 中斷時間的計算
systick 定時器的計數器是向下遞減計數的,計數一次的時間 tdec=1/clkahb,當重灌
載暫存器中的值 valueload 減到 0 的時候,產生中斷,可知中斷一次的時間
tint=valueload * tdec 中斷= valueload/clkahb,其中 clkahb =180mhz。如果設定為
180,那中斷一次的時間 tint=180/180m=1us。不過 1us 的中斷沒啥意義,整個程式的重心
都花在進出中斷上了,根本沒有時間處理其他的任務。
systick_config(systemcoreclock / 100000))
systick_config()的形我們配置為 systemcoreclock / 100000=180m/100000=1800,
從剛剛分析我們知道這個形參的值最終是寫到重裝載暫存器 load 中的,從而可知我們現
在把 systick 定時器中斷一次的時間 tint=1800/180m=10us。
SysTick 系統定時器
本章參考資料 arm cortex m4f 技術參考手冊 4.5 章節 systick timer stk 和 4.48 章節 shprx,其中 stk 這個章節有 systick 的簡介和暫存器的詳細描述。因為 systick 是屬於 cm4 核心的外設,有關暫存器的定義和部分庫函式都在 core...
系統定時器SysTick
在lpc824內部有乙個特殊的定時器 系統定時器 systick 它位於cortex m0 核心裡面,是arm核心的一部分,主要用來給作業系統提供時間片輪轉的定時,一般固定為10ms的定時,所以中文也稱它為 嘀嗒 定時器 也稱 心跳 定時器 在不跑作業系統時,可以把它當作普通定時器來用,一般用來進行...
SysTick系統定時器
1.systick定時器介紹 systick定時器也叫systick滴答定時器,它是cortex m3核心的乙個 外設,被嵌入在 nvic 中。它是乙個24 位向下遞減的定時器,每計數一 次所需時間為1 systick,systick是系統定時器時鐘,它可以直接取自 系統時鐘,還可以通過系統時鐘8分...