IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> ZYNQ 定时器中断实验——FPGA Vitis篇 -> 正文阅读

[嵌入式]ZYNQ 定时器中断实验——FPGA Vitis篇


1. 前言

本实验介绍如何使用ZYNQ芯片PS端的定时器资源。通过定时器来每秒触发一次定时器中断,并通过中断服务函数给串口打印一条信息。

ZYNQ芯片中有两个Cortex-A9处理器,每个Cortex-A9处理器都有自己私有的32位定时器和32位看门狗定时器。两个处理器共享一个64位的全局定时器。这些定时器的工作时钟频率为CPU工作时钟频率的一半。

本实验使用的定时器为Cortex-A9处理器的私有定时器,即下图中的“CPU Private Timer”,ZYNQ定时器结构图如下图所示:
在这里插入图片描述


2. 中断介绍

Zynq中断大致可分为三个部分,如下图所示:
在这里插入图片描述
第一部分,SGI,软件生成的中断,共16个端口;
第二部分,为PPI,CPU私有外设中断,有5个;
第三部分,为 SPI,共享外设中断,来自于44个PS端的IO外设以及16个PL端的中断。
中断控制器(GIC),用于对中断进行使能、关闭、掩码、设置优先等。

以下为中断控制器框图,主要的控制器部分为ICC和ICD,ICC连接SGI和PPI, ICD连接SPI,可配置两者的寄存器来控制中断。
在这里插入图片描述

2.1. SGI中断(软件产生中断)

每个CPU可以使用软件生成的中断(SGI)中断自己、另一个CPU或两个CPU。软件产生的中断共有16个,如下表所示。 通过编写SGI中断号至ICDSGIR寄存器可以指定相应的CPU产生SGI中断。
在这里插入图片描述

2.2. PPI中断(CPU私有外设中断)

每个CPU有5个私有的外设中断,如下表所示,共5个IRQ ID号。
在这里插入图片描述

2.3. SPI中断

共享的外设中断如下表所示,共60个IRQ ID号。
在这里插入图片描述
在这里插入图片描述

3. Vivado工程编写

虽然本实验仅仅使用了FPGA的PS端,但是还要建立一个Vivado工程,用来配置PS管脚。虽然PS端的ARM是硬核,但是在ZYNQ当中也要将ARM硬核添加到工程当中才能使用。本实验使用的Vivado版本为Vivado2021.1。

本实验使用的Vivado工程同《ZYNQ 串口打印输出——FPGA Vitis篇》中使用的Vivado工程相同,大家可以查看该文章来了解Vivado工程的建立。

4. Vitis工程编写

(1)打开Vitis工程;
Vitis工程也延用《ZYNQ 串口打印输出——FPGA Vitis篇》中使用的Vitis工程。打开Vitis工程,点击“Board Support Package”,通过选择“ps7_scutimer_0”的“Import Examples”,可以导入官方提供的定时器中断例程。
在这里插入图片描述
在这里插入图片描述
(2)选择“xscutimer_intr_example”,导入定时器中断例程。
(3)通过Xilinx官方文档UG585可知,Cortex-A9处理器自己私有的32位定时器工作时钟频率为CPU工作时钟频率的一半。实验使用的ZedBoard的CPU工作时钟频率为666.667MHz,即定时器的时钟频率为333.333MHz。
在这里插入图片描述
因此,如果我们想实现每1秒钟触发1次定时器中断,可以将“TIMER_LOAD_VALUE”宏修改为333333333。
在这里插入图片描述
(4)我们想让定时器每1秒触发一次中断,并且触发10次后停止。需要修改的代码如下:
ScuTimerIntrExample”函数中,将TimerExpired次数修改为10。
在这里插入图片描述
TimerIntrHandler”函数中,增加打印信息,将TimerExpired次数修改为10。
在这里插入图片描述
(5)编译工程,将工程下载到硬件板卡上(编译和下载方式见《ZYNQ 串口打印输出——FPGA Vitis篇》),打开串口助手。串口助手将在每秒收到板卡发来的信息,总共收到10次。
在这里插入图片描述

5. 实验总结

了解一下中断控制器的使用,主要分为几个步骤:
(1)初始化中断控制器GIC;
在这里插入图片描述
(2)初始化中断异常;
在这里插入图片描述
(3)中断服务函数注册;
在这里插入图片描述
(4)在中断控制器中使能中断;
在这里插入图片描述
(5)使能外设中断;
在这里插入图片描述
(6)使能中断异常。
在这里插入图片描述

有两步需要注意,在中断控制器中使能中断是要根据中断号使能相应的中断,比如本实验介绍的Timer为私有定时器,中断号为29,是在中断控制器GIC中的操作。
如果是外设中断,需要在外设中打开它的中断,正常情况下是不打开的,打开之后就可以产生中断传递到中断控制器GIC。

6. 工程源码下载

该工程对应的源码可以通过关注该微信公众号,找到对应的原创文章进行下载,工程采用的是Vivado2021.1版本。
如果大家对我们的文章感兴趣,可以关注我们的微信公众号:“图灵研究院”:
在这里插入图片描述

参考文献:
[1] http://www.alinx.com.cn/.
[2] Zynq-7000 SoC Technical Reference Manual(UG585). Xilinx官方文档
[3] ZYNQ 串口打印输出——FPGA Vitis篇. 图灵研究院

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-28 11:27:35  更:2021-11-28 11:28:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:29:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码