摸鱼碎碎念: | 需要做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编程~