ZYNQ 定時器

一、ZYNQ定時器簡介

????????每個Cortex-A9處理器都有自己的專用32位定時器和32位看門狗定時器。兩個處理器共享一個全局64位定時器。這些計時器的時鐘始終為CPU頻率(CPU_3x2x)的1/2。在系統級,有一個24位看門狗定時器和兩個16位三重定時器/計數器。系統看門狗定時器時鐘在1/4或1/6的CPU頻率(CPU_1x),或可以通過外部信號從MIO引腳或從PL時鐘。兩個三重定時器/計數器總是時鐘1/4或1/6的CPU頻率(CPU_1x),用于計算信號脈沖的寬度一個MIO引腳或從PL。

如下是系統框圖。由此可以發現該2處理器有系統看門狗定時器、有CPU看門狗定時器、CPU私有定時器、全局時鐘定時器、兩個三從定時器。這些定時器都可以觸發中斷。本次實驗任務用到的是CPU處理器的私有定時器觸發中斷。

????????系統框圖。和前面的mio控制led的系統差不多,只是用到了定時器中斷,因此項目工程在原有的項目基礎上另存為后修改一下即可。

二、開發流程

1、?在我們原來的工程MIO LED上不需要修改硬件設計。

2、如過你是拷貝或者復制的原項目到新的目錄下需要修改路徑。第一種可以刪掉SDK文件然后重新建立工程寫代碼。第二種如果你不想刪掉原代碼,只想在此基礎上上修改,就需要修改板級知識包的路徑。方法如下

第二種方法請點擊此處。

3、復制我們的代碼進main.c里面。這里只需要按照你板子的原理圖修改一下MIO引腳即可。代碼不過解釋,想了解的可以查看小梅哥或則正點原子的SOC開發手冊。

