0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

剖析Zynq-7000系列全局定時(shí)器(GT)

FPGA開源工作室 ? 來源:ZYNQ ? 作者:小默 ? 2021-06-16 16:49 ? 次閱讀

每個(gè) Cortex-A9 處理器都有自己的私有 32 位定時(shí)器和 32 位看門狗定時(shí)器,兩個(gè)處理器共享一個(gè)全局 64 位定時(shí)器,這些定時(shí)器始終以 CPU 頻率 (CPU_3x2x) 的 1/2 計(jì)時(shí)。

在系統(tǒng)層面,有一個(gè) 24 位看門狗定時(shí)器和兩個(gè) 16 位三重定時(shí)器/計(jì)數(shù)器。

系統(tǒng)看門狗定時(shí)器的時(shí)鐘頻率為 CPU 頻率 (CPU_1x) 的 1/4 或 1/6,或者可以由來自 MIO 引腳或來自 PL 的外部信號(hào)提供時(shí)鐘。

兩個(gè)三重定時(shí)器/計(jì)數(shù)器始終以 CPU 頻率 (CPU_1x) 的 1/4 或 1/6 計(jì)時(shí),用于計(jì)算來自 MIO 引腳或來自 PL 的信號(hào)脈沖的寬度。

下圖顯示了系統(tǒng)定時(shí)器的關(guān)系

本文重點(diǎn)說一下全局定時(shí)器。

全局定時(shí)器

全局定時(shí)器是一個(gè) 64 位的具有自動(dòng)遞增功能的遞增計(jì)數(shù)器。

全局定時(shí)器是內(nèi)存映射到與私有定時(shí)器相同的地址空間。

所有 Cortex-A9 處理器都可以訪問全局定時(shí)器。

每個(gè) Cortex-A9 處理器都有一個(gè) 64 位比較器,用于在全局定時(shí)器達(dá)到比較器值時(shí)聲明一個(gè)私有中斷。

計(jì)時(shí)

GTC 始終以 CPU 頻率 (CPU_3x2x) 的 1/2 計(jì)時(shí)。

寄存器概述

有關(guān)GTC的注冊概述如下表

411eb9ec-cac4-11eb-9e57-12bb97331649.png

全局定時(shí)器寄存器概述

怎么使用?

下面兩個(gè)函數(shù)是在bsp standalone中的xtime_l.c中。

void XTime_SetTime(XTime Xtime_Global)

{

/* Disable Global Timer */

Xil_Out32((u32)GLOBAL_TMR_BASEADDR +(u32)GTIMER_CONTROL_OFFSET, (u32)0x0);

/* Updating Global Timer Counter Register */

Xil_Out32((u32)GLOBAL_TMR_BASEADDR +(u32)GTIMER_COUNTER_LOWER_OFFSET, (u32)Xtime_Global);

Xil_Out32((u32)GLOBAL_TMR_BASEADDR +(u32)GTIMER_COUNTER_UPPER_OFFSET,

(u32)((u32)(Xtime_Global》》32U)));

/* Enable Global Timer */

Xil_Out32((u32)GLOBAL_TMR_BASEADDR + (u32)GTIMER_CONTROL_OFFSET, (u32)0x1);

}

void XTime_GetTime(XTime *Xtime_Global)

{

u32 low;

u32 high;

/* Reading Global Timer Counter Register */

do

{

high = Xil_In32(GLOBAL_TMR_BASEADDR + GTIMER_COUNTER_UPPER_OFFSET);

low = Xil_In32(GLOBAL_TMR_BASEADDR + GTIMER_COUNTER_LOWER_OFFSET);

} while(Xil_In32(GLOBAL_TMR_BASEADDR + GTIMER_COUNTER_UPPER_OFFSET) != high);

*Xtime_Global = (((XTime) high) 《《 32U) | (XTime) low;

}

官方已經(jīng)把全局定時(shí)器自動(dòng)初始化好了,其頻率為CPU頻率的一半。

定義全局定時(shí)器的7個(gè)寄存器全部按照地址進(jìn)行了宏定義,采用xil_io.h里的out32和in32兩個(gè)函數(shù)進(jìn)行讀寫操作:

#define Global_Timer_INTR XPAR_GLOBAL_TMR_INTR#define Global_Timer_Counter_Register0 XPAR_GLOBAL_TMR_BASEADDR+0x0U#define Global_Timer_Counter_Register1 XPAR_GLOBAL_TMR_BASEADDR+0x4U#define Global_Timer_Control_Register XPAR_GLOBAL_TMR_BASEADDR+0x8U#define Global_Timer_Interrupt_Status_Register XPAR_GLOBAL_TMR_BASEADDR+0xCU#define Comparator_Value_Register0 XPAR_GLOBAL_TMR_BASEADDR+0x10U#define Comparator_Value_Register1 XPAR_GLOBAL_TMR_BASEADDR+0x14U#define Auto_increment_Register XPAR_GLOBAL_TMR_BASEADDR+0x18U

