generic timer介紹
armv7-A架構(gòu)中每個(gè)CPU核心都包含自己的私有定時(shí)器,所有cpu的定時(shí)器共享一個(gè)System counter, System counter負(fù)責(zé)產(chǎn)生計(jì)數(shù),傳遞到每個(gè)核心的私有定時(shí)器,架構(gòu)如下圖所示:
該定時(shí)器可以產(chǎn)生中斷,作為系統(tǒng)心跳使用,類似于cortex-M的systick,詳細(xì)的中斷號(hào)在DDI0471B_gic400_r0p1_trm.pdf中有說明,下面PPI中斷號(hào)的截圖說明:
gtimer寄存器介紹
armv7-A架構(gòu)中g(shù)eneric timer寄存器如下圖所示:
在ARMv7-A中定義了不同的特權(quán)級(jí)別,分別是PL0, PL1, PL2,PL0是普通用戶模式,在PL1、PL2模式下分別有對(duì)應(yīng)的定時(shí)器。
下面介紹PL1模式下的定時(shí)器,也就是svc、FIQ模式下的定時(shí)器,rt-thread的宏內(nèi)核版本運(yùn)行在svc模式下,所以我們著重研究PL1物理定時(shí)器的使用。
關(guān)鍵寄存器說明
CNTFRQ寄存器是定時(shí)器頻率值,這個(gè)需要根據(jù)實(shí)際的硬件情況設(shè)置,在全志平臺(tái)上是24M,這個(gè)必須設(shè)置, 操作寄存器的內(nèi)聯(lián)匯編代碼:
asm volatile("MCR p15, 0 , %0, c14, c0, 0" : : "r" (Rt) : "memory" )
CNTPCT是物理計(jì)數(shù)器寄存器,這個(gè)寄存器是64位的,寄存器值會(huì)一直累加,根據(jù)CNTFRQ寄存器中的頻率進(jìn)行累加,所以這個(gè)值可以作為時(shí)間tick來使用,在一些需要簡(jiǎn)短的延時(shí)場(chǎng)景可以借助這個(gè)計(jì)數(shù)器。獲取計(jì)數(shù)器值的代碼:
uint64_t get_arch_counter(void)
{
uint32_t low=0, high = 0;
asm volatile("mrrc p15, 0, %0, %1, c14"
: "=r" (low), "=r" (high) |
---|
: "memory"); |
return (((uint64_t)high)<<32 |
} |
CNTP_TVAL寄存器, 這個(gè)寄存器一般在開啟gtimer的中斷時(shí)使用。
寫入CNTP_TVAL寄存器時(shí),硬件會(huì)自動(dòng)把該值加上System Counter的值,一并寫入CNTP_CVAL寄存器中,作為下一次中斷的時(shí)基。內(nèi)聯(lián)匯編偽代碼如下:
asm volatile("MCR p15, 0 , %0, c14, c2, 0" : : "r" (Rt) : "memory" )
特別說明
CNTP_CVAL = CNTP_TVAL + System Counter。
CNTP_CVAL寄存器,該寄存器是比較寄存器,當(dāng)System Counter的值大于等于CNTP_CVAL的值時(shí)產(chǎn)生中斷,如果需要改寫此寄存器的值可以,通過寫入CNTP_TVAL來實(shí)現(xiàn),避免讀改寫寄存器的繁瑣操作。
CNTP_CTL是PL1物理定時(shí)器的控制寄存器, 操作的內(nèi)聯(lián)匯編代碼如下:
asm volatile("MCR p15, 0 , %0, c14, c2,
CNTP_CTL寄存器控制位說明:
其中bit0負(fù)責(zé)使能定時(shí)器,bit1是否打開中斷信號(hào)。
PL1物理定時(shí)器的中斷號(hào),在全志平臺(tái)是29,其他CPU平臺(tái)待驗(yàn)證。
詳細(xì)gtimer操作代碼可以參考rt-thread源碼目錄中l(wèi)ibcpu->cortex-a中的gtimer.c文件。
-
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2291瀏覽量
96426 -
ARM處理器
+關(guān)注
關(guān)注
6文章
361瀏覽量
42630 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3298瀏覽量
118976 -
控制寄存器
+關(guān)注
關(guān)注
0文章
34瀏覽量
11654 -
RT-Thread
+關(guān)注
關(guān)注
32文章
1409瀏覽量
41966
發(fā)布評(píng)論請(qǐng)先 登錄
芯??萍紤?yīng)用筆記:CS32F0XX TIMER外設(shè)模塊指導(dǎo)
arm7 armv7 cortexm3它們是什么關(guān)系請(qǐng)問?
在Armv8-M應(yīng)用筆記上使用TrustZone
基于ARMv7架構(gòu)的Cortex系列
Cortex-A53使用AArch32 Kernel,可以直接使用ARMv7的所支持的CPU嗎?
請(qǐng)問怎么理解ARMv7的Secure和Non-secure狀態(tài)
Armv7和Armv8系統(tǒng)中跟蹤的高級(jí)視圖詳解
如何將軟件應(yīng)用程序從ARMv5遷移到ARMv7-A/R
ARMv7的Cortex系列微處理器技術(shù)特點(diǎn)

ARMv7和ARMv7的體系結(jié)構(gòu)參考手冊(cè)免費(fèi)下載

ARMv7-A工作模式介紹

HK32MCU應(yīng)用筆記(十六)| HK32F103xC/D/E-Timer的應(yīng)用及注意事項(xiàng)
ARMv7安全引導(dǎo)的過程

評(píng)論