NIOS II 系列程序
NIOS II处理器c程序编写基本流程

NIOS II处理器c程序编写基本流程总结:对NIOS II处理器编写程序主要是用来控制NIOS II外围设备如片上存储器,PIO内核,定时器,SDRAM内核,UART内核,DMA内核以及用户自定义内核等。
其本质是对NIOS II外围设备的相关寄存器进行读写操作。
如下图所示NIOS II处理器即cpu的输入信号主要有时钟,复位信号,中断请求信号,读数据等。
Cpu输出信号主要有地址线,读使能,写使能,写数据,字节选择等。
NIOS II处理器c程序经过编译后产生.elf文件(其内容包括对存储器初始化的.hex文件)下载到FPGA中,其本质主要是将c程序(包括用户自定义的程序和系统自带的库)编译产生的机器代码存储到程序存储器里(一般为rom),为c程序中定义的变量(本质是通过寄存器间接寻址实现)在数据存储器(一般为ram)中分配存储空间。
异常程序的引导程序一般放在ram里以提高异常情况的处理速度。
NIOS II处理器的逻辑模块如下图所示,由此可知NIOS II处理器主要实现读取指令,翻译指令,读写数据,异常控制,中断控制等功能。
步骤一:打开ecplise软件。
步骤二:在QUARTUS II工程文件夹中新建workspace文件夹作为ecplise工作文件夹。
系统会在workspace中自动生成.metadata文件,.metadata文件包含如下图所示的几个文件夹。
步骤三:新建ecplise工程。
选择ecplise工程所需的.sopcinfo文件(之前建立NIOS II处理器系统时产生的文件,此处为mynios.sopcinfo),给ecplise工程命名(此处为mynios_software)。
此时系统自动生成software文件夹,software文件夹中包含以ecplise工程名命名的文件夹(此处为mynios_software)和以ecplise工程名_bsp命名的文件夹(此处为mynios_software_bsp)。
将NiosII程序下载到Flash的方法(Step_by_step)

将NiosII程序下载到Flash的方法(Step_by_step)我们在调试完Nios II(以下简称Nios)系统后,接下来的工作就是要把程序固化到NOR Flash (以下简称Flash)中,让其上电后自动运行。
但是这又该如何做呢?我想大家一定会想到使用Nios的Flash Programmer。
没错,就是用它。
不过,Flash Programmer也不是随便拿来就能用的,如果设置不正确,照样无法使用。
闲话少说,follow me。
说明:设置Flash的方法和Nios II的版本有直接关系。
这里只以Quartus II 6.0和Nios II 6.0为例。
Step 1刚打开SOPC时,Target Board默认是Unspecified Board。
如果要将Nios程序下载到Flash或EPCS中,我们就要自定义目标板。
单击SOPC Builder的File-->New Board Description…。
选择Netlist框。
在De vice Family栏中选择正确的FPGA系列。
Step 2选择Flash Memory框。
单击New Flash Memory,并输入正确的型号和类型。
Step 3单击New Hardware Image,指定FPGA硬件配置程序的存储位置。
一般选择EPCS器件。
如果设置为F lash器件,需要有相应的外部器件(CPLD)配合使用。
Step 4选择Files框。
输入Board Description Name、Version和System Template。
最后单击Finish…。
将Unsp ecified Board改为刚建的Target Board。
Step 5向SOPC中添加组件,分配Base Address和IRQ。
注意:(a)Flash地址应从0地址开始。
(b)Nios处理器的JTAG debug module应选择level 1或更高级别。
NiosII软件设计与运行流程

NiosII软件设计与运行流程本实验是于实验1相连的,本实验主要完成在NiosII硬件系统完成及下载于FPGA中的基础上,进行软件开发、下载和调试,具体流程如下:1、向FPGA下载配置文件。
以下的实验将更多地与SOPC实验系统联系。
本次实验是使用清华大学电工电子实验中心的GW48-SOPC实验系统(康芯公司),下载前连接好下载通信线,打开电源,打开光盘上关于此实验系统的PDF/PPT默认设置说明,确认实验系统所有开关和跳线处于默认设置位置。
用10芯通信线将实验系统左侧的“Byterblaster II”接口与适配板上的JTAG Port口相连;将实验系统左侧的跳线短路帽接插“ByBt II”端,编程电压选择跳线短路帽插3.3V(此电压接错不会损坏系统)。
按动实验系统左下角的电路模式控制键,选择模式5(在上方的数码管会显示5字),这时实验系统将进入附录中附图1的电路连接模式(有12中不同的可选硬件电路模式)。
注意模式5的8个键控特点:每按键一次,输出电平反相一次,电平高低由此键上方的发光管显示;还注意到此时FPGA输出的32个I/O口接了8个数码管,每4个I/O口接一个数码管,且在每一数码管外接了一个16进制至7段译码的译码器,这样可以大大节省I/O口的耗用。
FPGA的主要端口是用标准信号名PIOx标注的,具体引脚号在引脚锁定时查阅附录的附表1;例如附图1中连接FPGA的键8端口标准信号名是“PIO7”,查附表1,横项GW48-SOPC对应Pin240。
现在可以开始下载配置文件,以便在FPGA中建立NiosII硬件环境。
打开QuartusII,再打开实验一的工程,选择菜单Tools→Programmer,弹出图2-1所示窗口,首先选择接口模式,对于Mode栏确认选择JTAG模式;如果是首次安装并使用该软件,要作下载接口模式选择:点击图2-1左侧的Hardware Setup按纽,将弹出图2-2所示窗口。
nios2+c语言编程方法Nios2系列教程

