华科电信并行IO接口走马灯实验报告.docx

上传人:b****3 文档编号:3815937 上传时间:2022-11-25 格式:DOCX 页数:12 大小:455.67KB
下载 相关 举报
华科电信并行IO接口走马灯实验报告.docx_第1页
第1页 / 共12页
华科电信并行IO接口走马灯实验报告.docx_第2页
第2页 / 共12页
华科电信并行IO接口走马灯实验报告.docx_第3页
第3页 / 共12页
华科电信并行IO接口走马灯实验报告.docx_第4页
第4页 / 共12页
华科电信并行IO接口走马灯实验报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

华科电信并行IO接口走马灯实验报告.docx

《华科电信并行IO接口走马灯实验报告.docx》由会员分享,可在线阅读,更多相关《华科电信并行IO接口走马灯实验报告.docx(12页珍藏版)》请在冰豆网上搜索。

华科电信并行IO接口走马灯实验报告.docx

华科电信并行IO接口走马灯实验报告

电子信息与通信学院

实验报告

实验名称:

微机原理实验

课程名称:

并行IO接口设计

 

班级:

姓名:

学号:

教师:

 

一、实验目的

1.掌握GPIOIP核的工作原理和使用方法

2.掌握中断控制方式的IO接口设计原理

3.掌握中断程序设计方法

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

-------查询方式

-------延时方式

 

二、实验任务

写一个Led走马灯输出的程序,并下载到FPGA板子上,用延时、中断两种方式实现。

 

三、实验原理

硬件实现框图如图所示:

四、硬件实现步骤

1.使用XPS创建一个基于AXI总线的最小计算机系统。

File–>NewBSBProject,如图:

2.修改时钟设置:

将时钟产生器的时钟输入信号进行修改,修改为单一时钟源。

修改后的结果如图:

3.添加GPIOIP核,设置LEDs_8Bits配置:

a.在IPCatalog标签中,双击下面图标创建GPIOIP核:

b.添加GPIOIP核后,将名字改为LED_16Bits,如图:

c.更改LED_16Bits配置窗口的属性,如图:

4.添加AXIInterruptControllerIP核:

a.在IPCatalog标签中,双击下面图标创建INTCIP核:

b.添加axi_intc_0的中断源,如图:

c.将microblaze_0实例的INTERRUPT引脚选择axi_intc_0_INTERRUPT,如图:

 

5.产生外部GPIO连接:

a.选中LEDs_16Bits中的GPIO_IO_O,选择makeexternal,生成外部连接端口;选中GPIO_IO,设置为“Noconnection”,取消其外部连接端口。

结果如图:

b.在ports标签下,展开ExternalPorts项,可看到LEDs_16Bits生成的LEDs_16Bits_GPIO_IO_PIN端口,如图:

 

6.添加timerIP核:

a.选择如图的IP核并双击,添加到工程:

b.中断信号的连接结果如图所示:

7.配置UCF文件:

在UCF文件中修改如下所示配置,配置LED连接电路约束:

NET"CLK"TNM_NET=sys_clk_pin;

TIMESPECTS_sys_clk_pin=PERIODsys_clk_pin100000kHz;

NET"CLK"LOC="E3"|IOSTANDARD="LVCMOS33";

NET"RESET"LOC="E16"|IOSTANDARD="LVCMOS33";

NET"RsRx"LOC="C4"|IOSTANDARD="LVCMOS33";

NET"RsTx"LOC="D4"|IOSTANDARD="LVCMOS33";

NET"LEDs_16Bits_GPIO_IO_pin<0>"LOC="T8"|IOSTANDARD="LVCMOS33";

NET"LEDs_16Bits_GPIO_IO_pin<1>"LOC="V9"|IOSTANDARD="LVCMOS33";

NET"LEDs_16Bits_GPIO_IO_pin<2>"LOC="R8"|IOSTANDARD="LVCMOS33";

NET"LEDs_16Bits_GPIO_IO_pin<3>"LOC="T6"|IOSTANDARD="LVCMOS33";

NET"LEDs_16Bits_GPIO_IO_pin<4>"LOC="T5"|IOSTANDARD="LVCMOS33";

NET"LEDs_16Bits_GPIO_IO_pin<5>"LOC="T4"|IOSTANDARD="LVCMOS33";

NET"LEDs_16Bits_GPIO_IO_pin<6>"LOC="U7"|IOSTANDARD="LVCMOS33";

NET"LEDs_16Bits_GPIO_IO_pin<7>"LOC="U6"|IOSTANDARD="LVCMOS33";

