读写EPCS

分类: 学习心得 |
module top(
//always on 40MHz clock LVDS
input codec_main_clk,
output epcs_dclk,
output epcs_sce ,
output epcs_sdo ,
input epcs_data0
);
wire sys_rstn;
wire sys_clk,sys_clk_1,sys_clkx2;
wire int_40mhz,ref_pll_clk;
wire locked;
sys_pll MAIN_PLL(
.areset(1'b0), //(reset_global),
.inclk0(codec_main_clk), //40M
.c0(), //60M
.c1(sys_clk), //60M
.locked(locked)
);
assign sys_rstn = locked;
nios_cpu u0 (
);
二、qsys配置
时钟设置
添加jtag,默认配置
添加ID
添加epcs
添加onchipmem,内存设置为409600
连续如下所示,中断如下所示:
将EPCSE设置为export,自动分配地址,自动分配中断,点击generate,完成。
在quartus中将EPCSE接口的4根线设置为普通IO,具体如下图配置:
生成bit,然后启动eclipse,新建software文件夹。
三、软件编写
新建工程,设置为hello world。
Main函数编程如下所示:
#include
#include
#include
#include
int
{
//
//
}
说明首先添加三个头文件,前两个用于epcs函数使用,后一个用于EPCS_FLASH_NAME。
用到的函数alt_flash_open_dev,该函数打开EPCS设备。
alt_epcs_flash_erase_block用于擦除EPCS
alt_epcs_flash_write用于写内容,后面为地址,buff和长度。
alt_epcs_flash_read用于读内容,后面为地址,buff和长度。
alt_flash_close_dev用于关闭设备。
四、验证
首先给0x8f0000写0到31递增数据,然后可以读出来写入的值也为0到31,然后断电,设备重启,这时候不给EPCS写,只是读取,会发现内容还是0到31,表示数据读取正确没有丢失数据,EPCS操作完成。