最小的Nios2系统前言2003年Altera推出了第一代32位Nios系统,开创了FPGA内构建高性能单片机的先河。
随之2004年,Nios系统升级为Nios2系统,解决了软硬件开发中一些不方便的问题,软件开发环境从命令行编译转移到Eclips的IDE集成开放环境。
Nios2开发环境从1.0、1.1到1.2逐步升级。
后来为了和QuartusII软件升级同步,从QuartusII5.0版本开始Nios2的版本号正式和QuartusII统一。
作者我亲身经历过整个Nios2发展历程,深知Nios2的不同版本发生的巨大变化。
目前网上流行的Nios2教程针对的版本相对较老,已经对初学者学习Nios2起不到指导作用,并且应广大爱好者的强烈要求,我在此使用QuartusII和Nios2的8.0版本详细叙述Nios2的开发流程。
构建一个Nios2最小系统需要什么构建一个Nios2最小系统需要具备以下资源:★ Nios2软核处理器★ 内存★ Jtag_uart调试接口软核处理器:这就是Nios2处理器的核心CPU,所有的外1. Nios2设都是和这个CPU通过Avalon总线连接到一起的。
2. 内存:编译后的程序代码需要通过下载线下载到该内存中,然后CPU的程序指针跳转到内存的首地址开始执行程序。
3. Jtag_uart调试接口:想要用单步调试等调试功能控制程序执行和查看程序变量,那么就需要这个调试接口。
开始构建一个再简单不过的Nios2工程整个步骤由2部分组成,第一部分建立Nios2硬件SOPC工程,第二部分建立Nios2软件工程。
1.建立Nios2硬件SOPC工程建立Nios2硬件SOPC工程就是设计一个软核CPU和它的外设,编译成硬件电路放到FPGA芯片里面。
这时候可以认为FPGA就是一个32位的单片机了,下面的软件开发都是针对这个单片机的。
打开QuartusII软件,新建一个工程选择EP2C8Q208C8芯片。
Altera FPGA带NiosII内核程序的JTAG下载方法总结

1、对于Altera FPGA,含Nios II时需要下载的文件有4种:.sof 文件,.pof 文件,.jic 文件,.elf 文件。
下载文件生成工具下载方式下载存储器是否掉电丢失.sof 文件QuartusII编译生成JTAG FPGA(SRAM )丢失.pof 文件QuartusII编译生成AS(Active Slave)FLSAH(EPCS64)不会丢失.jic 文件QuartusII “File|ConvertProgramming File”JTAG FLSAH(EPCS64)不会丢失.elf 文件Nios II IDE JTAG(调式模式)FPGA(SRAM )丢失.elf 文件Nios II IDE JTAG(烧写模式)FLSAH(EPCS64)不会丢失2、通常称.sof 文件和.pof 文件为FPGA“硬件”或“固件”文件,在QuartusII中设计编译产生,源文件格式有VHDL、Verilog HDL、AHDL、Tcl(一般用于引脚定义)、原理图(一般用于顶层)等;.elf文件为“软件”文件,在Nios II IDE中(新版本为Nios II Software Builder Tools for Eclipse)设计编译产生,源文件为C语言。
3、.jic文件为JTAG间接配置文件(JTAG Indirect Configuration File),使用QuartusII File菜单下Convert Programming File命令将.sof文件转换生成,然后使用QuartusII的Tools菜单下Programmer命令下载到FLASH中(注意:.jic文件下载到FLASH后必须关机重新加电!)如下图所示:4、 .elf文件不能单独下载,必须与“硬件”.sof文件一起下载才能运行(也可先在QuartusII中下载.sof,再在NiosII IDE或Nios II Software Builder Tools for Eclipse中下载.elf),以QuartusII 11.0版本为例,方法如下:(1)使用Nios II 11.0 IDE先点击“开始| 程序| Altera|Nios II EDS 11.0 | Legacy Nios II Tools | NiosII11.0 IDE”(注意:11.0版本的“Legacy Nios II Tools”必须单独下载安装!)启动NiosII11.0 IDE,打开或导入工程,在Nios II IDE 中点击Tools->Flash Programmer…,出现如下图所示的界面:需要勾选的部分如图中红线框所标注,第一部分是将Nios II中的软件程序写到Flash中,注意还需要加载JDI文件,即点击“Load JDI File”,选择本系统中的JDI文件即可。
NIOS II 程序flash固化

