-
微机原理实验报告
实验名称:并行
I/O
接口实验
院系:
班级:
姓名:
学号:
一
.
实验目的
掌握
GPIO
IP
核的工作原理和使用方法
掌握中
断控制方式的
IO
接口设计原理
掌握中断程序设计方法
掌握
IO
接口程序控制方法
查询方式
中断方式
延时方式
二
.
实验环境
UltraEdit
;
XilinxISE
。
三、实验内容
最小系统的建立,查询
方式与中断方式在
counse
显示独立开关操作
总线连接方式
寄存器名称
偏
移
初
始
含义
地址
值
0
0
0
0
p>
通道
1
数据寄存器
读写操作
GPIO_DATA
GPIO_TRI
0x0
0x4
通道
1
数据
通道
1
三态控制寄存器
写控制通道
1
传输方向
p>
通道
1
数据寄存
器
通道
2
数据
GPIO2_DATA
0x8
GPIO2_TRI
Gpio
内部框图
0xC
通道
1
三态控制寄存器
写控制通道
1
传输方向
中断寄存器
名称
GIER
偏移地址
0x11C
含义
全局中断屏蔽寄存
器
中断屏蔽寄存器
读写操作
最高位
bit31
控制
GPIO
是否输<
/p>
出中断信号
Irq
控制各个通道是否允许产生中
断
bit0-
通道
1
;
bit1-
通道
2
各个通道的中断请求状态,写
1
将清除相应位的中断状态
bit0-
通道
1
;<
/p>
bit1-
通道
2
IP IER
0x128
IP
ISR
0x120
中断状态寄存器
硬件电路框图
p>
AXI
总线接口
AXI
Interrupt
总
线
接
口
MicroBlaze
AXI
总线
Irq
AXI INTC
Intr1
AXI
总线接口
Intr
0
AXI
总线接口
GPIO
Interrupt
8
位
switch
< br>GPIO
4
位
button
p>
四.实验内容
1
.最小系统的建立
打开
Xilinx Platform
studio
平台,选择相关参数,建立相关文件。
将
FPGA
内存改为
3
2K
,添加
UART
类型接口,其他选
择默认配置。
修改时钟设置:
删除<
/p>
Exterinal Port
中的
C
LK_P
与
CLK_N
并添加
Clock_generator_0
中的
CL
KIN
修改名称为
CLK
。同时再将<
/p>
RS232
的输入输出端口名修改
RsR
xRsTx
。
最后再添加约束文件,约束引脚,保存。产生
bit
流,最
小系统就建
好了。
NET
NET
NET
NET
2.
在最小系统基础上添加相
应的
IP
核。分别是
8
位的
Button
,
4
位的
Dip
,中断
控
制核(
AXI Interrupt Controller IP
)并与
micorblace
的中断信号线相连(刚开始<
/p>
我没有做这一步,结果一节课过去了,却怎么也做不出来)
,将<
/p>
Button
,
Dip
< br>添
加为他的中断源,
button Dip
设置为仅输入其他端都设置为无连接。最后再添加
相应的约束文件并保存。<
/p>
NET
LOC=
NET
LOC=
NET
LOC=
NET
LOC=
NET
LOC=
NET
LOC=
NET
LOC=
NET
LOC=
NET
LOC=
NET
LOC=
NET
LOC=
NET
p>
LOC=
最后输出
bit
< br>流,进入
SDK
。
下图为文件位置,
Microblaze_0
地址
IP
核
进行软件设计。
3.
软件设计
中断程序
void
< br>PushBtnHandler
(
void
*CallBackRef)
{
state1
=XGpio_DiscreteRead(&Btns,1);
//
< br>读取按键的状态值
pshBtn=1;
XGpio_InterruptDisable(&Btns, 1);
//
暂时禁止
button
中断
Delay_50ms();
/
/
延时
50ms
,忽略按键弹起再次触
发的中断
XGpio_InterruptClear(&B
tns,1);
//
清除中断标志位
XGpio_InterruptEnable(&Btns,
1);
//
再次开放按键中断
}
//
按钮中断程序
voidPushBtnHandler(void *CallBackRef)
{
state1 = XGpio
_DiscreteRead(&Btns,1);//
读取按钮状态
< br>
pshBtn = 1;
XGpio_InterruptDisable(&Btns,1);
//
由于按钮按下去弹上来,是两个过程,这个时延把弹上来的中断屏蔽过去
Delay_50ms();
<
/p>
XGpio_InterruptClear(&Btns,1);//
< br>清除弹上去的中断
XGpio_InterruptEnable(&Btns,1);
}
//
开关中断程序
voidSwitchHandler(void *CallBackRef)
{
}
state2 = XGpio_DiscreteRea
d(&Dips,1);//
读取中断开关状态
pshDip = 1;
XGpio_InterruptClear(&Dips,1);
//
主程序
int main()
{
Initialize();
xil_printf(
while(1)
{
if(pshBtn)
{
xil_printf(
pshBtn = 0;
}
if(pshDip)
{
xil_printf(
pshDip = 0;
}
}
return 0;
}
//
时延程序
void Delay_50ms()
{
inti;
for(i = 0;i<5000000;i++);
-
-
-
-
-
-
-
-
-
上一篇:BasicRF简析剖析
下一篇:数据网-lte 核心网