<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

armv7 generic timer使用筆記

冬至子 ? 來源:小鱷魚 ? 作者:小鱷魚 ? 2023-09-27 15:10 ? 次閱讀

generic timer介紹

armv7-A架構中每個CPU核心都包含自己的私有定時器,所有cpu的定時器共享一個System counter, System counter負責產生計數,傳遞到每個核心的私有定時器,架構如下圖所示:

1.jpg

該定時器可以產生中斷,作為系統心跳使用,類似于cortex-M的systick,詳細的中斷號在DDI0471B_gic400_r0p1_trm.pdf中有說明,下面PPI中斷號的截圖說明:

1.jpg

gtimer寄存器介紹

armv7-A架構中generic timer寄存器如下圖所示:

1.jpg

在ARMv7-A中定義了不同的特權級別,分別是PL0, PL1, PL2,PL0是普通用戶模式,在PL1、PL2模式下分別有對應的定時器。

下面介紹PL1模式下的定時器,也就是svc、FIQ模式下的定時器,rt-thread的宏內核版本運行在svc模式下,所以我們著重研究PL1物理定時器的使用。

關鍵寄存器說明

CNTFRQ寄存器是定時器頻率值,這個需要根據實際的硬件情況設置,在全志平臺上是24M,這個必須設置, 操作寄存器的內聯匯編代碼:

asm volatile("MCR p15, 0 , %0, c14, c0, 0" : : "r" (Rt) : "memory" )

CNTPCT是物理計數器寄存器,這個寄存器是64位的,寄存器值會一直累加,根據CNTFRQ寄存器中的頻率進行累加,所以這個值可以作為時間tick來使用,在一些需要簡短的延時場景可以借助這個計數器。獲取計數器值的代碼:

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寄存器, 這個寄存器一般在開啟gtimer的中斷時使用。

寫入CNTP_TVAL寄存器時,硬件會自動把該值加上System Counter的值,一并寫入CNTP_CVAL寄存器中,作為下一次中斷的時基。內聯匯編偽代碼如下:

asm volatile("MCR p15, 0 , %0, c14, c2, 0" : : "r" (Rt) : "memory" )

特別說明

CNTP_CVAL = CNTP_TVAL + System Counter。

CNTP_CVAL寄存器,該寄存器是比較寄存器,當System Counter的值大于等于CNTP_CVAL的值時產生中斷,如果需要改寫此寄存器的值可以,通過寫入CNTP_TVAL來實現,避免讀改寫寄存器的繁瑣操作。

CNTP_CTL是PL1物理定時器的控制寄存器, 操作的內聯匯編代碼如下:

