前言
课程名称:模拟电路与数字系统(三)实验
实验项目名称:并行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 按键的中断事务处理函数流程图