NIOS程序详解

寄存器操作与API使用
本文介绍了寄存器操作的基本方法,通过定义特定结构体并利用宏定义简化寄存器访问过程,实现LED灯的循环点亮。同时,探讨了使用NIOS II IDE提供的API进行寄存器操作的方法。

寄存器操作方式与API

1.寄存器操作方式

clip_image048

  • 首先我们看红圈2处的结构体,在这里,我们定义了一个结构体,将其命名为PIO_STR,这个结构体的结构是有说法的,它是根据芯片手册来写的。就是PIO Core寄存器映射,我的结构体就是根据它来写的,名字不重要,重要的是它的顺序,也就是偏移量(offset)。第一项是数据data,第二项是IO口方向,第三项是中断控制位,第四项是边沿控制位。他们每一项都有n位,这个n就是我们在软核构建中的宽度(width)。红框3中的代码,这部分代码中你一定记得PIO_LED_BASE,对,这就是我之前在system.h中特意强调的,PIO_LED的基地址。那我红圈3中的代码意图就很明显了,定义了一个宏,命名为LED,它是指向PIO_LED_BASE的结构体指针,这个结构体就是PIO_STR(如果大家对结构体指针不理解,那你就得回去看C语言书了,我在这就不具体说了)。红圈1的代码也很简单,是为了控制红圈3的定义的,这样做是为了增强代码的严谨性和可控制性。当你没有定义PIO_LED_BASE时,你就可以将红圈1中的宏定义#define _LED去掉,  关键是LED->DATA = 1<<i;LED大家应该记得,LED是我们在sopc.h中定义的宏,是结构体指针,那么LED->DATA是什么意思大家就应该很清楚了,是它的结构体中DATA的内容(不是地址)。LED->DATA = 1<<i;就是对LED->DATA的四个位循环置1。所以,4个LED就会按顺序闪烁了。usleep是微妙级延时,我们在这里每次延时0.5ms, usleep(500000)。 


2.API

如果用NIOS II IDE提供的API来写,IOWR_ALTERA_AVALON_PIO是一个宏,在altera_avalon_pio_regs.h中,(大家可以按住ctrl键后,用鼠标点击进入定义所在的位置),它是一个IOWR的宏,而IOWR的具体写法在此不详细说了。

转载于:https://www.cnblogs.com/xxfighting/archive/2010/08/24/1807493.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值