MyFPGA Forum

标题: IOWR_ALTERA_AVALON_PIO_DATA函数用法 [打印本页]

作者: yqzhang    时间: 2010-4-6 18:34
标题: IOWR_ALTERA_AVALON_PIO_DATA函数用法
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寄存器中写入数据。寄存器的值在地址总线的范围之内。
返回值: -
作者: rich    时间: 2010-4-24 15:17
很棒的說明與結論.
最基本的IO functoin 就只有IORD,IOWR. (included in io.h)
作者: xlbian    时间: 2010-5-8 22:39
呵呵!学习了。
作者: pex857617729    时间: 2010-5-10 12:53
我想学写程序,应该看那些书?
作者: pex857617729    时间: 2010-5-12 13:11
同上楼   谢谢!
作者: yongyooh    时间: 2010-5-12 18:09
有见解!
作者: 培培    时间: 2010-5-17 20:07
为什么我在那个俄罗斯方块例子的时候
语句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函数,没有定义云云.....
调了好久也不知道怎么解决,肯请高手指正啊




欢迎光临 MyFPGA Forum (http://www.myfpga.org/discuz/) Powered by Discuz! X3