华科并行接口设计走马灯实验报告.docx
- 文档编号:26998970
- 上传时间:2023-06-25
- 格式:DOCX
- 页数:14
- 大小:379.99KB
华科并行接口设计走马灯实验报告.docx
《华科并行接口设计走马灯实验报告.docx》由会员分享,可在线阅读,更多相关《华科并行接口设计走马灯实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
华科并行接口设计走马灯实验报告
专业:
电子信息工程
姓名:
朱东福
班级:
201401班
学号:
日期:
年月日
微机原理●实验●测试
并行IO接口实验—走马灯
专业电子信息与通信学院班级电信班日期2016/12/05第3次试验
姓名组别15指导老师成绩
实验课题并行IO接口实验——走马灯
一、实验目的
1.掌握GPIOIP核的工作原理和使用方法
2.掌握中断控制方式的IO接口设计原理
3.掌握中断程序设计方法
4.掌握IO接口程序控制方法
-------查询方式
-------延时方式
二、实验任务
•Led走马灯输出
用延时、中断两种方式实现
三、实验原理
硬件实现框图如图所示:
四、硬件实现步骤
1.使用XPS创建一个基于AXI总线的最小计算机系统。
File–>NewBSBProject,如图:
2.修改时钟设置:
将时钟产生器的时钟输入信号进行修改,修改为单一时钟源。
修改后的结果如图:
3.添加GPIOIP核,设置LEDs_8Bits配置:
a.在IPCatalog标签中,双击下面图标创建GPIOIP核:
b.添加GPIOIP核后,将名字改为LED_8Bits,如图:
c.更改LED_8Bits配置窗口的属性,如图:
4.添加AXIInterruptControllerIP核:
a.在IPCatalog标签中,双击下面图标创建INTCIP核:
b.添加axi_intc_0的中断源,如图:
c.将microblaze_0实例的INTERRUPT引脚选择axi_intc_0_INTERRUPT,如图:
5.产生外部GPIO连接:
a.选中LEDs_8Bits中的GPIO_IO_O,选择makeexternal,生成外部连接端口;选中GPIO_IO,设置为“Noconnection”,取消其外部连接端口。
结果如图:
b.在ports标签下,展开ExternalPorts项,可看到LEDs_8Bits生成的LEDs_8Bits_GPIO_IO_PIN端口,如图:
6.添加timerIP核:
a.选择如图的IP核并双击,添加到工程:
b.中断信号的连接结果如图所示:
7.配置UCF文件:
在UCF文件中修改如图所示配置,配置LED连接电路约束:
8.创建工程过程完成后,
a.在主界面下选择Hardware->GenerateNetlist;
b.在主界面下选择Hardware->GenerateBitstream;
c.单击GraphicalDesignView,可以看到系统的连接图,如下:
五、应用软件设计
1、延时方式实现走马灯
(1)SDK提供的外设驱动以及应用程序
1点击project->ExpertHardwareDesigntoSDK…,点击Export&LaunchSDK:
2在SDK中,点击file->new->boardsupportpackage,如图:
3点击file->new->applicationproject,创建一个EmptyApplicant工程,如图所示:
2、设计用户应用程序
(1)延时方式的程序,没有中断和计时器部分,通过for循环来达到延时的目的
#include"xparameters.h"
#include"xil_io.h"
intmain()
{
charLed_8Bits=0x01;
inti,j;
Xil_Out32(XPAR_LEDS_8BITS_BASEADDR+0x4,0x0);
while
(1)
{
for(i=0;i<8;i++)
{
Xil_Out32(XPAR_LEDS_8BITS_BASEADDR,Led_8Bits);
for(j=0;j<0xa5e100;j++);
Led_8Bits=Led_8Bits<<1;
}
Led_8Bits=0x01;
}
return0;
}
(2)中断方式实现走马灯
用户应用程序的设计包括定时器配置、启动中断系统、设计中断服务程序。
中断服务程序:
要求每产生一次中断led灯亮的位置向高位移动1位。
完整的程序代码如下,其中:
main为主程序,timerCounterHandler为中断服务程序。
该程序设置定时器初始值为0x5f5e100,表示计数100M个时钟脉冲,由于时钟为100MHz,因此1秒钟产生一次中断。
设置定时器的工作方式为允许中断、自动装载、减计数模式。
源代码:
代码如下:
#include"xparameters.h"
#include"xtmrctr.h"
#include"xintc.h"
#include"xil_exception.h"
#defineTMRCTR_DEVICE_IDXPAR_TMRCTR_0_DEVICE_ID
#defineINTC_DEVICE_IDXPAR_INTC_0_DEVICE_ID
#defineTMRCTR_INTERRUPT_IDXPAR_INTC_0_TMRCTR_0_VEC_ID
#defineTIMER_CNTR_00
#defineRESET_VALUE0x5F5E100
voidTimerCounterHandler(void*CallBackRef,u8TmrCtrNumber);
XIntcInterruptController;
XTmrCtrTimerCounterInst;
u32LedBits;
intmain(void)
{
intStatus;
LedBits=0;
Xil_Out32(XPAR_LEDS_8BITS_BASEADDR+0x4,0x0);
Status=XTmrCtr_Initialize(&TimerCounterInst,XPAR_TMRCTR_0_DEVICE_ID);
if(Status!
=XST_SUCCESS){
returnXST_FAILURE;
}
Status=XIntc_Initialize(&InterruptController,INTC_DEVICE_ID);
if(Status!
=XST_SUCCESS){
returnXST_FAILURE;
}
Status=XIntc_Connect(&InterruptController,TMRCTR_INTERRUPT_ID,(XInterruptHandler)XTmrCtr_InterruptHandler,(void*)&TimerCounterInst);
if(Status!
=XST_SUCCESS){
returnXST_FAILURE;
}
Status=XIntc_Start(&InterruptController,XIN_REAL_MODE);
if(Status!
=XST_SUCCESS){
returnXST_FAILURE;
}
XIntc_Enable(&InterruptController,TMRCTR_INTERRUPT_ID);
microblaze_register_handler((XInterruptHandler)XIntc_InterruptHandler,&InterruptController);
microblaze_enable_interrupts();
XTmrCtr_SetHandler(&TimerCounterInst,TimerCounterHandler,&TimerCounterInst);
XTmrCtr_SetOptions(&TimerCounterInst,TIMER_CNTR_0,XTC_INT_MODE_OPTION|XTC_AUTO_RELOAD_OPTION|XTC_DOWN_COUNT_OPTION);
XTmrCtr_SetResetValue(&TimerCounterInst,TIMER_CNTR_0,RESET_VALUE);
XTmrCtr_Start(&TimerCounterInst,TIMER_CNTR_0);
while
(1);
returnXST_SUCCESS;
}
voidTimerCounterHandler(void*CallBackRef,u8TmrCtrNumber)
{
Xil_Out32(XPAR_LEDS_8BITS_BASEADDR,1< LedBits++; if(LedBits==8) LedBits=0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 并行 接口 设计 走马灯 实验 报告