当前位置: 首页 > news >正文

zynq PS点灯

摸鱼碎碎念:

需要做ADC采集并在TFT屏幕实时显示波形(简易示波器)

发现只使用fpga实现比较困难

使用的是zynq,刚好来把arm部分也学到

参考视频

     与

教材文档

01_Zynq SoC FPGA的诞生_哔哩哔哩_bilibili

(这是俺点开AXI4接口协议后发现的系列视频教程T_T)

03_【裸机教程】基于C编程的Zynq裸机程序设计与应用教程v2.4.5.pdf

【产品资料】【Zynq开发板】小梅哥ACZ702开发板全套资料下载 - ACZ702开发板 - 芯路恒电子技术论坛 - Powered by Discuz! (corecourse.cn)

(这个在网盘下载就好)

zynq ug585文档下载链接:

ug585-Zynq-7000-TRM.pdf · adba5616e0bc482c1dc162123773ced75670d679 · POZ_FPGA / hardware · GitLab

(这是俺在edge随便找的,俺安装vivado的那个找不到T_T)

小梅哥裸机编程课程笔记链接:【zynq裸机编程课程笔记合集】 - ACZ702开发板 - 芯路恒电子技术论坛 - Powered by Discuz! (corecourse.cn)

1. 今日摸鱼任务

实现PS端点灯

第一次走流程搞了很久,也踩了一些坑,记录一下摸鱼历程

//本次先走一下流程

        //具体C程序编写下次发

2. zynq开发流程

3.  vivado基础配置设置   xc7z010clg400-1 

        //先搞完fpga部分,再搞arm       

①创建工程    

                                      xc7z010clg400-1 

②创建模块设计

③构建硬件系统

添加并配置IP核

注意上面的电平!!!!!
设置后,图形界面就会出现一个小对号

点击OK,可以得到:多了配置好的GPIO_0

导出引脚

④生成封装

然后可以得到:

⑤管脚约束

在管脚约束界面中,我们需要做的是对使用到的 PL 端的管脚进行分配并对管脚电平进行约束,本次设计所涉及到的为 PL 端的按键和 PL 端的 LED 灯:

Ctrl + S

⑥生成比特流

⑦导出硬件

⑧启动SDK

4. CPU软件程序设计

①创建SDK工程

此时,多了两个文件夹

②添加应用库

//这里是按照  03_【裸机教程】基于C编程的Zynq裸机程序设计与应用教程v2.4.5.pdf

所以与视频课程不太相同

【产品资料】【Zynq开发板】小梅哥ACZ702开发板全套资料下载 - ACZ702开发板 - 芯路恒电子技术论坛 - Powered by Discuz! (corecourse.cn)

(这个在网盘下载就好)

工程创建完成后新建一个 ACZ702_Lib 文件夹,用来存放提供的库。
路径如下: 小梅哥 ACZ702 Zynq 开发板资料 \ 盘A_ACZ702 开发板标准配套资料 \02_ 设计实例 \03_ 【裸机例程】基于 C 编程的 Zynq 裸机例程 \ ACZ702_Lib
//这个网盘路径自己下载哈,不是放的链接。
通用中断控制器和私有定时器是 Zynq 上十分常用的资源,在 SDK 中就可以直接配置使用,因此在我们的设计中都会默认加上 SCU 应用库。本次设计虽然没有使用到这两个资源,但是考虑到工程的适用性,将会添加 SCU 应用库(但是并没有使用)。
PS_GPIO SCU 拷贝到 ACZ702_Lib 中,
USER 文件夹下的文件拷贝 到 src 下,

③添加头文件路径

会出现

(这里是有一定的小问题的,就是俺有时候会不现实,重新操作一下又就有显示了,俺还没有搞懂)

这里注意选择到PS_GPIO 、 SCU 、USER三个文件夹处就OK

要重复三次

④添加用户代码

