精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

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

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

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

在系統層面,有一個 24 位看門狗定時器和兩個 16 位三重定時器/計數器。

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

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

下圖顯示了系統定時器的關系

本文重點說一下全局定時器。

全局定時器

全局定時器是一個 64 位的具有自動遞增功能的遞增計數器。

全局定時器是內存映射到與私有定時器相同的地址空間。

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

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

計時

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

寄存器概述

有關GTC的注冊概述如下表

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

全局定時器寄存器概述

怎么使用?

下面兩個函數是在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;

}

官方已經把全局定時器自動初始化好了,其頻率為CPU頻率的一半。

定義全局定時器的7個寄存器全部按照地址進行了宏定義,采用xil_io.h里的out32和in32兩個函數進行讀寫操作:

#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

接下來進行全局定時器的初始化和中斷函數綁定:

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

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

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

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

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);//加載遞增寄存器數值

Status = XScuGic_Connect(IntcInstancePtr, Global_Timer_INTR,

(Xil_ExceptionHandler)TimerIntrHandler,

0);//綁定全局定時器中斷服務函數

if (Status != XST_SUCCESS)

{

return Status;

}

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

XScuGic_Enable(IntcInstancePtr, Global_Timer_INTR);//打開全局定時器中斷(27號)

主程序中打開全局定時器開始計時

GT_Write_Reg(Global_Timer_Control_Register,//啟動全局定時器

Auto_Increment_Bit|IRQ_Enable_Bit|Comp_Enable_Bit|Timer_Enable_Bit);

總結

全局定時器一共7個寄存器,打開SDK再想看看對應的BSP文檔時就會發現還是很復雜的。

編輯:jq

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

    關注

    68

    文章

    19178

    瀏覽量

    229201
  • 寄存器
    +關注

    關注

    31

    文章

    5325

    瀏覽量

    120052
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10829

    瀏覽量

    211196
  • 計數器
    +關注

    關注

    32

    文章

    2254

    瀏覽量

    94372
  • 定時器
    +關注

    關注

    23

    文章

    3241

    瀏覽量

    114517

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

文章出處:【微信號:leezym0317,微信公眾號:FPGA開源工作室】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    dac3174與xilinx zynq7000系列連接,fpga的案例參考代碼有沒有?

    dac3174與xilinx zynq7000系列連接,fpga的案例參考代碼有沒有? tsw1400_lvds_dac_sample_wise_restored的代碼寫的實在太難度了,一句注釋都沒有
    發表于 11-25 06:04

    當ADC3663的LVDS輸出給到ZYNQ-7000的LVDS接收這兩者之間可以直連嗎?

    ADC3663的LVDS差分輸出與xilinx的ZYNQ-7000的LVDS輸入的電平匹配問題 ADC3663的供電是1.8V,ADC3663的LVDS輸出給到ZYNQ-7000的BANK12
    發表于 11-14 07:43

    Xilinx ZYNQ 7000系列SoC的功能特性

    本文介紹下Xilinx ZYNQ 7000系列SoC的功能特性、資源特性、封裝兼容性以及如何訂購器件。
    的頭像 發表于 10-24 15:04 ?368次閱讀
    Xilinx <b class='flag-5'>ZYNQ</b> <b class='flag-5'>7000</b><b class='flag-5'>系列</b>SoC的功能特性

    [XILINX] 正點原子ZYNQ7035/7045/7100開發板發布、ZYNQ 7000系列、雙核ARM、PCIe2.0、SFPX2!

    正點原子FPGA新品ZYNQ7035/7045/7100開發板,ZYNQ 7000系列、雙核ARM、PCIe2.0、SFPX2! 正點原子Z100
    發表于 09-02 17:18

    定時器的工作方式介紹

    定時器是計算機和嵌入式系統中常見的一種硬件模塊,用于實現定時和計數功能。定時器的工作方式通常由一組寄存來控制,這些寄存定義了
    的頭像 發表于 07-12 10:29 ?752次閱讀

    定時器相關的寄存有哪些類型

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

    簡談Xilinx Zynq-7000嵌入式系統設計與實現

    今天給大俠帶來簡談Xilinx Zynq-7000嵌入式系統設計與實現,話不多說,上貨。 Xilinx的ZYNQ系列FPGA是二種看上去對立面的思想的融合,ARM處理的串行執
    發表于 05-08 16:23

    Xilinx ZYNQ 動手實操演練

    。可編程邏輯可由用戶配置,并通過“互連”模塊連接在一起,這樣可以提供用戶自定義的任意邏輯功能,從而擴展處理系統的性能及功能。不過,與采用嵌入式處理的FPGA不同,Zynq-7000產品系列
    發表于 05-03 19:28

    如何實現一個軟件定時器

    在Linux,uC/OS,FreeRTOS等操作系統中,都帶有軟件定時器,原理大同小異。典型的實現方法是:通過一個硬件定時器產生固定的時鐘節拍,每次硬件定時器中斷到,就對一個全局的時間
    的頭像 發表于 04-29 11:00 ?592次閱讀

    Zynq-7000為何不是FPGA?

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

    簡談Xilinx Zynq-7000嵌入式系統設計與實現

    今天給大俠帶來簡談Xilinx Zynq-7000嵌入式系統設計與實現,話不多說,上貨。 Xilinx的ZYNQ系列FPGA是二種看上去對立面的思想的融合,ARM處理的串行執
    發表于 04-10 16:00

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

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

    使用555定時器的可調雙定時器電路

    定時器 IC 555 是最通用和最常用的 IC 之一,因為它的應用范圍更廣,如 PWM放大器、延遲定時器、開關電路、占空比選擇、時鐘脈沖發生等。這也可用于各種應用,如精確
    的頭像 發表于 02-25 15:16 ?2041次閱讀
    使用555<b class='flag-5'>定時器</b>的可調雙<b class='flag-5'>定時器</b>電路

    AT32 定時器配置中pr和div的作用

    AT32定時器是51系列單片機中的一種定時器,可以實現多種定時功能。在AT32定時器中,pr和div是兩個相關的參數,用于配置
    的頭像 發表于 01-08 10:12 ?1238次閱讀

    定時器會阻塞線程嗎 定時器指令有哪幾種

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