接下來進(jìn)行全局定時(shí)器的初始化和中斷函數(shù)綁定:

GT_Write_Reg(Global_Timer_Control_Register,0);//停止全局定時(shí)器

GT_Write_Reg(Global_Timer_Counter_Register0,0);//清空計(jì)數(shù)器低32位

GT_Write_Reg(Global_Timer_Counter_Register1,0);//清空計(jì)數(shù)器高32位

GT_Write_Reg(Global_Timer_Interrupt_Status_Register,1);//清除中斷標(biāo)志位

GT_Write_Reg(Comparator_Value_Register0,TIMER_LOAD_VALUE);//加載比較器低32位

GT_Write_Reg(Comparator_Value_Register1,0);//加載比較器高32位

GT_Write_Reg(Auto_increment_Register,TIMER_LOAD_VALUE);//加載遞增寄存器數(shù)值

Status = XScuGic_Connect(IntcInstancePtr, Global_Timer_INTR,

(Xil_ExceptionHandler)TimerIntrHandler,

0);//綁定全局定時(shí)器中斷服務(wù)函數(shù)

if (Status != XST_SUCCESS)

{

return Status;

}

XScuGic_InterruptMaptoCpu(IntcInstancePtr,1,Global_Timer_INTR);//將27號(hào)全局定時(shí)器中斷映射到CPU1

XScuGic_Enable(IntcInstancePtr, Global_Timer_INTR);//打開全局定時(shí)器中斷(27號(hào))

主程序中打開全局定時(shí)器開始計(jì)時(shí)

GT_Write_Reg(Global_Timer_Control_Register,//啟動(dòng)全局定時(shí)器

Auto_Increment_Bit|IRQ_Enable_Bit|Comp_Enable_Bit|Timer_Enable_Bit);

總結(jié)

全局定時(shí)器一共7個(gè)寄存器,打開SDK再想看看對應(yīng)的BSP文檔時(shí)就會(huì)發(fā)現(xiàn)還是很復(fù)雜的。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    18927

    瀏覽量

    227251
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5253

    瀏覽量

    119212
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10702

    瀏覽量

    209404
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2241

    瀏覽量

    93978
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3218

    瀏覽量

    113695

原文標(biāo)題:Zynq-7000系列全局定時(shí)器(GT)詳解

