转载两年半载积累之NiosII EDSWord文档格式.docx
《转载两年半载积累之NiosII EDSWord文档格式.docx》由会员分享,可在线阅读,更多相关《转载两年半载积累之NiosII EDSWord文档格式.docx(7页珍藏版)》请在冰豆网上搜索。
图5.2
(3)运行工程,单击菜单栏Run,在下拉菜单选择Run…,
图5.3
(4)在Browse中选择已经编译过的工程,
图5.4
(5)单击TargetConnection,查看Jtagcable是不是所用的JTAG线,JTAGdevice中是所用的器件,NiosIITerminalcommunicationdevice是jtag_uart_0<
stdin/stdout/stderr>
图5.5
(6)单击Run就可以运行了。
5.1了解相关库文件
#include"
stdio.h"
system.h"
string.h"
altera_avalon_pio_regs.h"
alt_types.h"
可以看到这些库中#include"
和#include"
市Altera公司提供的库。
前者是Altera公司提供的Avalon总线上可编程输入输出口使用的库文件,里面包含许多相关的函数,并与我们对配置的可编程输入输出口进行写入和读出,例如:
#ifndef__ALTERA_AVALON_PIO_REGS_H__
#define__ALTERA_AVALON_PIO_REGS_H__
#include<
io.h>
#defineIOADDR_ALTERA_AVALON_PIO_DATA(base)
__IO_CALC_ADDRESS_NATIVE(base,0)
#defineIORD_ALTERA_AVALON_PIO_DATA(base)
IORD(base,0)
#defineIOWR_ALTERA_AVALON_PIO_DATA(base,data)
IOWR(base,0,data)
#defineIOADDR_ALTERA_AVALON_PIO_DIRECTION(base)
__IO_CALC_ADDRESS_NATIVE(base,1)
#defineIORD_ALTERA_AVALON_PIO_DIRECTION(base)
IORD(base,1)
#defineIOWR_ALTERA_AVALON_PIO_DIRECTION(base,data)
IOWR(base,1,data)
#defineIOADDR_ALTERA_AVALON_PIO_IRQ_MASK(base)
__IO_CALC_ADDRESS_NATIVE(base,2)
#defineIORD_ALTERA_AVALON_PIO_IRQ_MASK(base)
IORD(base,2)
#defineIOWR_ALTERA_AVALON_PIO_IRQ_MASK(base,data)
IOWR(base,2,data)
#defineIOADDR_ALTERA_AVALON_PIO_EDGE_CAP(base)
__IO_CALC_ADDRESS_NATIVE(base,3)
#defineIORD_ALTERA_AVALON_PIO_EDGE_CAP(base)
IORD(base,3)
#defineIOWR_ALTERA_AVALON_PIO_EDGE_CAP(base,data)
IOWR(base,3,data)
#defineIOADDR_ALTERA_AVALON_PIO_SET_BIT(base)
__IO_CALC_ADDRESS_NATIVE(base,4)
#defineIORD_ALTERA_AVALON_PIO_SET_BITS(base)
IORD(base,4)
#defineIOWR_ALTERA_AVALON_PIO_SET_BITS(base,data)
IOWR(base,4,data)
#defineIOADDR_ALTERA_AVALON_PIO_CLEAR_BITS(base)
__IO_CALC_ADDRESS_NATIVE(base,5)
#defineIORD_ALTERA_AVALON_PIO_CLEAR_BITS(base)
IORD(base,5)
#defineIOWR_ALTERA_AVALON_PIO_CLEAR_BITS(base,data)
IOWR(base,5,data)
#defineALTERA_AVALON_PIO_DIRECTION_INPUT
0
#defineALTERA_AVALON_PIO_DIRECTION_OUTPUT1
#endif
"
是Altera公司的类型定义库,可以使用里面定义的类型,其使用方法和Verilog中的类型很相似。
#ifndef__ALT_TYPES_H__
#define__ALT_TYPES_H__
#ifndefALT_ASM_SRC
typedefsignedchar
alt_8;
typedefunsignedchar
alt_u8;
typedefsignedshortalt_16;
typedefunsignedshortalt_u16;
typedefsignedlongalt_32;
typedefunsignedlongalt_u32;
typedeflonglongalt_64;
typedefunsignedlonglongalt_u64;
#defineALT_INLINE
__inline__
#defineALT_ALWAYS_INLINE__attribute__((always_inline))
#defineALT_WEAK
__attribute__((weak))
运用NIOSII_IDE向导,在niosII_cyclone_1c20small下新建一个hello_led工程。
其中hello_led.c是这样写IO口的:
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,led);
首先在altera_avalon_pio_regs.h找到定义
#include
#defineIORD_ALTERA_AVALON_PIO_DATA(base)IORD(base,0)
#defineIOWR_ALTERA_AVALON_PIO_DATA(base,data)IOWR(base,0,data)
因此在NIOSII中可以调用#include库函数IORD/IOWR来操作PIO。
(详情可参见D:
alterakitsios2documentsn2cpu_nii51007.pdf文档page:
7,Table7–2:
和n2sw_nii5v2.pdf.pdf文档page:
111,Table7–1:
接着在smallsoftwarehello_led_0_syslibDebugsystem_description下的system.h
中,有以下内容:
#defineLED_PIO_TYPE"
altera_avalon_pio"
#defineLED_PIO_BASE0x00004000
其中LED_PIO_BASE(IO寄存器地址?
)为0x00004000同SopcBuilder中设置一致!
(其实在SopcBuilder中有关NiosII的配置,就是通过system.h来传送给IDE的!
最后用IOWR(0x00004000,0,led);
替代IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,led);
编译,下载到开发板上,运行成功!
初级知识,就当是抛砖引玉,这只是库函数级,应该还有汇编级代码,请各位大虾继续!