/** main.c**  Created on: 2025年9月1日*      Author: 32652*/#include "stdio.h"
#include "xparameters.h"
#include "xgpiops.h"
#include "xscugic.h"
#include "XScuTimer.h"#define GPIO_DEVICE_ID  	XPAR_XGPIOPS_0_DEVICE_ID
#define TIMER_DEVICE_ID		XPAR_XSCUTIMER_0_DEVICE_ID
#define INTC_DEVICE_ID		XPAR_SCUGIC_SINGLE_DEVICE_ID
#define TIMER_IRPT_INTR		XPAR_SCUTIMER_INTR//PS端LED
#define MIO7_LED			7
//我們想要計時的值
#define TIMER_LOAD_VALUE	0x3F94067//333.333MHzXGpioPs_Config *ConfigPtr_gpio;
XGpioPs Gpio;
XScuTimer_Config *ConfigPtr_timer;
XScuTimer timer;
XScuGic_Config *ConfigPtr_inter;
XScuGic inter;
int state=0;int mio_init(XGpioPs_Config *ConfigPtr_gpio,XGpioPs *Gpio)
{//初始化GPIO的驅動ConfigPtr_gpio = XGpioPs_LookupConfig(GPIO_DEVICE_ID);XGpioPs_CfgInitialize(Gpio, ConfigPtr_gpio,ConfigPtr_gpio->BaseAddr);//把GPIO引腳設置為輸出(0:輸入,1:輸出)XGpioPs_SetDirectionPin(Gpio, MIO7_LED, 1);//打開輸出使能XGpioPs_SetOutputEnablePin(Gpio, MIO7_LED, 1);//寫數據到GPIO引腳,由原理圖可知設置為1時候點亮。初始時點亮。XGpioPs_WritePin(Gpio, MIO7_LED, 0x1);return	XST_SUCCESS;
}int timer_init(XScuTimer_Config *ConfigPtr_timer,XScuTimer *timer)
{int Status;//初始化定時器ConfigPtr_timer = XScuTimer_LookupConfig(TIMER_DEVICE_ID);Status = XScuTimer_CfgInitialize(timer, ConfigPtr_timer,ConfigPtr_timer->BaseAddr);if (Status != XST_SUCCESS) {return XST_FAILURE;}//自檢驗Status = XScuTimer_SelfTest(timer);if (Status != XST_SUCCESS) {return XST_FAILURE;}//使能自動裝載模式。XScuTimer_EnableAutoReload(timer);//設置定時器時間XScuTimer_LoadTimer(timer, TIMER_LOAD_VALUE);return XST_SUCCESS;
}void timer_interr_handle(void *CallBackRef)
{XScuTimer *timer = (XScuTimer *) CallBackRef;//XScuTimer_IsExpired這個函數是判斷定時器有沒有過期。if (XScuTimer_IsExpired(timer)){XScuTimer_ClearInterruptStatus(timer);if(state){state=0;XGpioPs_WritePin(&Gpio, MIO7_LED, 0x0);}else{state=1;XGpioPs_WritePin(&Gpio, MIO7_LED, 0x1);}}}int timer_sys_init(XScuGic_Config *ConfigPtr_inter,XScuGic *inter)
{int Status;ConfigPtr_inter = XScuGic_LookupConfig(INTC_DEVICE_ID);if (NULL == ConfigPtr_inter) {return XST_FAILURE;}Status = XScuGic_CfgInitialize(inter, ConfigPtr_inter,ConfigPtr_inter->CpuBaseAddress);if (Status != XST_SUCCESS) {return XST_FAILURE;}Status = XScuGic_Connect(inter, TIMER_IRPT_INTR,(Xil_ExceptionHandler)timer_interr_handle,(void *)&timer);if (Status != XST_SUCCESS) {return Status;}//使能中斷設備。XScuGic_Enable(inter, TIMER_IRPT_INTR);//使能中斷模式XScuTimer_EnableInterrupt(&timer);//處理ARM異常,中斷程序必須有的三個函數Xil_ExceptionInit();Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT,(Xil_ExceptionHandler)XScuGic_InterruptHandler,inter);Xil_ExceptionEnableMask(XIL_EXCEPTION_IRQ);//啟動定時器。中斷系統配置完成再使能。XScuTimer_Start(&timer);return 0;
}int main()
{printf("gpio_mio_test\n");mio_init(ConfigPtr_gpio,&Gpio);timer_init(ConfigPtr_timer,&timer);timer_sys_init(ConfigPtr_inter,&inter);XScuTimer_Start(&timer);while(1);return 0;
}

4、試驗成功。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96084.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96084.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96084.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java8 Comparator接口 和 List Steam 排序使用案例

在Java中,Comparator接口主要用于實現自定義排序邏輯,適用于未實現Comparable接口或需要覆蓋默認比較規則的場景。以下是核心使用方法和注意事項:一、基礎用法?匿名內部類實現?傳統方式通過匿名內部類重寫compare()方法,例如對整…

word2vec模型案例

代碼實現:import torch.optim as optim from tqdm import tqdm, trange import numpy as np import torch from torch import nn import torch.nn.functional as FCONTEXT_SIZE 2raw_text """We are about to study the idea of a computational p…

< 自用文 OS 有關 > (續)發現正在被攻擊 后的自救 Fail2ban + IPset + UFW 工作流程詳解

繼上編:< 自用文 主機 USC 記錄:> 發現正在被攻擊 后的自救-CSDN博客 環境: 改進: 以下是把代碼,懶得寫,扔給了 AI ,讓它出的: Fail2ban IPset UFW 工作…

Linux —— 虛擬進程地址空間

🎁個人主頁:工藤新一 🔍系列專欄:C面向對象(類和對象篇) 🌟心中的天空之城,終會照亮我前方的路 🎉歡迎大家點贊👍評論📝收藏?文章 文章目錄虛…

簡單聊一聊js

JavaScript 是一種高級的、解釋型的編程語言。它是現代 Web 開發的三大核心基石之一,與 HTML 和 CSS 并列。?HTML?:負責網頁的結構和內容?(如標題、段落、圖片)。?CSS?:負責網頁的樣式和布局?(如顏色…

造粒機cad+設計說明書

摘要 隨著現代化工業的快速發展,生產出大量的固體廢棄物。這些廢棄物對環境造成了很大的污染,因此需要采取有效的措施進行處理。機械強壓式造粒機就是一種非常有效的處理工具,它可以將廢渣、廢料、飼料和化肥等材料通過機械強力擠壓&#xff…

第五課 C#語言基本元素概覽,初始類型,變量與方法,算法簡介

熟悉C#語言要求:對構成C#語言的基本元素,隨便拿出一個你都認識,對于常見基本元素,都能正確使用它 精通C#語言要求:對于構成C#語言的基本元素,隨便拿出一個都會使用,對于常用基本元素&#xff0…

LLM學習:大模型基礎——視覺大模型以及autodl使用

1、常見的VLM 在大模型中,VLM 是視覺語言模型(Vision-Language Model)的縮寫,是一種多模態、生成式 AI 模型,能夠理解和處理視頻、圖像和文本。 VLM 通過將大語言模型(LLM)與視覺編碼器相結合構建而成,使 LLM 具有 “看” 的能力,從而可以處理并提供對提示中的…

Vue—路由配置中設置了meta.title,但頁面標題仍然顯示為“Vite App“?【讓我來看看~】

路由配置中明明設置了meta.title,但是頁面標題仍然顯示為"Vite App"?這是因為僅僅在路由配置中設置meta.title是不夠的,還需要在路由守衛中動態設置頁面標題。需要做以下幾件事來正確設置頁面標題:1.首先更新HTML文件的…

【機器學習】綜合實訓(二)

項目五 電影評分預測【教學內容】使用 MovieLens 數據集,訓練一個模型預測用戶對電影的評分。主要有以下幾個知識點:(1)數據加載與探索性分析(EDA)。(2)處理稀疏數據(如用…

STM32 UART + DMA + 空閑中斷使用中的幀錯誤(FE)問題及解決方案

STM32 UART + DMA + IDLE中斷使用中的幀錯誤(FE)問題及解決方案 在我調試STM32H7串口空閑中斷DMA接受時遇到了一個bug,這個現象發生在系統剛上電時,有個串口由于幀錯誤FE掛起了中斷,之后在HAL_UART_IRQHandler這個全局中斷處理函數結束后,所有的中斷使能標志位都被清除了,經過…

TDengine 選擇函數 BOTTOM() 用戶手冊

BOTTOM() 函數用戶手冊 函數定義 BOTTOM(expr, k)功能說明 BOTTOM() 函數統計表/超級表中某列的值最小 k 個非 NULL 值。如果多條數據取值一樣,全部取用又會超出 k 條限制時,系統會從相同值中隨機選取符合要求的數量返回。 返回值 數據類型: 同應用…

西門子 S7-200 SMART PLC 實現星三角降壓啟動控制:原理、案例與完整程序

在工業控制場景中,中型異步電機直接啟動時會產生遠超額定電流的沖擊電流(通常為額定電流的 5-7 倍),不僅會影響電網穩定性,還可能對機械設備造成損傷。星三角(Y-Δ)降壓啟動是解決這一問題的經典…

【Android】View 的基礎知識

【Android】View 的基礎知識 1. 什么是 View? View 是 Android 中所有UI組件的基礎類。它表示屏幕上的一個矩形區域,負責繪制內容和處理用戶交互事件。所有的 UI 組件(如按鈕、文本框等)都是 View 的子類,而 ViewGroup…

西門子 S7-200 SMART PLC 實現電機點動與連續運行綜合控制

在工業生產中,電機控制并非單一模式:調試設備時需要 “按動即轉、松開即停” 的點動功能,正常生產時則需要 “一鍵啟動、持續運行” 的連續控制。本文以西門子 S7-200 SMART PLC 為載體,詳細講解電機點動控制原理,并設…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘sphinx-rtd-theme’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘sphinx-rtd-theme’問題 摘要 在使用 PyCharm 開發 Python 項目時,pip install 報錯是常見痛點。特別是在構建文檔或引入第三方庫時,開…

HakcMyVM-Literal

目錄信息搜集漏洞利用權限提升信息搜集 主機發現 ┌──(kali?kali)-[~] └─$ nmap -sn 192.168.21.0/24 Nmap scan report for 192.168.21.5端口掃描 ┌──(kali?kali)-[~] └─$ nmap -sS -sV -O -p- 192.168.21.5 Starting Nmap 7.95 ( https://nmap.org ) a…

0904 類的繼承

Part 1.梳理思維導圖一.繼承中的特殊成員函數1.構造函數父類的構造函數會被繼承到子類中&#xff0c;在構造的順序中&#xff0c;是先構造父類&#xff0c;再構造子類#include <iostream>using namespace std;class Father { public:string name; protected:int *age; pr…

PDF教程|如何把想要的網頁保存下來?

前段時間有個小伙伴咨詢了小白&#xff1a;領導想要某個網頁的整個頁面&#xff0c;有沒有比較好的方法把它保存下來&#xff1f; 在他找到小白之前&#xff0c;這種事情他已經接到好幾次了&#xff0c;每次都是怎么解決的呢&#xff1f;其實很簡單&#xff0c;就是打開Word&a…

【bash】命令查看當前目錄下文件個數

要用 ls 查看當前目錄下的文件個數&#xff0c;可以結合 wc -l 來統計行數&#xff1a; ls -1 | wc -l說明&#xff1a; ls -1&#xff1a;以一行一個文件的方式列出。wc -l&#xff1a;統計行數&#xff0c;也就是文件/目錄的數量。 ?? 需要注意&#xff1a; 這個方法會把文…