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

FPGA-PS端编程1:

目标

在小梅哥的zynq 7015上,完成以下目标:

读取 S1 按键的电平,
当 S1 按键为按下状态时,驱动 PS LED 以 1S 的频率闪烁(注意理解 1S 的频率闪烁和 1S的时间翻转两种描述之间的差别),
当 S1 释放后,停止闪烁,
确保 S1释放后 PS_LED 处于熄灭状态。↔
通俗点讲,就是 S1 被按下后 PS_LED 就以 1s 的频率闪烁,释放后就熄灭且不再闪烁,

1S 的频率闪烁和 1S的时间翻转两种描述之间的差别

准备

S1按键的相关信息

ps端的s1按键,绑定在ps端的MIO47引脚。

PS端LED的相关信息

PS端的led绑定在MIO7上。

代码和注释

///*
// * main.c
// *
// *  Created on: 2024年12月10日
// *      Author: Administrator
// */
//
//#include "xparameters.h"
//#include "xil_io.h"
//#include "xgpiops.h"
//#include "sleep.h"
//
//int main(void)
//{
//    u32 reg_val = 0;
//    u32 Data = 0;
//
//
 设定IO方向, bit7的方向为输出
//    //  方向寄存器(Direction Mode Register),用于设置GPIO引脚是作为输入还是输出
//    reg_val = Xil_In32(XPAR_PS7_GPIO_0_BASEADDR + XGPIOPS_DIRM_OFFSET);
//    // 读出来的数据,给最高位置1,有点我们always@*模块里面做修改,然后再输出的感觉
//    Data = reg_val | (1<<7);
//    // 再将值重新写入到对应的管脚,实现控制
//    Xil_Out32(XPAR_PS7_GPIO_0_BASEADDR + XGPIOPS_DIRM_OFFSET, Data);
//
 设定输出使能, bit7输出使能
//    // XGPIOPS_OUTEN_OFFSET是 GPIO输出使能寄存器(Output Enable Register)的偏移地址
//    reg_val = Xil_In32(XPAR_PS7_GPIO_0_BASEADDR + XGPIOPS_OUTEN_OFFSET);
//    Data = reg_val | (1<<7);
//    Xil_Out32(XPAR_PS7_GPIO_0_BASEADDR + XGPIOPS_OUTEN_OFFSET, Data);
//
//    while(1)
//    {
//        // 设bit7输出1
//        Data = ((~(1<<7)) << 16) | (1<<7);
//        Xil_Out32(XPAR_PS7_GPIO_0_BASEADDR + XGPIOPS_DATA_LSW_OFFSET, Data);
//        usleep(1000000);
//
//        // 设bit7输出0
//        Data = ((~(1<<7)) << 16) & ~(1<<7);
//        Xil_Out32(XPAR_PS7_GPIO_0_BASEADDR + XGPIOPS_DATA_LSW_OFFSET, Data);
//        // 以微妙为单位进行延时     us  sleep  进率是:s - ms  us ns
//        usleep(3000000);
//    }
//
//    return 0; // 虽然程序中不会运行到此处,一般写return防止编译器警告
//}

//在小梅哥的zynq 7015上,完成以下目标:
//
//读取 S1 按键的电平,
//当 S1 按键为按下状态时,驱动 PS LED 以 1S 的频率闪烁(注意理解 1S 的频率闪烁和 1S的时间翻转两种描述之间的差别),
//当 S1 释放后,停止闪烁,
//确保 S1释放后 PS_LED 处于熄灭状态。↔
//通俗点讲,就是 S1 被按下后 PS_LED 就以 1s 的频率闪烁,释放后就熄灭且不再闪烁,

#include "xgpiops.h"
#include "unistd.h"

XGpioPs Gpio;
XGpioPs_Config *ConfigPtr;

int main(void)
{
    ConfigPtr = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);
    XGpioPs_CfgInitialize(&Gpio, ConfigPtr, ConfigPtr->BaseAddr);

    // 设置PS 端 MIO47管脚的  方向和输出使能
    XGpioPs_SetDirectionPin(&Gpio, 47, 0);   // 设置使能
    XGpioPs_SetOutputEnablePin(&Gpio, 47, 0);

    // 设置PS 端 MIO7管脚的  方向和输出使能
    XGpioPs_SetDirectionPin(&Gpio, 7, 1);   // 设置使能
    XGpioPs_SetOutputEnablePin(&Gpio, 7, 1);

	while(1)
	{
		// 保持读取47号管脚状态,如果拉高,就意味着要开始闪烁,0.5s亮,0.5s灭
		// 因为小梅哥按键是摁下去低电平,平常的时候是高电平,所以前面需要加上一个取反的逻辑
		while (!XGpioPs_ReadPin(&Gpio, 47))
		{
			// 设置bit7输出1
			XGpioPs_WritePin(&Gpio, 7, 0x1);
			// 持续亮0.5s
			usleep(500000);

			// 设置bit7输出0
			XGpioPs_WritePin(&Gpio, 7, 0x0);
			// 持续灭0.5s
			usleep(500000);
		}

	}

    return 0;
}





http://www.kler.cn/a/442471.html

相关文章:

  • RabbitMQ的工作模式
  • 字符串提取数字求和⭐
  • 项目练习:若依管理系统字典功能-Vue前端部分
  • ip属地是根据手机号还是位置
  • DeepSeek-V3技术报告
  • 【2025最新】机器学习类计算机毕设选题80套,适合大数据,人工智能
  • Ubuntu20.04解决docker安装后is the docker daemon running? 问题
  • go语言压缩[]byte数据为zlib格式的时候,耗时较多,应该怎么修改?
  • Java 网络初始 ①-OSI七层网络模型 || 网络通信 || 五元组 || 协议分层
  • 通过增强的 vSphere 集成增强你的 vSphere 监控
  • Postman接口测试:全局变量/接口关联/加密/解密
  • Redis性能调优:深入剖析变慢原因及应对策略
  • Next.js流量教程:如何在 Next.js 中使用 React Helmet 管理 SEO Meta 标签
  • Django基础之中间件
  • 【后端面试总结】进程间通信的方法
  • RPA自动化:如何让你的电商营销活动更精准、更高效?【52rpa.com】
  • linux指定特定用户执行命令
  • 深入探索Vue.js中的v-bind指令:属性绑定与动态渲染的核心机制
  • Mac升级macOS 15 Sequoia后,无法ssh连接本地虚拟机
  • spring boot框架优劣势分析
  • windows下安装及使用labelme
  • 机器学习之方差与标准差
  • 【ETCD】【Linearizable Read OR Serializable Read】ETCD 数据读取:强一致性 vs 高性能,选择最适合的读取模式
  • linux tomcat安装
  • ORB-SLAM3源码学习:G2oTypes.cc: void EdgeInertial::linearizeOplus计算残差对状态增量的雅克比矩阵
  • POSTGRESQL版本测试