【AMD Xilinx】ZUBoard(6):PS端的IO读写

2024-01-05 08:04

本文主要是介绍【AMD Xilinx】ZUBoard(6):PS端的IO读写,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【AMD Xilinx】ZUBoard(6):PS端的IO读写

  • 一、本项目实现的功能
  • 二、原理图和对应的IO
    • 1. SW4
    • 2. 按键SW1
    • 3. 红色LED4个
  • 三、例程:跑马灯
  • 四、例程:拨动开关、按键、LED三者联动

一、本项目实现的功能

前面已经实现了网络通讯、PL端的按键读取和点亮LED。这篇我们研究如何处理PS端的IO

二、原理图和对应的IO

1. SW4

4位拨动开关,拨到ON的时候电阻分压为高电平,拨到OFF的时候下拉到地为低电平
MIO44 40 39 31

在这里插入图片描述

2. 按键SW1

MIO32
没按下的时候是1,按下后导通到地是0。因此是反相逻辑
在这里插入图片描述

3. 红色LED4个

PCB上的排列顺序从左到右依次为D9 D8 D7 D6
对应MIO为07 24 25 33
高电平MOS管导通,LED点亮。低电平不导通,LED不亮。

N沟道mos和P沟道mos参考下面链接,可以简单理解为电子开关
https://zhuanlan.zhihu.com/p/654353204

在这里插入图片描述

三、例程:跑马灯

ps端的gpio控制与pl类似,只是函数和变量都多了Ps前缀

比如初始化函数:
XGpioPs_CfgInitialize

下面是实现4个LED跑马灯效果

#define LED_MAX_BLINK		10000
static u32 mio_in_sw1 = 32; /* Switch button */
static u32 mio_in_sw4[4] = {44, 40, 39, 31};
static u32 mio_out_led[4] = {7, 24, 25, 33};static int ps_gpio_out_led(void)
{u32 Data;u32 LedLoop;XGpioPs Ps_gpio_output;int i;int Status;XGpioPs_Config *ConfigPtr;ConfigPtr = XGpioPs_LookupConfig(XPAR_XGPIOPS_0_DEVICE_ID);Status = XGpioPs_CfgInitialize(&Ps_gpio_output, ConfigPtr,ConfigPtr->BaseAddr);if (Status != XST_SUCCESS) {xil_printf("PS Gpio Output Initialization Failed\r\n");return XST_FAILURE;}/** Set the direction for the pin to be output and* Enable the Output enable for the LED Pin.*/for(i = 0; i < 4; i++){XGpioPs_SetDirectionPin(&Ps_gpio_output, mio_out_led[i], 1);XGpioPs_SetOutputEnablePin(&Ps_gpio_output, mio_out_led[i], 1);/* Set the GPIO output to be low. */XGpioPs_WritePin(&Ps_gpio_output, mio_out_led[i], 0x0);}for (LedLoop = 0; LedLoop < LED_MAX_BLINK; LedLoop ++) {for(i = 0; i < 4; i++){XGpioPs_WritePin(&Ps_gpio_output, mio_out_led[i], 0x1);Data = XGpioPs_ReadPin(&Ps_gpio_output, mio_out_led[i]);if (Data != 1 ) {return XST_FAILURE;}delay_ms(100);XGpioPs_WritePin(&Ps_gpio_output, mio_out_led[i], 0x0);Data = XGpioPs_ReadPin(&Ps_gpio_output, mio_out_led[i]);if (Data != 0) {return XST_FAILURE;}delay_ms(20);}}return XST_SUCCESS;
}

四、例程:拨动开关、按键、LED三者联动

程序逻辑:

  1. SW1没按下时,拨动开关的4位与4个LED联动:拨到ON,对应的LED亮。拨到OFF,对应的LED灭
  2. SW1按下时,4个LED全亮
