12-Generic Timer
快速鏈接:
.
👉👉👉 個(gè)人博客筆記導(dǎo)讀目錄(全部) 👈👈👈
前言:
什么是arch timer? 什么是apb timer? 什么generic timer?
自己悟去吧😁😁😁😁
文章目錄
- 1 簡(jiǎn)介
- 2、什么是通用定時(shí)器?
- 3、processor中有哪些timer?
- 3.1、計(jì)數(shù)和頻率
- 3.2. Timer寄存器
- 3.2.1 訪問(wèn)timer
- 3.3、配置一個(gè)timer
- 3.4、中斷
- 3.5、Timer virtualization
1 簡(jiǎn)介
下圖展示了一個(gè)使用通用定時(shí)器作為系統(tǒng)定時(shí)器的片上系統(tǒng)示例。 在這個(gè)圖中:
- 定義了多處理器塊中各個(gè) PE 的體系結(jié)構(gòu)。
- ARM 通用中斷控制器架構(gòu)規(guī)范定義了中斷控制器的可能架構(gòu)。
- 通用計(jì)時(shí)器功能分布在多個(gè)組件中。
2、什么是通用定時(shí)器?
通用定時(shí)器為 Arm 內(nèi)核提供了一個(gè)標(biāo)準(zhǔn)化的定時(shí)器框架。通用定時(shí)器包括一個(gè)System Counter和一組per-core timer,如下圖所示:
系統(tǒng)計(jì)數(shù)器是一個(gè)永遠(yuǎn)在線的設(shè)備,它提供一個(gè)固定頻率遞增的系統(tǒng)計(jì)數(shù)。系統(tǒng)計(jì)數(shù)值被廣播到系統(tǒng)中的所有核心,讓核心共同了解時(shí)間的流逝。系統(tǒng)計(jì)數(shù)值的寬度在 56 位到 64 位之間,頻率通常在 1MHz 到 50MHz 的范圍內(nèi)。
注意:通用計(jì)時(shí)器僅測(cè)量時(shí)間的流逝。它不報(bào)告時(shí)間或日期。通常,SoC 還包含用于時(shí)間和日期的實(shí)時(shí)時(shí)鐘 (RTC)。
每個(gè)內(nèi)核都有一組定時(shí)器。這些定時(shí)器是比較器,與系統(tǒng)計(jì)數(shù)器提供的廣播系統(tǒng)計(jì)數(shù)進(jìn)行比較。軟件可以配置定時(shí)器以在未來(lái)在設(shè)定點(diǎn)產(chǎn)生中斷或事件。軟件還可以使用系統(tǒng)計(jì)數(shù)來(lái)添加時(shí)間戳,因?yàn)橄到y(tǒng)計(jì)數(shù)為所有內(nèi)核提供了一個(gè)共同的參考點(diǎn)。
在本文中,我們將解釋定時(shí)器和系統(tǒng)計(jì)數(shù)器的操作和配置。
3、processor中有哪些timer?
內(nèi)核提供的定時(shí)器數(shù)量取決于實(shí)現(xiàn)了哪些擴(kuò)展,如下表所示:
3.1、計(jì)數(shù)和頻率
CNTPCT_EL0 系統(tǒng)寄存器報(bào)告當(dāng)前系統(tǒng)計(jì)數(shù)值。
可以推測(cè)性地讀取 CNTPCT_EL0。 這意味著它們可以在程序流程中被亂序讀取。 這在某些情況下可能很重要,例如比較時(shí)間戳。 當(dāng)計(jì)數(shù)器讀取的順序很重要時(shí),可以使用 ISB,如以下代碼所示:
loop: // Polling for some communication to indicate a requirement to read // the timer LDR X1, [X2] CBZ x1, loop ISB // Without this, the CNTPCT could be read before the memory location in // [X2] has had the value 0 written to it MRS X1, CNTPCT_EL0CNTFRQ_EL0 報(bào)告系統(tǒng)計(jì)數(shù)的頻率。 但是,該寄存器不是由硬件填充的。 該寄存器在實(shí)現(xiàn)的最高異常級(jí)別下是可寫的,在所有異常級(jí)別下都是可讀的。 固件,通常在 EL3 上運(yùn)行,填充此寄存器作為早期系統(tǒng)初始化的一部分。 更高級(jí)別的軟件,如操作系統(tǒng),然后可以使用寄存器來(lái)獲取頻率。
3.2. Timer寄存器
每個(gè)定時(shí)器都有以下三個(gè)系統(tǒng)寄存器:
在寄存器名稱中, 標(biāo)識(shí)正在訪問(wèn)的定時(shí)器,它是前綴,下表顯示了可能的值:
例如,CNTP_CVAL_EL0 是 EL1 物理定時(shí)器的比較器寄存器。
思考:EL3 物理定時(shí)器和非安全 EL2 虛擬定時(shí)器的控制寄存器的名稱是什么?
3.2.1 訪問(wèn)timer
對(duì)于某些定時(shí)器,可以配置哪些異常級(jí)別可以訪問(wèn)定時(shí)器:
? EL1 Physical and Virtual Timers
EL0 access to these timers is controlled by CNTKCTL_EL1.
? EL2 Physical and Virtual Timers
When HCR_EL2.{TGE,E2H}=={1,1}, EL0 access to these timers is controlled by CNTKCTL_EL2:. These timers were added as part of the support for the Armv8.1-A Virtualization Host Extension, which is beyond the scope of this
guide
? EL3 physical timer
S.EL1 and S.EL2 access to this timer is controlled by SCR_EL3.ST.
3.3、配置一個(gè)timer
使用timer有兩種方式:
- 使用CVAL, CVAL是64位的寄存器;
Timer Condition Met: CVAL <= System Count - 使用TVAL, TVAL是32位的寄存器, TVAL隨著system conter值的增加而減小.
CVAL = TVAL + System Counter
Timer Condition Met: CVAL <= System Count
3.4、中斷
timer產(chǎn)生的中斷,只可以routing到當(dāng)前core
timer中斷的控制,在CTL寄存器中
? ENABLE – Enables the timer.
? IMASK – Interrupt mask. Enables or disables interrupt generation.
? ISTATUS – When ENABLE==1, reports whether the timer is firing (CVAL <= System Count).
Must set ENABLE to 1 and clear IMASK to 0
The interrupt ID (INTID)由SBSA文檔定義推薦的值, 注:Server Base System Architecture (SBSA)
中斷產(chǎn)生之后,會(huì)持續(xù)輸出中斷,直到如下條件發(fā)生:
? IMASK is set to one, which masks the interrupt.
? ENABLE is cleared to 0, which disables the timer.
? TVAL or CVAL is written, so that firing condition is no longer met.
所以在產(chǎn)生一個(gè)timer中斷后,軟件需要在該中斷變?yōu)閐eactivating之前,清除該中斷。
3.5、Timer virtualization
Virtual Count = Physical Count -
CNTVOFF_EL2配置offset,CNTVOFF_EL2只可以在EL3或EL2中訪問(wèn)
如果EL2沒(méi)有使用,那么offset為0,此時(shí)虛擬counter和物理conter值相等
總結(jié)
以上是生活随笔為你收集整理的12-Generic Timer的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 11-Memory Management
- 下一篇: 13-Introduction to s