asm volatile("MCR p15, 0 , %0, c14, c2,

CNTP_CTL寄存器控制位說明:

1.jpg

其中bit0負責使能定時器,bit1是否打開中斷信號。

PL1物理定時器的中斷號,在全志平臺是29,其他CPU平臺待驗證。

詳細gtimer操作代碼可以參考rt-thread源碼目錄中libcpu->cortex-a中的gtimer.c文件。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 計數器
    +關注

    關注

    32

    文章

    2197

    瀏覽量

    93288
  • ARM處理器
    +關注

    關注

    6

    文章

    350

    瀏覽量

    41362
  • 定時器
    +關注

    關注

    23

    文章

    3153

    瀏覽量

    112367
  • 控制寄存器
    +關注

    關注

    0

    文章

    34

    瀏覽量

    11440
  • RT-Thread
    +關注

    關注

    31

    文章

    1175

    瀏覽量

    38987
收藏 人收藏

    評論

    相關推薦

    芯??萍紤?b class='flag-5'>用筆記:CS32F0XX TIMER外設模塊指導

    紹的特定用戶示例做了工作原理與相關代碼介紹, 以方便用戶快速移。本應用筆記分為四部分:定時器特性概述、基本定時器功能介紹、高級定時器功能介紹、特定場景應用示例。*附件:應用筆記:CS32F0XX TIMER外設模塊指導.pdf
    發表于 05-16 10:52

    arm7 armv7 cortexm3它們是什么關系請問?

    arm7 armv7 cortexm3它們是什么關系請問?
    發表于 11-15 21:21

    Armv8-M應用筆記上使用TrustZone

    本應用筆記介紹CMSIS和MDK中可用的功能,以利用ARMv8-M體系結構中的安全域和非安全域。它包含幾個編程示例,其中包括一個RTOS應用程序,該應用程序顯示了非安全線程執行與ARMv8-M系統安全域提供的庫之間的交互。
    發表于 05-11 13:26

    基于ARMv7架構的Cortex系列

    基于ARMv7架構的Cortex系列由ARM公司在2006年推出,Cortex系列的推出滿足人們對性能日漸復雜的設計要求,根據不同需求,Cortex系列共三個不同的子系列...
    發表于 08-09 06:37

    ARMv7系列芯片算法的NEON優化耗時異常的原因是什么

    目前正在做ARMv7 系列芯片算法的NEON優化,發現一個耗時異常的地方,現象描述如下:首先主循環里會處理三類數據,三類數據分開存放在DDR上,每次循環分別處理三類數據的8個uchar數據,存儲數據
    發表于 08-16 15:22

    Cortex-A53使用AArch32 Kernel,可以直接使用ARMv7的所支持的CPU嗎?

    CA53 run 32bit linux kernel, 發現arch/arm/kernel/perf_event_v7.c 只支持ARMv7 的 ca17, ca15, ca12, ca9
    發表于 08-29 14:11

    請問怎么理解ARMv7的Secure和Non-secure狀態

    我在看ARMv7異常部分,看到Vector tables發現和以前不一樣了,有Secure和Non-secure狀態(還有Hyp和Monitor),請問怎么理解這兩種狀態?讀那個寄存器可以知道當前ARM處于哪種狀態?
    發表于 09-01 15:46

    如何在arm32 arch和armv7中打印堆??蚣艿目蚣苤羔樀刂纺?/a>

    我正在嘗試在arm32 arch和armv7中打印堆??蚣艿目蚣苤羔樀牡刂?。為了找到先前的堆棧幀地址,我正在arch_prev_frame()中執行(frame-12),并在
    發表于 09-05 16:01

    Armv7Armv8系統中跟蹤的高級視圖詳解

    本指南主要介紹Armv7系統和Armv8系統中跟蹤的高級視圖,最高可達Armv8.4版本。 該指南涵蓋: ?跟蹤是什么以及如何使用 ?跟蹤體系結構是如何定義的,以及它如何映射到不同的跟蹤組件實現 ?在Arm系統中可以看到哪些跟蹤
    發表于 08-02 06:11

    ARM體系結構參考手冊ARMv7-A和ARMv7-R版本

    本手冊介紹ARM?架構v7、ARMv7的A和R配置文件。 其中包括以下內容的描述: ·處理器指令集: -原始ARM?指令集-高代碼密度Thumb?指令集-ThumbEE指令集,包括對實時(JIT)或
    發表于 08-12 07:46

    在基于ARMv7的平臺1.0版上使用CSAT進行低級調試

    此教程提供了使用 CoreSight Access 工具在基于 Armv7 的平臺上執行某些基本調試操作的信息。 此教程側重于使用與 DS-5 一起運輸的核心Sight Access 工具在
    發表于 08-28 06:50

    如何將軟件應用程序從ARMv5遷移到ARMv7-A/R

    5。 本應用筆記還假設您具有ARMv5的軟件開發經驗。 假設主目標平臺是圍繞ARMv7-A處理器構建的。 由于ARMv7-A和ARMv7-R
    發表于 08-29 06:51

    ARMv7的Cortex系列微處理器技術特點

    ARMv7的Cortex系列微處理器 隨著嵌入式技術應用領域的不斷擴展,對嵌入式系統的要求越來越高,而作為嵌入式系統核心的微處理器也面臨日益嚴竣的挑
    發表于 10-17 09:17 ?3011次閱讀
    <b class='flag-5'>ARMv7</b>的Cortex系列微處理器技術特點

    ARMv7ARMv7的體系結構參考手冊免費下載

    ARM? Architecture Reference Manual ARMv7-A and ARMv7-R edition
    發表于 09-28 08:00 ?26次下載
    <b class='flag-5'>ARMv7</b>和<b class='flag-5'>ARMv7</b>的體系結構參考手冊免費下載

    HK32MCU應用筆記(十六)| HK32F103xC/D/E-Timer的應用及注意事項

    HK32MCU應用筆記(十六)| HK32F103xC/D/E-Timer的應用及注意事項
    的頭像 發表于 09-18 10:58 ?520次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>