在main.c中:
/*
* 使用 PS_GPIO 实现了按键控制 LED 功能 :
* PS 端按键按下 →PL 端的灯亮起,松开熄灭
* PL 端按键按下 →PS 端的灯亮起,松开熄灭
*/
#include "COMMON.h"
int main ( void )
{
u8 State; // 存放按键 (MIO47) 的电平状态, 0 为低电平, 1 为高电平
PS_GPIO_Init (); // 初始化 PS MIO EMIO
// 设置 PS_LED(MIO7) 为输出并且初始为低电平
PS_GPIO_SetMode (PS_LED, OUTPUT, 0 );
// 设置 PL_LED(EMIO0) 为输出并且初始为低电平
PS_GPIO_SetMode (PL_LED, OUTPUT, 0 );
PS_GPIO_SetMode (PS_KEY, INPUT, 0 ); // 设置 PS_KEY(MIO47) 方向为输入
PS_GPIO_SetMode (PL_KEY, INPUT, 0 ); // 设置 PL_KEY(EMIO1) 方向为输入
while ( 1 )
{
// 读取 PS_KEY 的电平值并存储到 State 变量里
State = PS_GPIO_GetPort (PS_KEY);
// State 变量的值取非赋予 PL_LED 来输出
PS_GPIO_SetPort (PL_LED,!State);
// 读取 PL_KEY 的电平值并存储到 State 变量里
State = PS_GPIO_GetPort (PL_KEY);
// State 变量的值取非赋予 PS_LED 来输出
PS_GPIO_SetPort (PS_LED,!State);
}
return 0 ;
}
可以调整字体大小
打开 COMMON.h ACZ702 头文件下添加本次设计所使用库的头文件声明,这里已经预先对 ISR.h SCU_GIC.h SCU_TIMER.h 进行了声明,所以只需添加 PS_GPIO.h 即可。
#include "PS_GPIO.h"
接下来在用户宏定义下添加 GPIO 的定义,代码如下:
//MIOn 对应的 GPIO 编号为 n
#define PS_LED 7 //MIO_LED MIO7 ,对应的 GPIO 编号为 7
#define PS_KEY 47 //MIO_KEY MIO47 ,对应的 GPIO 编号为 47
//EMIOn 对应的 GPIO 编号为 54+n ,因为 MIO 总数为 54 EMIO 是从 54 开始算的
#define PL_LED ( 54 + 0 ) //EMIO_LED EMIO0 ,对应的 GPIO 编号为 54+0=54
#define PL_KEY ( 54 + 1 ) //EMIO_KEY EMIO1 ,对应的 GPIO 编号为 54+1=55
Ctrl+S 保存设计, SDK 会自动编译,在确认编译无误后,接下来便可以开始进行板级验证了。

5.板级验证

连接好开发板

//摸鱼结束!!!

//过程还是遇到了很多弯弯绕绕

//下次学习C编程~

相关文章:

  • java自学阶段一:基础知识学习
  • 【Qt之·类QCoreApplication】
  • Python - 字典(无序、复制)
  • 尝试编译 AMD ROCm 的 llvm-project
  • 数学建模 —— 层次分析法(2)
  • 新项目来了,JDK 17和JDK 21 该如何选择?
  • 浅谈JavaScript中的对象赋值
  • LabVIEW中PID控制器系统的噪声与扰动抑制策略
  • 扫码报名活动时,如何避免重复报名?
  • Java18新特性有哪些
  • Django视图层探索:GET/POST请求处理、参数传递与响应方式详解
  • LVS精益价值管理系统 DownLoad.aspx 任意文件读取漏洞复现
  • Unity中的MVC框架
  • C++ lambda表达式的作用和代码示例
  • autodl服务器中YOLOx训练自己数据集
  • 【笔记】你不知道的JS读书笔记——Promise
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • angular组件开发
  • chrome扩展demo1-小时钟
  • ES6--对象的扩展
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • supervisor 永不挂掉的进程 安装以及使用
  • Vultr 教程目录
  • 初探 Vue 生命周期和钩子函数
  • 关于 Cirru Editor 存储格式
  • 欢迎参加第二届中国游戏开发者大会
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 今年的LC3大会没了?
  • 目录与文件属性:编写ls
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 三栏布局总结
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 手机端车牌号码键盘的vue组件
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 与 ConTeXt MkIV 官方文档的接驳
  • 正则表达式
  • 正则表达式小结
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 阿里云ACE认证学习知识点梳理
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • (07)Hive——窗口函数详解
  • (21)起落架/可伸缩相机支架
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (void) (_x == _y)的作用
  • (补)B+树一些思想
  • (分布式缓存)Redis分片集群
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (新)网络工程师考点串讲与真题详解
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • .aanva
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则