Board logo

标题: NiosII中访问外围存储器用哪些指令? [打印本页]

作者: wjingmei001    时间: 2007-6-1 19:11     标题: NiosII中访问外围存储器用哪些指令?

新手问一个关于NiosII的简单的问题,对外围存储器的访问采用哪些指令?比如对sdram,flash,sram等。

多谢高手指点迷津。


作者: caopengly    时间: 2007-6-1 19:47

简单的方法是直接对地址读写。

函数原型:IORD(BASE, REGNUM) 
输入参数:BASE为寄存器的基地址,REGNUM为寄存器的偏移量
函数说明:从基地址为BASE的设备中读取寄存器中偏移量为REGNUM的单元里面的值。寄存器的值在地址总线的范围之内。
返回值:  -

函数原型:IOWR(BASE, REGNUM, DATA)
输入参数:BASE为寄存器的基地址,REGNUM为寄存器的偏移量,DATA为要写入的数据
函数说明:往偏移量为REGNUM寄存器中写入数据。寄存器的值在地址总线的范围之内。
返回值:  -


或者:
Flash
函数原型:int alt_erase_flash_block(alt_flash_fd* fd, int offset, int length)
输入参数:fd为具体的flash设备;offset擦除的flash模块的偏移量;length擦除的flash模块的长度
函数说明:擦除单独的一个flash模块
返回值: 发送成功返回0,反之返回为负数

函数原型:void alt_flash_close_dev(alt_flash_fd * fd)
输入参数:fd为具体的flash设备
函数说明:关闭flash设备
返回值: -

函数原型:alt_flash_fd * alt_flash_open_dev(const char* name)
输入参数:
函数说明:打开flash设备。一旦打开,函数alt_write_flash()用来写入,函数alt_read_flash()用来读取数据,或者使用函数alt_get_flash_info(), alt_erase_flash_block(), alt_write_flash_block(),控制单个模块
返回值: 失败返回0,成功其他值

函数原型:int alt_get_flash_info(alt_flash_fd* fd, flash_region ** info,
int* number_of_regions)
输入参数:fd flash设备;info指向flash_region结构体的指针;number_of_regions
函数说明:得到擦除flash区域的细节
返回值: 发送成功返回0,反之返回为负数

函数原型:int alt_read_flash(alt_flash_fd* fd, int offset, void* dest_addr, int length)
输入参数:dest_addr目标地址指针
函数说明:从flash偏移量为offset字节开始读取数据,写入到目标地址dest_addr中
返回值: 成功返回0,反之为非0
函数原型:int alt_write_flash(alt_flash_fd* fd, int offset, const void* src_addr,
int length)
输入参数:src_addr源地址;fd,flash设备;offset 偏移量;length字节长度
函数说明:写数据到flsah中,要写的数据在源地址src_addr中
返回值: 成功返回0,反之为非0

函数原型:int alt_write_flash_block(alt_flash_fd* fd, int block_offset, int data_offset,
const void *data, int length)
输入参数:fd;data_offset起始写数据的偏移量;length为要写数据的长度
函数说明:写入到一个已擦除的flash模块
返回值: 成功返回0,反之为非0

更多见nios software handbook.pdf,网上有!


作者: wjingmei001    时间: 2007-6-1 20:39

非常感谢!

这种方法IORD(BASE, REGNUM) ,BASE应该为存储器的基地址,对吧?访问不同的存储单元只需要改变REGNUM寄存器的号,是这样吗?

我这样试过,但是在读取SDRAM中的数据的时候会发生一段时间读取的数据正确,过一会儿就会出现0XFF和0X00交替的数据,一会儿又恢复了?不知道是什么原因。

是不是我的SDRAM配置有问题?






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0