MyFPGA Forum

 找回密码
 注册
搜索
查看: 16397|回复: 6
打印 上一主题 下一主题

IOWR_ALTERA_AVALON_PIO_DATA函数用法

[复制链接]
跳转到指定楼层
1#
发表于 2010-4-6 18:34:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IOWR_ALTERA_AVALON_PIO_DATA是用来读取数据的.
具体怎么用,我在Nios II Software Handbook.pdf中久久没有找到.
此如IOWR_ALTERA_AVALON_PIO_IRQ_MASK等用法也是临时从网上查询而得.
直到今天,我终于找到理解此函数的具体用法的好方法了.
在Nios II中选中类如IOWR_ALTERA_AVALON_PIO_DATA的函数--->Open Definition--->会看到#define IOWR_ALTERA_AVALON_PIO_DATA(base, data)       IOWR(base, 0, data)
在这里,我们看到我们想找到的函数实际是 IOWR;
同时,其他诸如此类函数有:
#define IOADDR_ALTERA_AVALON_PIO_DIRECTION(base)      __IO_CALC_ADDRESS_NATIVE(base, 1)
#define IORD_ALTERA_AVALON_PIO_DIRECTION(base)        IORD(base, 1)
#define IOWR_ALTERA_AVALON_PIO_DIRECTION(base, data)  IOWR(base, 1, data)

#define IOADDR_ALTERA_AVALON_PIO_IRQ_MASK(base)       __IO_CALC_ADDRESS_NATIVE(base, 2)
#define IORD_ALTERA_AVALON_PIO_IRQ_MASK(base)         IORD(base, 2)
#define IOWR_ALTERA_AVALON_PIO_IRQ_MASK(base, data)   IOWR(base, 2, data)

#define IOADDR_ALTERA_AVALON_PIO_EDGE_CAP(base)       __IO_CALC_ADDRESS_NATIVE(base, 3)
#define IORD_ALTERA_AVALON_PIO_EDGE_CAP(base)         IORD(base, 3)
#define IOWR_ALTERA_AVALON_PIO_EDGE_CAP(base, data)   IOWR(base, 3, data)


#define IOADDR_ALTERA_AVALON_PIO_SET_BIT(base)       __IO_CALC_ADDRESS_NATIVE(base, 4)
#define IORD_ALTERA_AVALON_PIO_SET_BITS(base)         IORD(base, 4)
#define IOWR_ALTERA_AVALON_PIO_SET_BITS(base, data)   IOWR(base, 4, data)
   
#define IOADDR_ALTERA_AVALON_PIO_CLEAR_BITS(base)       __IO_CALC_ADDRESS_NATIVE(base, 5)
#define IORD_ALTERA_AVALON_PIO_CLEAR_BITS(base)         IORD(base, 5)
#define IOWR_ALTERA_AVALON_PIO_CLEAR_BITS(base, data)   IOWR(base, 5, data)

在上述多个函数中,最终都归到几种简单的函数中去了. 我们总结一下,需要知道的函数有:IORD,IOWR两上而已.也就是,我们掌握了基本的IORD,IOWR用法的话,关于函数的别名就容易理解多了.

函数原型:IORD(BASE, REGNUM)
输入参数:BASE为寄存器的基地址,REGNUM为寄存器的偏移量
函数说明:从基地址为BASE的设备中读取寄存器中偏移量为REGNUM的单元里面的值。寄存器的值在地址总线的范围之内。
返回值: -
函数原型:IOWR(BASE, REGNUM, DATA)
输入参数:BASE为寄存器的基地址,REGNUM为寄存器的偏移量,DATA为要写入的数据
函数说明:往偏移量为REGNUM寄存器中写入数据。寄存器的值在地址总线的范围之内。
返回值: -
2#
发表于 2010-4-24 15:17:17 | 只看该作者
很棒的說明與結論.
最基本的IO functoin 就只有IORD,IOWR. (included in io.h)
3#
发表于 2010-5-8 22:39:46 | 只看该作者
呵呵!学习了。
4#
发表于 2010-5-10 12:53:03 | 只看该作者
我想学写程序,应该看那些书?
5#
发表于 2010-5-12 13:11:51 | 只看该作者
同上楼   谢谢!
6#
发表于 2010-5-12 18:09:48 | 只看该作者
有见解!
7#
发表于 2010-5-17 20:07:28 | 只看该作者
为什么我在那个俄罗斯方块例子的时候
语句IORD_ALTERA_AVALON_PIO_EDGE_CAP(pio_0_BASE) ,
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(pio_0_BASE, 0x00),总是报错呢?错误原因直指pio_0_BASE(use first undefined function),第一次使用的PIO_EDGE_CAP函数,没有定义云云.....
调了好久也不知道怎么解决,肯请高手指正啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-5-2 23:04 , Processed in 0.044636 second(s), 15 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表