实验:PIO输入—读取开关信号
实验:PIO输入—读取开关信号
Author:Chen Tuo
Copyright © Chen Tuo, 2008-2009. All rights reserved.
2008年3月1日创建
2009年3月29日修改
1. 实验目的
熟悉NiosII PIO设备的访问方法。学习读取引脚的开关信号。
2. 实验设备
硬件:PC机,EP1C3或EP1C12核心板,MyEpx3实验版。
软件:Quartus II 7.2;MagaCore 7.2;Nios II IDE 7.2。
3. 实验内容
用一个按键控制一个LED灯显示。
4. 实验预习要求
熟悉PIO外设的访问机制。
5. 实验步骤
(1) 创建一个QuartusII项目PIOReadPin。
(2) 如下图,定制一个Nios II CPU。

其中:onchip_mem为8K,KEY_PIO为1位输入,LED_PIO为1位输出。启动向量和异常向量配置如下:

(3) 在Quartus II中创建一个原理图,放置一个上面定制好的Nios II核myniosii,并如图设置引脚。编译、下载硬件配置到FPGA。

(4) 启动Nios II IDE,新建一个空白Nios II C/C++ Application项目,并命名为PIOReadPin。
(5) 在PIOReadPin项目中添加一个C文件PIOReadPin.c。
(6) 设置PIOReadPin项目Properties属性,对该项目的代码编译进行优化:
C/C++ Build > Tool Settings > General > Optimize size (-Os)
(7) 设置PIOReadPin_syslib项目Properties属性,对该项目的代码编译进行优化:
a) C/C++ Build > Tool Settings > General > Optimize size (-Os)
b) 在System library属性页面,清除Support C++和Clean exit (flush buffers);选上Program、LightWeight device driver API、Reduced device drivers和Small C library。
(8) 编译、调试、运行。
6. 程序清单
键盘输入实验程序
/*************************************************************
* 文件名:PIOReadPin.c
* 功 能:读取I/O引脚值,以查询方式控制LED。按下KEY1时,LED1亮
* 说 明:按下KEY1观察LED1的状态
************************************************************/
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#define LEDCON 0x01 //低电平亮
#define KEYCON 0x01 //按下为低电平
/*************************************************************
* 名 称:InitPIO()
* 功 能:初始化PIO_KEY为输入,PIO_LED为输出
* 入口参数:无
* 出口参数:无
************************************************************/
void InitPIO(void)
{
IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_KEY_BASE, ~KEYCON); //0为输入
IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_LED_BASE, LEDCON); //1为输出
}
/*************************************************************
* 名 称:main()
* 功 能:读取按键的值,并输出控制LED
************************************************************/
int main(void)
{
volatile alt_u32 key_state; //暂存PIO引脚状态
InitPIO();
while(1)
{
key_state = IORD_ALTERA_AVALON_PIO_DATA(PIO_KEY_BASE)&KEYCON;
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, key_state);
}
return(0);
}
头文件的说明见《实验:PIO外部中断》。
7. 程序的调试
在调试程序的过程中,用户可以在Memory窗口中查看PIO内核寄存器在地址空间的映射。先点击

基地址可以从system.h中获得。

在单步跟踪时可以查看到输入引脚的状态变化。注意:不能看到输出状态的变化。

上面是KEY1为高电平时的情况,尽管我们在硬件中定义的PIO端口只有一位,但是PIO寄存器还是32位的。0 – 3是数据寄存器,注意到小端存储模式,当前的实际数据为:0x00000001。
8. 参考文献
[1] 周立功,等. SOPC嵌入式系统实验教程(一)[M]. 北京:北京航空航天大学出版社,2006.
[2] 李兰英,等. Nios II 嵌入式软核 SOPC设计原理及应用[M]. 北京:北京航空航天大学出版社,2006.
[3] http://www.altera.com.cn/.
浙公网安备 33010602011771号