NET"LEDs_16Bits_GPIO_IO_pin<8>"LOC="V4"|IOSTANDARD="LVCMOS33";

NET"LEDs_16Bits_GPIO_IO_pin<9>"LOC="U3"|IOSTANDARD="LVCMOS33";

NET"LEDs_16Bits_GPIO_IO_pin<10>"LOC="V1"|IOSTANDARD="LVCMOS33";

NET"LEDs_16Bits_GPIO_IO_pin<11>"LOC="R1"|IOSTANDARD="LVCMOS33";

NET"LEDs_16Bits_GPIO_IO_pin<12>"LOC="P5"|IOSTANDARD="LVCMOS33";

NET"LEDs_16Bits_GPIO_IO_pin<13>"LOC="U1"|IOSTANDARD="LVCMOS33";

NET"LEDs_16Bits_GPIO_IO_pin<14>"LOC="R2"|IOSTANDARD="LVCMOS33";

NET"LEDs_16Bits_GPIO_IO_pin<15>"LOC="P2"|IOSTANDARD="LVCMOS33";

8.创建工程过程完成后,

a.在主界面下选择Hardware->GenerateNetlist;

b.在主界面下选择Hardware->GenerateBitstream;

c.单击GraphicalDesignView,可以看到系统的连接图,如下:

五、软件设计

1.中断方式实现走马灯

用户应用程序的设计包括定时器配置、启动中断系统、设计中断服务程序。

中断服务程序:

要求每产生一次中断led灯亮的位置向高位移动1位。

完整的程序代码如下,其中:

main为主程序,timerCounterHandler为中断服务程序。

该程序设置定时器初始值为0x5f5e100,表示计数100M个时钟脉冲,由于时钟为100MHz,因此1秒钟产生一次中断。

设置定时器的工作方式为允许中断、自动装载、减计数模式。

 

(1)程序流程图:

 

(2)源代码:

#include"xparameters.h"

#include"xtmrctr.h"

#include"xintc.h"

#include"xil_exception.h"

#defineTMRCTR_DEVICE_IDXPAR_TMRCTR_0_DEVICE_ID

#defineTMRCTR_INTERRUPT_IDXPAR_INTC_0_TMRCTR_0_VEC_ID

#defineINTC_DEVICE_IDXPAR_INTC_0_DEVICE_ID

#defineTIMER_CNTR_00

#defineRESET_VALUE0X5F5E100

voidTimerCounterHandler(void*CallBackRef,u8TmrCtrNumber);

XIntcInterruptController;

XTmrCtrTimerCounterInst;

u32LedBits;

intmain(void){

intStatus;

LedBits=0;

Xil_Out32(XPAR_LEDS_16BITS_BASEADDR+0x04,0x0);

Status=XTmrCtr_Initialize(&TimerCounterInst,TMRCTR_DEVICE_ID);

XIntc_Initialize(&InterruptController,INTC_DEVICE_ID);

XIntc_Connect(&InterruptController,INTC_DEVICE_ID,

(XInterruptHandler)XTmrCtr_InterruptHandler,

(void*)&TimerCounterInst);

XIntc_Start(&InterruptController,XIN_REAL_MODE);

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_16BITS_BASEADDR,1<

//产生中断时,输出LED显示值

LedBits++;

//修改显示位置,指向下一个LED灯

if(LedBits==16)//由于只有16位LED灯,因此位置不能≧16,继续从bit0开始循环

LedBits=0;

}

 

2.延时方式实现走马灯

延时方式的程序,没有中断和计时器部分,通过for循环来达到延时的目的。

(1)程序流程图

(2)源代码如下:

#include"xparameters.h"

#include"xil_io.h"

intmain()

{

u32Led_16Bits=0x0001;

inti,j;

Xil_Out32(XPAR_LEDS_16BITS_BASEADDR+0x4,0x0);

while

(1){

for(i=0;i<16;i++){

Xil_Out32(XPAR_LEDS_16BITS_BASEADDR,Led_16Bits);

//输出LED显示值

for(j=0;j<0xa5e100;j++);//延时

Led_16Bits=Led_16Bits<<1;//指向下一个LED灯

}

Led_16Bits=0x0001;

}

return0;

}

 

六、心得体会

通过用两种方式实现走马灯的实验,我掌握了GPIOIP核的工作原理和使用方法,同时也明白了中断控制方式的IO接口设计原理,在这基础上,又进一步学习到了中断程序设计方法以及IO接口程序控制方法。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1