文章出處:【微信號(hào):leezym0317,微信公眾號(hào):FPGA開源工作室】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    定時(shí)器的工作方式介紹

    定時(shí)器是計(jì)算機(jī)和嵌入式系統(tǒng)中常見的一種硬件模塊,用于實(shí)現(xiàn)定時(shí)和計(jì)數(shù)功能。定時(shí)器的工作方式通常由一組寄存來控制,這些寄存定義了
    的頭像 發(fā)表于 07-12 10:29 ?454次閱讀

    定時(shí)器相關(guān)的寄存有哪些類型

    ,微控制通常提供了一系列定時(shí)器寄存,用于配置和控制定時(shí)器的行為。 以下是一些常見的與定時(shí)器
    的頭像 發(fā)表于 07-12 10:25 ?363次閱讀

    簡談Xilinx Zynq-7000嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    今天給大俠帶來簡談Xilinx Zynq-7000嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),話不多說,上貨。 Xilinx的ZYNQ系列FPGA是二種看上去對立面的思想的融合,ARM處理的串行執(zhí)
    發(fā)表于 05-08 16:23

    Xilinx ZYNQ 動(dòng)手實(shí)操演練

    ??删幊踢壿嬁捎捎脩襞渲?,并通過“互連”模塊連接在一起,這樣可以提供用戶自定義的任意邏輯功能,從而擴(kuò)展處理系統(tǒng)的性能及功能。不過,與采用嵌入式處理的FPGA不同,Zynq-7000產(chǎn)品系列
    發(fā)表于 05-03 19:28

    如何實(shí)現(xiàn)一個(gè)軟件定時(shí)器?

    在Linux,uC/OS,F(xiàn)reeRTOS等操作系統(tǒng)中,都帶有軟件定時(shí)器,原理大同小異。典型的實(shí)現(xiàn)方法是:通過一個(gè)硬件定時(shí)器產(chǎn)生固定的時(shí)鐘節(jié)拍,每次硬件定時(shí)器中斷到,就對一個(gè)全局的時(shí)間
    的頭像 發(fā)表于 04-29 11:00 ?474次閱讀

    Zynq-7000為何不是FPGA?

    Zynq-7000可擴(kuò)展處理平臺(tái)是采用賽靈思新一代FPGA(Artix-7與Kintex-7FPGA)所采用的同一28nm可編程技術(shù)的最新產(chǎn)品系列
    發(fā)表于 04-26 11:30 ?742次閱讀
    <b class='flag-5'>Zynq-7000</b>為何不是FPGA?

    簡談Xilinx Zynq-7000嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    今天給大俠帶來簡談Xilinx Zynq-7000嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),話不多說,上貨。 Xilinx的ZYNQ系列FPGA是二種看上去對立面的思想的融合,ARM處理的串行執(zhí)
    發(fā)表于 04-10 16:00

    定時(shí)器在STEP 7V5.x及STEP 7(TIA Portal)的不同處理步驟

    基于STEP 5的兼容性,仍然可以使用STEP7 S5定時(shí)器與計(jì)數(shù)定時(shí)器和計(jì)數(shù)全局的且基于編號(hào)尋址,當(dāng)啟動(dòng)
    的頭像 發(fā)表于 04-07 11:35 ?1121次閱讀
    <b class='flag-5'>定時(shí)器</b>在STEP 7V5.x及STEP 7(TIA Portal)的不同處理步驟

    使用555定時(shí)器的可調(diào)雙定時(shí)器電路

    定時(shí)器 IC 555 是最通用和最常用的 IC 之一,因?yàn)樗膽?yīng)用范圍更廣,如 PWM放大器、延遲定時(shí)器、開關(guān)電路、占空比選擇、時(shí)鐘脈沖發(fā)生等。這也可用于各種應(yīng)用,如精確
    的頭像 發(fā)表于 02-25 15:16 ?1640次閱讀
    使用555<b class='flag-5'>定時(shí)器</b>的可調(diào)雙<b class='flag-5'>定時(shí)器</b>電路

    AT32 定時(shí)器配置中pr和div的作用

    AT32定時(shí)器是51系列單片機(jī)中的一種定時(shí)器,可以實(shí)現(xiàn)多種定時(shí)功能。在AT32定時(shí)器中,pr和div是兩個(gè)相關(guān)的參數(shù),用于配置
    的頭像 發(fā)表于 01-08 10:12 ?952次閱讀

    定時(shí)器會(huì)阻塞線程嗎 定時(shí)器指令有哪幾種

    定時(shí)器會(huì)阻塞線程嗎 定時(shí)器指令有哪幾種? 定時(shí)器一般不會(huì)阻塞線程,但具體是否會(huì)阻塞取決于所使用的定時(shí)器實(shí)現(xiàn)方式和使用方式。 定時(shí)器指令可以分
    的頭像 發(fā)表于 12-19 14:03 ?801次閱讀

    定時(shí)器設(shè)計(jì)實(shí)現(xiàn)

    由于目前C++標(biāo)準(zhǔn)中沒有現(xiàn)成的定時(shí)器,本設(shè)計(jì)使用C++11相關(guān)語法并進(jìn)行封裝。 本定時(shí)器包含一個(gè)TimerManager類用于創(chuàng)建定時(shí)器和進(jìn)行定時(shí)任務(wù)管理,TimerManager會(huì)創(chuàng)
    的頭像 發(fā)表于 11-08 16:50 ?505次閱讀

    C51單片機(jī)的定時(shí)器介紹

    定時(shí)器是生活中常見的一種定時(shí)裝置,常見的定時(shí)器有機(jī)械定時(shí)器和電子定時(shí)器
    的頭像 發(fā)表于 11-02 10:48 ?2083次閱讀
    C51單片機(jī)的<b class='flag-5'>定時(shí)器</b>介紹

    定時(shí)器定時(shí)啟動(dòng)信號(hào)特點(diǎn)

    定時(shí)器定時(shí)啟動(dòng)信號(hào)特點(diǎn)? 定時(shí)器是一種常用的計(jì)時(shí),可以在指定的時(shí)間后發(fā)出信號(hào)。它們在各種電器、儀器和控制系統(tǒng)中被廣泛應(yīng)用。 定時(shí)器
    的頭像 發(fā)表于 10-24 11:49 ?715次閱讀

    STM32速成筆記(6)—定時(shí)器

    關(guān)于什么是定時(shí)器,簡單來講,就是是用來定時(shí)的。STM32F103ZET6有兩個(gè)基本定時(shí)器TIM6和TIM7,四個(gè)通用定時(shí)器TIM2~TIM5和兩個(gè)高級(jí)
    的頭像 發(fā)表于 10-24 09:41 ?3763次閱讀
    STM32速成筆記(6)—<b class='flag-5'>定時(shí)器</b>