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