首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[转帖]怎样在NIOSII中操作PIO?

[转帖]怎样在NIOSII中操作PIO?

怎样在NIOSII中操作PIO

运用NIOSII_IDE向导,在niosII_cyclone_1c20\small\下新建一个hello_led工程。
其中hello_led.c是这样写IO口的:
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led);

首先在altera_avalon_pio_regs.h找到定义
#include <io.h>
#define IORD_ALTERA_AVALON_PIO_DATA(base) IORD(base, 0)
#define IOWR_ALTERA_AVALON_PIO_DATA(base, data) IOWR(base, 0, data)
因此在NIOSII中可以调用#include <io.h>库函数IORD/IOWR来操作PIO。
(详情可参见D:\altera\kitsios2\documents\ n2cpu_nii51007.pdf 文档page:7, Table 7–2:
和n2sw_nii5v2.pdf.pdf 文档page:111, Table 7–1:)

接着在small\software\hello_led_0_syslib\Debug\system_description下的system.h
中,有以下内容:
#define LED_PIO_TYPE "altera_avalon_pio"
#define LED_PIO_BASE 0x00004000
其中LED_PIO_BASE(IO寄存器地址?)为0x00004000同SopcBuilder中设置一致!
(其实在SopcBuilder中有关NiosII的配置,就是通过system.h来传送给IDE的!)

最后用IOWR(0x00004000, 0, led);替代IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led);
编译,下载到开发板上,运行成功!
初级知识,就当是抛砖引玉,这只是库函数级,应该还有汇编级代码,请各位大虾继续!

返回列表