static u32 mio_in_sw1 = 32;
static u32 mio_in_sw4[4] = {44, 40, 39, 31};
static u32 mio_out_led[4] = {7, 24, 25, 33};int test_ps_io_in_out(void)
{u32 data;u32 data1;u32 sw1;XGpioPs Ps_gpio_output;XGpioPs Ps_gpio_input;int i;int Status;XGpioPs_Config *ConfigPtr;ConfigPtr = XGpioPs_LookupConfig(XPAR_XGPIOPS_0_DEVICE_ID);Status = XGpioPs_CfgInitialize(&Ps_gpio_output, ConfigPtr,ConfigPtr->BaseAddr);if (Status != XST_SUCCESS) {xil_printf("PS Gpio output Initialization Failed\r\n");return XST_FAILURE;}for(i = 0; i < 4; i++){XGpioPs_SetDirectionPin(&Ps_gpio_output, mio_out_led[i], 1);XGpioPs_SetOutputEnablePin(&Ps_gpio_output, mio_out_led[i], 1);/* Set the GPIO output to be low. */XGpioPs_WritePin(&Ps_gpio_output, mio_out_led[i], 0x0);}Status = XGpioPs_CfgInitialize(&Ps_gpio_input, ConfigPtr,ConfigPtr->BaseAddr);if (Status != XST_SUCCESS) {xil_printf("PS Gpio input Initialization Failed\r\n");return XST_FAILURE;}for(i = 0; i < 4; i++){XGpioPs_SetDirectionPin(&Ps_gpio_input, mio_in_sw4[i], 0);//0输入}XGpioPs_SetDirectionPin(&Ps_gpio_input, mio_in_sw1, 0);//0输入while(1){//sw1按下时为0,没按的时候为1sw1 = XGpioPs_ReadPin(&Ps_gpio_input, mio_in_sw1);if(0 == sw1){//sw1按下时4个灯全部点亮for(i = 0; i < 4; i++){XGpioPs_WritePin(&Ps_gpio_output, mio_out_led[i], 1);}delay_ms(100);}else{for(i = 0; i < 4; i++){data = XGpioPs_ReadPin(&Ps_gpio_input, mio_in_sw4[i]);data = XGpioPs_ReadPin(&Ps_gpio_input, mio_in_sw4[i]);XGpioPs_WritePin(&Ps_gpio_output, mio_out_led[i], data);data1 = XGpioPs_ReadPin(&Ps_gpio_output, mio_out_led[i]);if (data1 != data ) {return XST_FAILURE;}delay_ms(100);}}}return XST_SUCCESS;
}

a

这篇关于【AMD Xilinx】ZUBoard(6):PS端的IO读写的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/572199

相关文章

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

10. 文件的读写

10.1 文本文件 操作文件三大类: ofstream:写操作ifstream:读操作fstream:读写操作 打开方式解释ios::in为了读文件而打开文件ios::out为了写文件而打开文件,如果当前文件存在则清空当前文件在写入ios::app追加方式写文件ios::trunc如果文件存在先删除,在创建ios::ate打开文件之后令读写位置移至文件尾端ios::binary二进制方式

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

springboot体会BIO(阻塞式IO)

使用springboot体会阻塞式IO 大致的思路为: 创建一个socket服务端,监听socket通道,并打印出socket通道中的内容。 创建两个socket客户端,向socket服务端写入消息。 1.创建服务端 public class RedisServer {public static void main(String[] args) throws IOException {

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

android java.io.IOException: open failed: ENOENT (No such file or directory)-api23+权限受权

问题描述 在安卓上,清单明明已经受权了读写文件权限,但偏偏就是创建不了目录和文件 调用mkdirs()总是返回false. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_E

关于使用cspreadsheet读写EXCEL表格数据的问题

前几天项目有读写EXCEL表格的需求,我就找了大概有几种,大致分为:COM方法、ODBC方法、OLE方法、纯底层格式分析方法。由于COM方法要求必须安装有OFFICE的EXCEL组件,纯底层格式分析方法又很多功能需要自行去完善,所有最终选择了数据库的方法,用数据库的方法去存取xls格式的数据。网上有一个高手写的CSpreedSheet,看了一下提供的接口,感觉挺好用的。在使用的过程中发现几个