前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GPIO之EMIO控制呼吸灯设计

GPIO之EMIO控制呼吸灯设计

作者头像
根究FPGA
发布2020-06-30 11:16:48
1.2K0
发布2020-06-30 11:16:48
举报
文章被收录于专栏:根究FPGA
一、EMIO简介

EMIO即Extensible Multiply I/O,MIO分配在bank0(32bit,3.3V)和bank1(32bit,1.8V),EMIO分配在bank2(32bit)和bank3(32bit)。在MIO不够时,PS可以通过驱动EMIO控制PL的引脚,由于是PL引脚,所以需要添加引脚约束,在导出到SDK时需要包含bitstream。

在大多数情况下,PS端经由EMIO引出的接口会直接连到PL侧的器件引脚上,通过管脚约束来指定所连接PL引脚的位置。通过这种方式,EMIO可以为PS端实现额外的64个扩展引脚。

EMIO还有一种使用方式就是,连接PL内实现的功能模块(IP core),此时的PL侧的IP作为PS端的一个外部设备,如图所示。

二、工程设计

在处理器系统中添加GPIO_EMIO,引出4个EMIO(米联客7z030-ffg676-2),连接到LED添加管脚约束。

在SDK程序设计中,参考了一下原子的呼吸灯原理,大概就是说不断改变LED的亮灭占空比,实现一个亮灭速度的变化,所以就将led设置为输出使能,之后改变亮灭频率。

我只做了一个LED0的,其他的也是一样,可以自行更改,对于亮灭变化速度可通过调整CYCLE的大小进行调节。

LED的调光系统是利用一个DC信号或者PWM对LED的正向电流进行调节来完成的的,减小LED的电流将起到调节LED光强度的作用,然而正线电流的改变也会改变LED的颜色,因为LED的色度会因为电流的变化而变化。

许多应用中不允许LED发生任何的色彩漂移,通过施加一个PWM信号来控制LED亮度的做法允许在不改变LED色彩的情况下完成LED的调光。

三、SDK工程代码

代码语言:javascript
复制
#include"xparameters.h"
#include"xgpiops.h"
#include"xstatus.h"
#include"xplatform_info.h"
#include<xil_printf.h>
#include<sleep.h>
#define LED0 54 #define LED1 55 #define LED2 56 #define LED3 57
#define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID
#define OUTPUT 1 #define INPUT 0 #define LIGHT 1
#define MIE  0  //不会“灭”这个单词hhhh
void delay(unsignedint time)
{ while(time--);  //not equal 0,wait }
XGpioPs Gpio;  //GPIO驱动实例
int main()
{
 int status;
 XGpioPs_Config *gpiops_cfg_ptr;   //Ps GPIO配置信息
 print("EMIO test!\r\n");
 gpiops_cfg_ptr=XGpioPs_LookupConfig(GPIO_DEVICE_ID);
 status=XGpioPs_CfgInitialize(&Gpio,gpiops_cfg_ptr,gpiops_cfg_ptr->BaseAddr);
 if(status!=XST_SUCCESS) return XST_FAILURE;
 XGpioPs_SetDirectionPin(&Gpio,LED0,OUTPUT);//指定管脚方向 0:input 1:output
 XGpioPs_SetOutputEnablePin(&Gpio,LED0,1); //输出使能
//XGpioPs_LookupConfig(GPIO_DEVICE_ID);
unsignedint CYCLE=6000,PWM;
unsignedint LOW=0;
while(1){
delay(600);
for(LOW=0;LOW<CYCLE;LOW++)
{ //渐渐变亮
     XGpioPs_WritePin(&Gpio,LED0,LIGHT);
     delay(LOW);  //亮的时间越来越多
     XGpioPs_WritePin(&Gpio,LED0,MIE);
     delay(CYCLE-LOW);
}
for(PWM=CYCLE;PWM>0;PWM--)
{
 XGpioPs_WritePin(&Gpio,LED0,MIE); //渐渐变暗
 delay(PWM);    //灭的时间越来越多
 XGpioPs_WritePin(&Gpio,LED0,LIGHT);
 delay(CYCLE-PWM);
}}}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 根究FPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、EMIO简介
  • 二、工程设计
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档