微机原理实验——并行IO接口(一)

简介: 微机原理实验——并行IO接口(一)

前言


课程名称:模拟电路与数字系统(三)实验


实验项目名称:并行IO接口设计


实验任务


1.基于嵌入式MicroBlaze微处理器设计一个同时支持多种并行IO设备工作的嵌入式MIMO系统,采用FPGA开发板Nexys4。该系统的基本输入输出设备有:16个独立LED灯,16个独立开关、5个独立按键,8个七段数码管,外设接口电路如图1所示:

· 要求所有外设都通过GPIO连接到MicroBlaze微处理器构成的计算机系统的同一总线上。分别通过程序控制方式和并行IO接口中断方式实现不同的功能:


2.程序控制方式实现:

嵌入式计算机系统将独立按键以及独立开关作为输入设备,LED

灯作为输出设备,实现以下功能:

(1) 按下BTNC 按键时,计算机读入一组16

位独立开关状态作为第一个输入的二进制数据,并即时显示输入的二进制数到16 位LED

灯上。(没有按下BTNC按键时,开关拨动不读入数据)

(2) 按下BTNR 按键时,计算机读入另一组16

位独立开关状态作为第二个输入的二进制数据,并即时显示输入的二进制数到16 位LED

灯上。(没有按下BTNR按键时,开关拨动不读入数据)

(3) 按下BTNU 按键时,将保存的2

组二进制数据做无符号加法运算,并将运算结果输出到LED 灯对应位。

(4) 按下BTND 按键时,将保存的2

组二进制数据做无符号乘法运算,并将运算结果输出到LED 灯对应位。

(程序控制方式提示:循环读取按键键值,根据按键的值读取开关状态,并做相应处理。)


3.并行IO接口中断方式实现:

嵌入式计算机系统将独立按键以及独立开关作为输入设备,七段数码管作为输出设备。实现以下功能:

(1) 按下BTNC 按键时,计算机读入一组16

位独立开关状态作为一个二进制数据,并将该二进制数的低8 位对应的二进制数值0

或1 显示到8 个七段数码管上。

(2) 按下BTNU 按键时,计算机读入一组16

位独立开关状态作为一个二进制数据,并将该16 进制数据各位数字对应的字符0~F

显示到低4 位七段数码管上(高4 位七段数码管不显示)。

(3) 按下BTND 按键时,计算机读入一组16

位独立开关状态作为一个二进制数据,并将该数据表示的无符号十进制数各位数字对应的字符0~9

显示到低5 位七段数码管上(高3 位七段数码管不显示)。


设计各种控制方式下的控制程序(要求设计程序框架结构、各个函数之间的关联关系、各个函数的执行流程图并说明原因、写出程序源代码)。


实验目的


1.掌握GPIOIP核的工作原理;

2.掌握IO接口程序控制方法;

3.掌握中断控制方式的10接口设计原理;

4.掌握中断程序设计方法。


实验环境


1.Windows 10操作系统 ;

2.嵌入式软件开发平台:Vivado 2018.1

3.硬件平台开发板:Xilinx Nexys4。


设计方案


(1) 程序控制方式实现任务1:

任务1中共有两种输入设备,一种输出设备:分别是独立按键以及独立开关作为输入设备,LED

灯作为输出设备。

采用程序控制方式实现时,只需要一个主程序来实现,在主程序中设置GPIO各个通道的工作模式,并开始循环读取按键状态,如果按键状态改变,则根据按键的不同值,进入不同的if语句,来实现相应的功能:

1.当按键值为0x10,即BTNC被按下时,读取此时对应开关状态,存为csw1,并将其显示在LED灯上;

2.当按键值为0x10,即BTNR被按下时,读取此时对应开关状态,存为csw2,并将其显示在LED灯上;

3.当按键值为0x10,即BTNU被按下时,结果取r1 = csw1 +

csw2,并将结果r1显示在LED灯上;

4.当按键值为0x10,即BTND被按下时,结果取r2 = csw1

*csw2,并将结果r2显示在LED灯上.


流程图如图2所示:



图2 程序控制方式主程序流程图


(2) 并行IO接口中断控制方式实现任务2:

分析题目可知,主要需要实现2个任务:


① 七段数码管动态显示:


七段数码管动态显示电路也需要硬件定时中断,动态显示利用视觉暂留效应,定时间隔不能被人察觉,使用Timer_0,中断程序为:Timer_0中断时,中断事务处理为点亮当前位置的七段数码管,即输出当前位置的七段数码管段码和位码,并且将七段数码管点亮位置修改为下一位。其中,Timer_0的定时间隔需满足视觉暂留效应要求即可。


② 开关与按键状态输入:


开关状态输入以及按键状态输入都在按键的GPIO中断事务处理实现。按键的GPIO中断事务处理除了读入开关状态的功能外,还需根据开关状态更新七段数码管显示缓冲区。


所以,控制程序可以分为四个函数,他们的层级结构如图3所示:



其中,各个函数的功能与流程如下所示:


①中断初始化程序:


功能与流程图如图4所示:



②总中断服务程序:


功能与流程图如图5所示:



③Timer_0的中断事务处理函数:


功能与流程图如图6所示:


④按键的中断事务处理函数:


功能与流程图如图7所示:


图7 按键的中断事务处理函数流程图

目录
相关文章
|
存储 传感器 数据可视化
【软件设计师备考 专题 】IO接口的功能、类型和特性
【软件设计师备考 专题 】IO接口的功能、类型和特性
941 1
|
监控 应用服务中间件 Linux
掌握并发模型:深度揭露网络IO复用并发模型的原理。
总结,网络 I/O 复用并发模型通过实现非阻塞 I/O、引入 I/O 复用技术如 select、poll 和 epoll,以及采用 Reactor 模式等技巧,为多任务并发提供了有效的解决方案。这样的模型有效提高了系统资源利用率,以及保证了并发任务的高效执行。在现实中,这种模型在许多网络应用程序和分布式系统中都取得了很好的应用成果。
347 35
|
消息中间件 监控 算法
用Apifox调试Socket.IO接口,从原理到实践
传统HTTP协议"请求-响应"的离散式通信机制已难以满足需求,这正是Socket.IO这类实时通信框架的价值所在。
用Apifox调试Socket.IO接口,从原理到实践
|
JSON 测试技术 网络安全
如何调试 Socket.IO 接口?图文教程
Socket.IO 是一个用于实现低延迟、双向和基于事件通信的库,广泛应用于实时应用开发中。有效测试 Socket.IO 接口对于确保应用稳定性和功能正确性至关重要。本文介绍如何使用 Apifox 轻松进行 Socket.IO 接口测试,包括新建接口、监听事件、发送消息、配置握手参数、使用变量、保存和共享接口等步骤。Apifox 操作简便、功能完善,是开发者调试 Socket.IO 接口的得力助手,帮助确保实时通信的可靠性和稳定性,提高开发效率。
|
设计模式 缓存 Java
【Java技术专题】「入门到精通系列教程」深入探索Java特性中并发编程体系的原理和实战开发指南( 实现可伸缩IO专题)— 上
【Java技术专题】「入门到精通系列教程」深入探索Java特性中并发编程体系的原理和实战开发指南( 实现可伸缩IO专题)— 上
185 0
|
监控 API 开发工具
Socket.IO介绍,以及怎么连接测试Socket.IO接口?
Socket.IO 是一个用于浏览器和服务器间实时双向通信的库,支持低延迟消息传递、跨平台运行及自动重连。文章介绍了其特点与调试需求,并详细说明如何使用 Apifox 工具创建、连接、发送/接收 Socket.IO 事件,以及团队协作和调试技巧。掌握这些技能可提升实时应用开发效率与质量。
|
Java 数据处理
Java IO 接口(Input)究竟隐藏着怎样的神秘用法?快来一探究竟,解锁高效编程新境界!
【8月更文挑战第22天】Java的输入输出(IO)操作至关重要,它支持从多种来源读取数据,如文件、网络等。常用输入流包括`FileInputStream`,适用于按字节读取文件;结合`BufferedInputStream`可提升读取效率。此外,通过`Socket`和相关输入流,还能实现网络数据读取。合理选用这些流能有效支持程序的数据处理需求。
738 2
【IO面试题 五】、 Serializable接口为什么需要定义serialVersionUID变量?
serialVersionUID用于标识类的序列化版本,确保在反序列化时类的版本一致性,避免因类定义变更导致的不兼容问题。
|
Ubuntu Linux
内核实验(九):添加IO驱动的阻塞读写功能
本文通过修改内核模块代码,介绍了如何在Linux内核中为IO驱动添加阻塞读写功能,使用等待队列和条件唤醒机制来实现读写操作的阻塞和非阻塞模式,并在Qemu虚拟机上进行了编译、部署和测试。
263 0
|
存储 Java
java IO接口(Input)用法
【5月更文挑战第1天】Java的`java.io`包包含多种输入输出类。此示例展示了如何使用`FileInputStream`从`input.txt`读取数据。首先创建`FileInputStream`对象,接着创建一个字节数组存储读取的数据,调用`read()`方法将文件内容填充至数组。然后将字节数组转换为字符串并打印,最后关闭输入流。注意,`InputStream`是抽象类,此处使用其子类`FileInputStream`。其他子类如`ByteArrayInputStream`、`ObjectInputStream`和`BufferedInputStream`各有特定用途。
307 2