NIOS II 程序flash固化这两天尝试着NIOS II程序固化,遇到很多问题,在网上搜索资料也没有一个统一的固化方法,各种尝试都已失败告终。
本人结合自己的经验,将NIOS II 程序固化方法记录下来。
分享发表希望以自己的成功案例给NIOS II开发者解决程序固化这方面的问题。
alteral官网关于NIOS II程序flash少些提供的手册描述支持两种程序固化方法。
一种EPCS flash固化,一种CFI flash固化。
本文分别对这两种固化方法进行描述。
本人的开发平台是quartus 14.1版本,NIOS的开发使用的是QSYS 平台。
本人默认为读者熟悉quartus开发平台和NIOS II软核开发.第一部分 EPCS flash固化EPCS flash主要用于固化FPGA的配置文件,与FPGA以SPI总线进行数据交互,在NIOS II软核开发过程中,可以将FPGA的配置文件和NIOS II应用程序一起固化置EPCS flash。
本人的片子使用的是EPCS64N。
具体固化步骤如下:第一步:创建EPCS控制器EPCS flash固化需要在搭建好NIOS软核后创建EPCS控制器,quartus 14.1的版本创建如图所示:EPCS控制器创建选择默认方式即可。
生成EPCS控制器后,按照下图方式连接到NIOS软核和并设置中断号为0。
具体连接方法如EPCS连接图所示:EPCS连接图注意:1、网上很多资料需要将EPCS的SPI引脚迁出,并需要对quartus进行相关设置。
本人认为应该是SOPC的开发方式。
在quartus 14.1的版本中默认加载EPCS控制器时没有SPI控制引脚。
因为alteral已经优化这部分设计,在工程编译间断会自动连接至SPI引脚,且不需要设置时序。
且并有要求EPCS的地址必须从0开始。
本人使用的是随机地址,并没有设置EPCS的地址为0。
2、在连线的时候需要把NIOS软核的jtag_debug_module_reset引脚和EPCS的复位引脚相连。
NiosIISOPC开发
Nios II/SOPC 的应用领域
01
02
03
04
通信
Nios II/SOPC在通信领域的 应用包括基带处理、调制解调
、协议栈处理等。
工业控制
Nios II/SOPC在工业控制领 域的应用包括运动控制、过程
控制、机器人控制等。
数字信号处理
Nios II/SOPC在数字信号处 理领域的应用包括音频处理、 图像处理、雷达信号处理等。
仿真测试
02
03
调试与优化
使用仿真工具对编译后的文件进 行仿真测试,验证设计的正确性 和可靠性。
在仿真测试过程中,对发现的问 题进行调试和优化,提高设计的 可靠性和性能。
在系统编程与调试
01
02
03
在系统编程
将编译后的文件下载到 Nios II处理器中,实现系 统的实际运行。
在系统调试
在系统运行过程中,使用 调试工具进行实时调试, 解决可能出现的错误和问 题。
Nios II 是一款基于 Altera FPGA 的可定制处理器,具有 高速、低功耗、可编程等优点 ,适用于数字信号处理应用。
数字信号处理算法包括滤波器 设计、频谱分析、信号识别等 ,基于 Nios II 的数字信号处 理系统可以实现这些算法的硬 件加速。
基于 Nios II 的数字信号处理 系统可以应用于音频处理、图 像识别、雷达信号处理等领域 。
应用领域
广泛应用于数字信号处理、通信、控制、图像处理等领域。
Nios II IDE 集成开发环境
概述
Nios II IDE是Altera公司 为Nios II处理器提供的集 成开发环境,支ห้องสมุดไป่ตู้C/C和 汇编语言开发。
Nios II——程序下载(Flash编程,DE0)
Nios II 程序下载(Flash编程,DE0)GCHENGDY最近,一直在玩nios,发现Nios太难伺候了,而且编译速度相当滴慢…相当滴慢…相当滴慢…用nios做产品,要是急性子,估计能把电脑给砸了。
一直没搞定一个问题,就是nios的程序下载不到我所使用的开发板里,只能Nios II Hardware或在线调试,一掉电程序就没了。
小程序还好说,也就等待几分钟,但是这几天在移植uC/GUI,编译速度太太慢(用的还是新版的Nios II 11.0),一直在Refreshing Makefiles(Waiting),一次就是十来分钟呀!很无语!(不知能否在软件里设置,能使它快点。
)尤其是在运行时,一直在搜索一个神马二进制文件,等的能让人吐血,此时若点下鼠标,Nios马上死机,不敢动,等待大概半个小时后,终于能在线运行了。
这样太慢了,于是决定得把程序固化到Flash里面,这样也就不用在搜索那个神马二进制文件了,就能快一点了,于是决定再试试nios的Flash编程。
弄了好多次还是不行,网上搜到攻略,说是要把EPCS控制器加上,再改几个引脚设置(具体的做法可以上网去搜),编译了好久,往EPCS里下载,还是不行!郁闷啊!于是又试着往Flash里面下载,尝试了不知N次…终于成功了!!!言归正传,下面我把我的方法分享给大家,我用的开发板是Altera官方开发板DE0,上面有串行配置芯片EPCS4,和16位的并行Flash芯片,本文介绍的方法是把Nios的程序下载到Flash中。
所用的软件是Quartus II 11.0和Nios II 11.0。
1. 把Flash的地址锁定为0x0,CPU复位地址选择Flash,重新生成软核。
2. 重新编译Quartus II 工程。
3. 下载 .sof 文件到开发板。
4. 打开Nios II 软件,重新编译工程。
5. 打开Flash编程,File-New,注意文件路径一定要选对。
nios ii固化程序到sopc的实现
Nios II下载程序到串行配置芯片EPCS方法:1 在SOPC Builder内添加epcs_controller模块,将cpu的reset地址设置在epcs_controller 上2 重新编译Quartus3 在Nios II IDE里将system library的Program memory(.text)和Read_only data memory(.rodata)设置为onchip_mem或者sdram,编译。
4 下载sof文件到板子5 进入Nios II IDE,在Tool菜单下选择FLASH Programmer,选择要下载的工程和与工程配套的.sof文件一起下载到EPCS中,注意一定要同时选择两个一起下载,hardware image选择custom即可,memory选择epcs controller。
系统会自动分配地址。
如果不选择同时下载配置文件,会出现提示。
Nios II下载程序到CFI FLASH,配置文件到串行配置芯片EPCS的方法:1 在SOPC Builder内添加CFI_FLASH模块,将cpu的reset地址设置在CFI_FLASH上2 重新编译Quartus3 在Nios II IDE里将system library的Program memory(.text)和Read_only data memory(.rodata)设置为onchip_mem或者sdram,编译。
4 下载sof文件到板子5 进入Nios II IDE,在Tool菜单下选择FLASH Programmer,选择要下载的工程到CFI FLASH 里,配置程序下载到EPCS中(也可以不加epcs_controller模块,通过POF方式固化配置程序)不用AS接口,用JTAG口配置EPCS器件,具体步骤如下:1 在Quartus中打开工程,编译生成配置文件.sof2 选择File->Convert Programming Files,调出Convert Programming Files对话框3 Ouput programming file 对话框内,Programming file type选择JTAG Indirect Configuration File(.jic);4 Configuration device 选择使用的配置芯片,如EPCS165 File name填写输出文件名称,如output_file.jic6 Input files to convert 对话框内,选中Flash Loader,点击Add Device按钮,在弹出对话框中选择你的FPGA芯片7 选中SOF DATA,点击Add file按钮,在弹出的资源浏览器中找到并选中.sof文件,打开它8 点击generate按钮生成output_file.jic9 打开Quartus的Programmer对话框,选择JTAG模式10 点击add file按钮,选择output_file.jic文件,并将Program复选框上打勾11 确定好JTAG电缆后,点击start,Quartus会先配置FPGA,然后再对FPGA烧写配置芯片。
以最简单的Hello程序为例,NIOSII开发的整个流程
以最简单的Hello程序为例,NIOSII开发的整个流程废话不多说,我们来开始最简单、最基本的NiosII程序,首先打开quartusII 9.1,双击即可,打开如下界面:点击File→New Project Wizard 如下图:出现如图:点击第一个后面的。
将新建的文件放入自己事先建好的文件夹hello内千万记住路径中不能有中文完成后如图:再第二个填入hello中即可,之后点击next,出现如下图:继续next,不要犹豫……在Device family 中选择Cyclone III(由于我们的板子芯片是这个系列的),其他的不用动。
在available devices中选择EP3C10E144C8,完成后点击next,这里我们不做仿真,直接点击next点击finish,完成新建真正的工作马上开始:在这点击File→New都可跳出如下界面:选择Block Diagram/Schematic File,双击,出现如下界面在工具栏()中选择SOPC,单击,出现如下界面其中的System Name 命名为kernal ,Target HDL选为VHDL将时钟改为100M,Name也改为clk(改不改都行)下一步选择CPU,也就是nios的处理器,双击选择完毕后,出现这样的对话框对话框中可看到三种nios核(从e核最简单,占用空间最小,第三个f核是快速的,但是占用空间最大的,中间的S核是介于e与f之间的,性能与占用空间比较平衡的核。
)这里我们选择f核(方便以后开发使用)这里Memory后面可选的部分暂时没有东西,暂且放一边,待我们建立好SDRAM与EPCS 再回来选择即可☺接下来,点击next其中Data cache 选择none(原因在后面介绍☺)点击next点击next 继续next其中有很多级别,这里我们选择level1即可点击完成,出现如下界面其中cpu_0即为我们要使用的核,右键rename改为cpu,下面要做的就是接外设,让cpu工作起来首先加入sdram双击sdram,出现选择Presets:Custom;Data with:16,其他的都不变。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NIOS II S沧1、。
沧2、 minio@yeah址net minio@yeah址net沧沧NIOS II :1. LED_ PIO_BASE个个 SOPC PIO(Parallel I/O)( Avalon Modules -> Other , LED_PIO, PIO_0IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led); 1. sopc PIO LED_PIO ;2. hello_led.c LED_PIO_BASE #define LED_PIO_BASE 0x00001800 SOPC .2. NIOSII PIO个个 hello_led.c IOIOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led);altera_avalon_pio_regs.hi nclude#define IORD_ALTERA_AVALON_PIO_DATA(base) IORD(base, 0)#define IOWR_ALTERA_AVALON_PIO_DATA(base, data) IOWR(base, 0, data)NIOSII i nclude IORD/IOWR PIOsmallsoftwarehello_led_0_syslibDebugsystem_des cription system.h, :#define LED_PIO_TYPE "altera_avalon_pio"#define LED_PIO_BASE 0x00004000LED_PIO_BASE IO 0x00004000 SOPCBuilder !( SopcBuilder NiosII , system.h IDE !)IOWR(0x00004000, 0, led);IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led); , , !3. :Linking hello_world_0.elf.../cygdrive/e/DE2Project_restored/software/hello_world_0_syslib/Debug/libhello_world_0_syslib.a(alt_main.o)(.text+0x60): In function `alt_main':/cygdrive/c/altera/72/nios2eds/components/altera_hal/HAL/src/alt_main.c:163: undefined reference to `main'collect2: ld returned 1 exit statusmake: *** [hello_world_0.elf] Error 1Build completed in 1.953 seconds: .int main(void), int mian()!!!!!!4.IOWR_ALTERA_AVALON_PIO_DATA ?:IOWR_ALTERA_AVALON_PIO_DATA altera_avalon_pio_regs.h io.h NiosII IDE NiosII Cache IO ( IOWR_ PIO IORD_ PIO )LED_PIO_BASE system.h LED_PIOIOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,led) LED_PIO ledAltera_embeded_peripherals PIONiosII_software_developer's_handbook AlteraNIOS_II :<stdio.h> "system.h"system.h HALIDE “altera_avalon_pio_regs.h ” I/O.IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led)led LED_PIO_BASE I/O led LEDFPGA “alt_types.h”alt_8 8alt_u8 8alt_16 16alt_u16 16alt_32 32alt_u32 32IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE,0xf);IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0x0);IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE)alt_irq_register(BUTTON_PIO_IRQ,edge_capture_ptr,handle_button_interrupts)"altera_avalon_pio_regs.h"#define IOWR_ALTERA_AVALON_PIO_IRQ_MASK(base,data)IOWR(base,2,data)#define IOWR_ALTERA_AVALON_PIO_EDGE_CAP(base,data)IOWR(base,3,data)#define IORD_ALTERA_AVALON_PIO_EDGE_CAP(base)IORD(base,3)0xf 0x73alt_irq_register ISR IRS extern int alt_irq_register(alt_u32 id,void*context,void(*irq_handler)(void*,alt_u32));handle_button_interrupts init_button_pio():1.#include "system.h"#include "altera_avalon_pio_regs.h"#include "alt_types.h"#include "stdio.h"#include "unistd.h"int main (void) __attribute__ ((weak, alias ("alt_main")));int alt_main (void){unsigned char led = 0;while (1){for(led=0;led<8;led++){IOWR_ALTERA_AVALON_PIO_DATA(LED_GREEN_BASE, 1<<led);usleep(500000); // 0.5}}return 0;}2.count_binary.h#ifndef COUNT_BINARY_H_#define COUNT_BINARY_H_#include "alt_types.h"#include <stdio.h>#include <unistd.h>#include "system.h"#include "sys/alt_irq.h"#include "altera_avalon_pio_regs.h" #define ESC 27#define ESC_TOP_LEFT "[1;0H"#define ESC_COL2_INDENT5 "[2;5H" #define ESC_CLEAR "K"#define ECS_COL1_INDENT5 "[1;5H" #endif /*COUNT_BINARY_H_*/main.c :#include "count_binary.h"int main(void){int i;int data;while(1){i=0;data=0x80;for(i=0;i<8;i++){IOWR(LED_GREEN_BASE,0,data);data>>=1;usleep(500000);}}}/*:IOWR(BASE, REGNUM, DATA)BASE REGNUM DATAREGNUM*/3.count_binary.hmain.c/*:DE24 4 ( ,4 ) */#include "count_binary.h"int alt_main(){int key,data;data=0x00;while(1){key=IORD(BUTTON_PIO_BASE,0);if(key==0x7)data=0x80;key=IORD(BUTTON_PIO_BASE,0);if(key==0xb)data=0x40;key=IORD(BUTTON_PIO_BASE,0);if(key==0xd)data=0x20;key=IORD(BUTTON_PIO_BASE,0);if(key==0xe)data=0x10;IOWR(LED_GREEN_BASE,0,data);}}/*IOIORD(BASE, REGNUM)BASE REGNUMBASE REGNUM*/:, ptf , DE2 , !4./*:DE2*/#include "count_binary.h"volatile int edge_capture;/* ( , )*/static void handle_button_interrupts(void *context,alt_u32 id);/* */static void init_button_pio(){void *edge_capture_ptr=(void*)&edge_capture;/* ( )*/IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE,0xf);/* */IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0x0);/* */alt_irq_register(BUTTON_PIO_IRQ,edge_capture_ptr,handle_button_interrupts); }/* */int main(void){init_button_pio();while(1){switch(edge_capture){/* 3 8 1*/case 0x08:IOWR(SEG7_DISPLAY_BASE,0,0x11111111);break;case 0x04:IOWR(SEG7_DISPLAY_BASE,0,0X22222222);break;case 0x02:IOWR(SEG7_DISPLAY_BASE,0,0X33333333);break;/* 0 8 4*/case 0x01:IOWR(SEG7_DISPLAY_BASE,0,0x44444444);break;}}}/* */static void handle_button_interrupts(void *context,alt_u32 id) {volatile int * edge_capture_ptr=(volatile int *)context;/* */*edge_capture_ptr=IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE);/* */IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0);}5.#include "count_binary.h"int alt_main(){int second=0;while(1){usleep(100000);second++;IOWR(SEG7_DISPLAY_BASE,0,second);}}6.1602lcd.h#ifndef LCD_H_#define LCD_H_#define lcd_write_cmd(base,data) IOWR(base,0,data)#define lcd_read_cmd(base) IORD(base,1)#define lcd_write_data(base,data) IOWR(base,2,data) #define lcd_read_data(base) IORD(base,3)void lcd_init();void lcd_show_text(char * text);void lcd_line2();void lcd_test();#endif /*LCD_H_*/main.c/* :DE2* :quaters II 7.2,NIOS II 7.2* :1602*/#include <unistd.h>#include <string.h>#include <io.h>#include "system.h"#include "lcd.h"void lcd_init(){/* 8 , */lcd_write_cmd(LCD_16207_0_BASE,0X38);usleep(2000);/* , */lcd_write_cmd(LCD_16207_0_BASE,0X0C);usleep(2000);/* */lcd_write_cmd(LCD_16207_0_BASE,0X01);usleep(2000);/* , */lcd_write_cmd(LCD_16207_0_BASE,0X06);usleep(2000);/* */lcd_write_cmd(LCD_16207_0_BASE,0X80);usleep(2000);}/* */void lcd_show_text(char * text){int i;for(i=0;i<strlen(text);i++){lcd_write_data(LCD_16207_0_BASE,text[i]);usleep(2000);}}void lcd_line1(){lcd_write_cmd(LCD_16207_0_BASE,0X80);usleep(2000);}/* , */void lcd_line2(){lcd_write_cmd(LCD_16207_0_BASE,0XC0);usleep(2000);}int main(){char text1[16]="Wu Qin De Shi";char text2[16]="Jie,Wu Qin De Ni";lcd_init();//while(1){/* */lcd_line1();/* */lcd_show_text(text1);/* */lcd_line2();/* */lcd_show_text(text2);usleep(4000000);lcd_write_cmd(LCD_16207_0_BASE,0X01);//usleep(2000);/* */lcd_line1();lcd_show_text("Liu Ya Li,");lcd_line2();/* */lcd_show_text("I Love You!");usleep(4000000);}return 0;}7.1602 NIOS II fprintf/* :DE2* :quaters II 7.2,NIOS II 7.2* :1602* NIOS II fprintf lcd !*/#include <unistd.h>#include <stdio.h>#include <string.h>#include <io.h>#include "system.h"int main(void){FILE *lcd;lcd=fopen("/dev/lcd_16207_0","w");/*1602 */fprintf(lcd,"I love NIOS II!\n");/*1602 */fprintf(lcd,"I love you!");fclose(lcd);return 0;}8.count_binary.h#ifndef COUNT_BINARY_H_#define COUNT_BINARY_H_#include "alt_types.h"#include <stdio.h>#include <unistd.h>#include "system.h"#include "sys/alt_irq.h"#include "altera_avalon_pio_regs.h"#define ESC 27#define ESC_TOP_LEFT "[1;0H"#define ESC_COL2_INDENT5 "[2;5H"#define ESC_CLEAR "K"#define ECS_COL1_INDENT5 "[1;5H"#endif /*COUNT_BINARY_H_*/main.c#include "count_binary.h"static alt_u8 count;volatile int edge_capture;#ifdef BUTTON_PIO_BASEstatic void handle_button_interrupts(void *context,alt_u32 id){volatile int *edge_capture_ptr=(volatile int *)context;*edge_capture_ptr=IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE);IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0);}static void init_button_pio(){void *edge_capture_ptr=(void *)&edge_capture;IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE,0XF);IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0X0);alt_irq_register(BUTTON_PIO_IRQ,edge_capture_ptr,handle_button_interrupts);}#endif#ifdef SEG7_DISPLAY_BASEstatic void sevenseg_set_hex(int hex){static alt_u8 segments[16]={0x81,0xcf,0x92,0x86,0xcc,0xa4,0xa0,0x8f,0x80,0x84, 0x88,0xe0,0xf2,0xc2,0xb0,0xb8};unsigned int data=segments[hex&15]|(segments[(hex>>4)&15]<<8);IOWR_ALTERA_AVALON_PIO_DATA(SEG7_DISPLAY_BASE,data);}#endifstatic void lcd_init(FILE *lcd){fprintf(lcd,"%c%s Counting will be displayed below...",ESC,ESC_TOP_LEFT);}static void initial_message(){}static void count_led(){#ifdef LED_RED_BASEIOWR_ALTERA_AVALON_PIO_DATA(LED_RED_BASE,count);#endif}static void count_sevenseg(){#ifdef SEG7_DISPLAY_BASEsevenseg_set_hex(count);#endif}static void count_lcd(void *arg){FILE *lcd=(FILE*)arg;fprintf(lcd,"%c%s 0x%x\n",ESC,ESC_COL2_INDENT5,count); }static void count_all(void *arg){count_led();count_sevenseg();count_lcd(arg);printf("%02x, ",count);}static void handle_button_press(alt_u8 type,FILE *lcd){if(type=='c'){switch(edge_capture){case 0x1:count_led();break;case 0x2:count_sevenseg();break;case 0x4:count_lcd(lcd);break;case 0x8:count_all(lcd);break;default:count_all(lcd);break;}}}int main(void){int i;int wait_time;FILE *lcd;count=0;lcd=fopen("/dev/lcd_16207_0","w");#ifdef BUTTON_PIO_BASE//init_button_pio();init_button_pio();#endifinitial_message();while(1){usleep(100000);if(edge_capture!=0){handle_button_press('c',lcd);}else{count_all(lcd);}if(count==0xff){fprintf(lcd,"%c%s Waiting...\n",ESC,ESC_TOP_LEFT,ESC,ESC_CLEAR, ESC,ESC_COL2_INDENT5);edge_capture=0;fprintf(lcd,"%c%s",ESC,ESC_COL2_INDENT5,ESC,ESC_CLEAR);wait_time=0;for(i=0;i<70;++i){wait_time=i/10;fprintf(lcd,"%c%s",ESC,ESC_COL2_INDENT5,wait_time);if(edge_capture!=0){handle_button_press('w',lcd);usleep(100000);}}initial_message();lcd_init(lcd);}count++;}fclose(lcd);return(0);}9. 1 +#include <stdio.h>#include <sys/unistd.h>#include <io.h>#include <string.h>#include "system.h"#include "altera_avalon_pio_regs.h"#include "altera_avalon_timer_regs.h"#include "alt_types.h"#include "sys/alt_irq.h"static void timer1_init(void); //int i = 0;/* */int main(void){// Timertimer1_init();while(1);return 0;}/* 1 */static void ISR_timer1(void *context, alt_u32 id){// 8 LEDIOWR_ALTERA_AVALON_PIO_DATA(LED_GREEN_BASE, 1<<i);i++;if(i == 8)i = 0;// TimerIOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_1_BASE, 0x00);}/* 1 */void timer1_init(void) //{// Timer1IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_1_BASE, 0x00);// Timer1 T=25000000/5000000=0.5s// 16IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_1_BASE,25000000);// 16IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_1_BASE,25000000 >> 16);//Timer1IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_1_BASE, 0x07);// Timer1alt_irq_register(TIMER_1_IRQ, (void *)TIMER_1_BASE, ISR_timer1);}10. 1+#include <stdio.h>#include <sys/unistd.h>#include <io.h>#include <string.h>#include "system.h"#include "altera_avalon_pio_regs.h"#include "altera_avalon_timer_regs.h"#include "alt_types.h"#include "sys/alt_irq.h"static void timer1_init(void); //unsigned long int i = 0;/* */int main(void){// Timertimer1_init();while(1);return 0;}/* 1 */static void ISR_timer1(void *context, alt_u32 id){// 8 7IOWR(SEG7_DISPLAY_BASE,0,i);i++;// TimerIOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_1_BASE, 0x00);}/* 1 */void timer1_init(void) //{// Timer1IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_1_BASE, 0x00);// Timer1 T=25000000/5000000=0.5s// 16IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_1_BASE,25000000);// 16IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_1_BASE,25000000 >> 16);//Timer1IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_1_BASE, 0x07);// Timer1alt_irq_register(TIMER_1_IRQ, (void *)TIMER_1_BASE, ISR_timer1);}11. 1 2+ +/* :DE2* :NIOS II7.2,QUATERS II 7.2* 1* 2 1* */#include <stdio.h>#include <sys/unistd.h>#include <io.h>#include <string.h>#include "system.h"#include "altera_avalon_pio_regs.h"#include "altera_avalon_timer_regs.h"#include "alt_types.h"#include "sys/alt_irq.h"/* : DE2 system.h TIMER_0 TIMER_1** system.h* #define TIMER_0_BASE 0x00681020* #define TIMER_0_IRQ 3* #define TIMER_1_BASE 0x00681040* #define TIMER_1_IRQ 4* :*/#define TIMER1_IRQ 3#define TIMER2_IRQ 4#define TIMER1_BASE 0x00681020#define TIMER2_BASE 0x00681040static void timer_init(void); //int i = 0,j = 0,flag;alt_u32 timer_prd[4] = {5000000, 10000000, 50000000, 100000000};// //T1 0.1s,0.2s,1s,2sint main(void){// Timertimer_init();while(1);return 0;}static void ISR_timer1(void *context, alt_u32 id){// 8 LEDIOWR(LED_GREEN_BASE,0,i);//IOWR(SEG7_DISPLAY_BASE,0,i);i++;if(i == 255)i = 0;// TimerIOWR_ALTERA_AVALON_TIMER_STATUS(TIMER1_BASE, 0x00);}/* 2 1 */static void ISR_timer2(void *context, alt_u32 id){// 1 T1=timer_prd[j]/50M( : )IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER1_BASE, timer_prd[j]);IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER1_BASE, timer_prd[j] >> 16);//IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER1_BASE, 0x07);//if(j == 0)flag = 0;if(j == 3)flag = 1;if(flag == 0){j++;}else{j--;}//IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER2_BASE, 0);}void timer_init(void) //{// Timer1IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER1_BASE, 0x00);// Timer1IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER1_BASE,80000000);IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER1_BASE, 80000000 >> 16);// Timer1IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER1_BASE, 0x07);// Timer1alt_irq_register(TIMER1_IRQ, (void *)TIMER1_BASE, ISR_timer1);// Timer2IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER2_BASE, 0x00);// Timer2 T2=400M/50M=8s;IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER2_BASE,400000000);IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER2_BASE, 400000000 >> 16);// Timer2IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER2_BASE, 0x07);// Timer2alt_irq_register(TIMER2_IRQ, (void *)TIMER2_BASE, ISR_timer2);}12./* DE2* NIOS II 7.2,QUATERS II 7.2** 1. 1* 2. 0-9 9 0-9* *//* 115200*/#include "altera_avalon_uart_regs.h"#include "system.h"#include "altera_avalon_pio_regs.h"#include "alt_types.h"#include "sys/alt_irq.h"#include <stdio.h>#include <string.h>#define UART_BASE 0x00681000#define UART_IRQ 2#define TIME_DELAY 1000000//1M,//UARTvoid Uart_send(unsigned char data){alt_u16 status;status=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);while(!(status&0x0040))//status=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE,data);}//UARTvoid Uart_send_n(unsigned char *ptr){while(*ptr){Uart_send(*ptr);ptr++;}Uart_send(0x0a);//}//UARTint Uart_receive(void){alt_u16 status;int temp;status=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);while(!(status&0x0080))//status=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);temp=IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);return temp;}//void Uart_ISR(void * context,alt_u32 id){unsigned char temp;temp=IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);switch(temp){case '0':IOWR(SEG7_DISPLAY_BASE,0,0x00000000);break;case '1':IOWR(SEG7_DISPLAY_BASE,0,0x11111111);break;case '2':IOWR(SEG7_DISPLAY_BASE,0,0x22222222);break;case '3':IOWR(SEG7_DISPLAY_BASE,0,0x33333333);break;case '4':IOWR(SEG7_DISPLAY_BASE,0,0x44444444);break;case '5':IOWR(SEG7_DISPLAY_BASE,0,0x55555555);break;case '6':IOWR(SEG7_DISPLAY_BASE,0,0x66666666);break;case '7':IOWR(SEG7_DISPLAY_BASE,0,0x77777777);break;case '8':IOWR(SEG7_DISPLAY_BASE,0,0x88888888);break;case '9':IOWR(SEG7_DISPLAY_BASE,0,0x99999999);break;}}//void Uart_init(){IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE, 0x80);// IOWR_ALTERA_AVALON_UART_STATUS(UART_BASE, 0x0);//// IOWR_ALTERA_AVALON_UART_RXDATA(UART_BASE, 0x0);// alt_irq_register(UART_IRQ,0,Uart_ISR);}int main(){Uart_init();while(1){Uart_send_n("Liu Ya Li,I love u!");//Uart_send_n(64);usleep(TIME_DELAY);//}}13. 1 2 timer0 timer1 timer2 2#define timer2#ifdef timer2#include <stdio.h>#include <sys/unistd.h>#include <io.h>#include <string.h>#include "system.h"#include "altera_avalon_pio_regs.h"#include "altera_avalon_timer_regs.h"#include "alt_types.h"#include "sys/alt_irq.h"//#define TIMER_2_BASE 0x01b02060//#define TIMER_2_IRQ 9static void timer2_init(void); //unsigned long int i = 0;/* */int main(void){// Timertimer2_init();while(1);return 0;}/* 2 */static void ISR_timer2(void *context, alt_u32 id){// 8 7IOWR(SEG7_DISPLAY_BASE,0,i);i++;// Timer2IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_2_BASE, 0x00);}/* 1 */void timer2_init(void) //{// Timer2IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_2_BASE, 0x00);// Timer2 T=1s// 16IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_2_BASE,100000000);// 16IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_2_BASE,100000000 >> 16);//Timer1IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_2_BASE, 0x07);// Timer2alt_irq_register(TIMER_2_IRQ, (void *)TIMER_2_BASE, ISR_timer2);}#else#include <stdio.h>#include <sys/unistd.h>#include <io.h>#include <string.h>#include "system.h"#include "altera_avalon_pio_regs.h"#include "altera_avalon_timer_regs.h"#include "alt_types.h"#include "sys/alt_irq.h"static void timer1_init(void); // unsigned long int i = 0;/* */int main(void){// Timertimer1_init();while(1);return 0;}/* 1 */static void ISR_timer1(void *context, alt_u32 id) {// 8 7IOWR(SEG7_DISPLAY_BASE,0,i);i++;// TimerIOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_1_BASE, 0x00);}/* 1 */void timer1_init(void) //{// Timer1IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_1_BASE, 0x00);// Timer1 T=1s// 16IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_1_BASE,100000000);// 16IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_1_BASE,100000000 >> 16);//Timer1IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_1_BASE, 0x07);// Timer1alt_irq_register(TIMER_1_IRQ, (void *)TIMER_1_BASE, ISR_timer1);}#endif14. SDRAMmemestmemest (please type "man memset" in your shell)void *memset(void *s, int c, size_t n);memset:: c n .char a[20] , memset(a, 0, 20)memset(a, 20, 0): memset, , , : char buffer[20];memset(buffer, 0, sizeof((char)*20));strcpy(buffer, "123");memset . , .: memset, memsetint some_func(struct something *a){……memset(a, 0, sizeof(a));…}: memset ?memset( &Address, 0, sizeof(Address)):1. ()char buf[5]CString str,str1 //memset(buf,0,sizeof(buf)) for(int i = 0 i<5 i++) { str.Format(“%d “,buf[i]) str1 +=str } TRACE(“%s\r\n“,str1)2. 0 memset MessageBox 0 NULL:demo 1#include <iostream>#include <cstring>using namespace std;int main(){char a[5];memset(a,'1',5);for(int i = 0;i < 5;i++)cout<<a[i]<<" ";system("pause");return 0;}#include <stdio.h>//#include "../inc/sopc.h"#include "system.h"#include "string.h"#include "unistd.h"#include "altera_avalon_pio_regs.h"/* DE2 system.h SDRAM_0_BASE* #define SDRAM_0_BASE 0x00800000,*/#define SDRAM_BASE 0x00800000unsigned short * ram = (unsigned short *)(SDRAM_BASE+0x10000); //SDRAM int main(void){int i;memset(ram,0,100);// SDRAM// ram ram ram (SDRAM_BASE+0x10100) for(i=0;i<100;i++){*(ram++) = i;}// ramfor(i=0;i<100;i++){printf("%d\n",*(--ram));}for(i=100;i<200;i++){*(ram++) = i;}// ramfor(i=100;i<200;i++){IOWR(SEG7_DISPLAY_BASE,0,*(--ram));printf("%d\n",*(--ram));usleep(1000000);}return 0;}15. API#include "system.h"#define _LEDtypedef struct{unsigned long int DATA;unsigned long int DIRECTION;unsigned long int INTERRUPT_MASK;unsigned long int EDGE_CAPTURE;} PIO_STR;#ifdef _LED#define LED ((PIO_STR *)LED_GREEN_BASE)#endif#include "unistd.h"#include "stdio.h"unsigned int i=0;CPU NIOS II/f none CPU16. 1+ptf ptf/* DE2* QUATERS II 7.2,NIOS II 7.2* 2010.7.17* 8 1* 1 T=timer_1_period/50000000* */#include "system.h"#include "altera_avalon_pio_regs.h"#include "altera_avalon_timer_regs.h"#include "sys/alt_irq.h"#include <io.h>#define timer_1_period 50000#define uint unsigned int#define uchar unsigned charalt_u32 count=0;uchar seg_table[11]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x7f};void isr_timer_1();/* 1 */void timer_1_init(){/* 1 */IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_1_BASE,0X00);/* 16 */IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_1_BASE,timer_1_period);/* 16 */IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_1_BASE,timer_1_period>>16);/* 1 */IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_1_BASE,0X07);/* 1 */alt_irq_register(TIMER_1_IRQ, (void *)TIMER_1_BASE, isr_timer_1);}/* 1 */void isr_timer_1(){count++;/* 1 */IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_1_BASE,0X00);}/* */void seg_display(alt_u32 z){if(z<10){IOWR(SEG0_DISPLAY_BASE,0,seg_table[z%10]);IOWR(SEG1_DISPLAY_BASE,0,seg_table[10]);IOWR(SEG2_DISPLAY_BASE,0,seg_table[10]);IOWR(SEG3_DISPLAY_BASE,0,seg_table[10]);IOWR(SEG4_DISPLAY_BASE,0,seg_table[10]);IOWR(SEG5_DISPLAY_BASE,0,seg_table[10]);IOWR(SEG6_DISPLAY_BASE,0,seg_table[10]);IOWR(SEG7_DISPLAY_BASE,0,seg_table[10]);}else if(z<100){IOWR(SEG0_DISPLAY_BASE,0,seg_table[z%10]);IOWR(SEG1_DISPLAY_BASE,0,seg_table[z%100/10]);IOWR(SEG2_DISPLAY_BASE,0,seg_table[10]);IOWR(SEG3_DISPLAY_BASE,0,seg_table[10]);IOWR(SEG4_DISPLAY_BASE,0,seg_table[10]);IOWR(SEG5_DISPLAY_BASE,0,seg_table[10]);IOWR(SEG6_DISPLAY_BASE,0,seg_table[10]);IOWR(SEG7_DISPLAY_BASE,0,seg_table[10]);}else if(z<1000){IOWR(SEG0_DISPLAY_BASE,0,seg_table[z%10]);IOWR(SEG1_DISPLAY_BASE,0,seg_table[z%100/10]);IOWR(SEG2_DISPLAY_BASE,0,seg_table[z%1000/100]);IOWR(SEG3_DISPLAY_BASE,0,seg_table[10]);。