微机原理实验——并行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 按键的中断事务处理函数流程图

目录
相关文章
|
6月前
|
存储 传感器 数据可视化
【软件设计师备考 专题 】IO接口的功能、类型和特性
【软件设计师备考 专题 】IO接口的功能、类型和特性
180 1
|
3月前
|
Java 数据处理
Java IO 接口(Input)究竟隐藏着怎样的神秘用法?快来一探究竟,解锁高效编程新境界!
【8月更文挑战第22天】Java的输入输出(IO)操作至关重要,它支持从多种来源读取数据,如文件、网络等。常用输入流包括`FileInputStream`,适用于按字节读取文件;结合`BufferedInputStream`可提升读取效率。此外,通过`Socket`和相关输入流,还能实现网络数据读取。合理选用这些流能有效支持程序的数据处理需求。
44 2
【IO面试题 五】、 Serializable接口为什么需要定义serialVersionUID变量?
serialVersionUID用于标识类的序列化版本,确保在反序列化时类的版本一致性,避免因类定义变更导致的不兼容问题。
|
3月前
|
Ubuntu Linux
内核实验(九):添加IO驱动的阻塞读写功能
本文通过修改内核模块代码,介绍了如何在Linux内核中为IO驱动添加阻塞读写功能,使用等待队列和条件唤醒机制来实现读写操作的阻塞和非阻塞模式,并在Qemu虚拟机上进行了编译、部署和测试。
16 0
|
6月前
|
设计模式 缓存 Java
【Java技术专题】「入门到精通系列教程」深入探索Java特性中并发编程体系的原理和实战开发指南( 实现可伸缩IO专题)— 上
【Java技术专题】「入门到精通系列教程」深入探索Java特性中并发编程体系的原理和实战开发指南( 实现可伸缩IO专题)— 上
77 0
|
5月前
|
存储 缓存 NoSQL
Redis为什么速度快:数据结构、存储及IO网络原理总结
Redis为什么速度快:数据结构、存储及IO网络原理总结
|
6月前
|
存储 Java
java IO接口(Input)用法
【5月更文挑战第1天】Java的`java.io`包包含多种输入输出类。此示例展示了如何使用`FileInputStream`从`input.txt`读取数据。首先创建`FileInputStream`对象,接着创建一个字节数组存储读取的数据,调用`read()`方法将文件内容填充至数组。然后将字节数组转换为字符串并打印,最后关闭输入流。注意,`InputStream`是抽象类,此处使用其子类`FileInputStream`。其他子类如`ByteArrayInputStream`、`ObjectInputStream`和`BufferedInputStream`各有特定用途。
65 2
|
6月前
|
缓存 Java 数据库
深入理解 Java IO 流:原理与应用
【4月更文挑战第4天】Java IO 浴是处理文件和数据输入输出的关键,涉及数据传输和处理。核心概念包括输入流(从源头读取)和输出流(写入目标),由InputStream和OutputStream接口定义基础操作。具体实现如FileInputStream和FileOutputStream用于文件操作,BufferedInputStream和BufferedOutputStream提升性能。IO流广泛应用于文件操作、网络通信、数据库交互和系统交互。其优点在于灵活性、可扩展性和高效性。使用时注意关闭流、处理异常及选择合适流实现。理解IO流原理和应用能提升编程效率和程序性能。
170 1
|
6月前
|
传感器 编解码 C语言
【软件设计师备考 专题 】IO设备、通信设备的性能,以及基本工作原理
【软件设计师备考 专题 】IO设备、通信设备的性能,以及基本工作原理
85 1
|
6月前
|
Java 大数据 数据库
【Spring底层原理高级进阶】Spring Batch清洗和转换数据,一键处理繁杂数据!Spring Batch是如何实现IO流优化的?本文详解!
【Spring底层原理高级进阶】Spring Batch清洗和转换数据,一键处理繁杂数据!Spring Batch是如何实现IO流优化的?本文详解!