首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

关于用microblaze作flash控制器的两个问题,希望高手能帮下忙

关于用microblaze作flash控制器的两个问题,希望高手能帮下忙

我最近在用microblaze作一个flash的控制器,具体就是用microblaze的EMC来产生控制时序来读写板上的flash芯片,遇到了两个问题,希望达人能帮下忙:


(1)首先是EMC产生WE信号的问题,因为读写flash要求的速率比较高,所以当然是希望WE的周期越小越好,我修改了EMC的几个参数,具体如下:


# #120000
 ARAMETER C_TCEDV_PS_MEM_0 = 120000
# #120000
 ARAMETER C_TAVDV_PS_MEM_0 = 120000
# #35000
 ARAMETER C_THZCE_PS_MEM_0 = 35000
# #15000
 ARAMETER C_THZOE_PS_MEM_0 = 15000
# #120000
# 120000
 ARAMETER C_TWC_PS_MEM_0 = 500
# #70000
# 70000
 ARAMETER C_TWP_PS_MEM_0 = 30


最下面两个是控制WE的,但是PARAMETER C_TWC_PS_MEM_0改到10000以下后WE的周期就不再减小了,一直是287ns,这个时间我总觉得有点不太正常,我的板上晶振是75M的,一个时钟周期才十几个ns,所以想请教一下,是不是我设置的方法不正确?我是觉得有毛病。


(2)第二个是延时的问题,为了测试一些语句的具体执行时间,我用了一个while循环来用示波器观察,程序是这样的:


 while(1)
 {
//     for(i=0;i<100;i++);
       XGpio_mSetDataReg(XPAR_TEST_HOLES_BASEADDR, 1,0xff);
//     for(i=0;i<1;i++);
       i = 0;
       i = 1;
       i = 2;
       i = 3;
       i = 4;
       i = 5;
       i = 6;
       i = 7;
       XGpio_mSetDataReg(XPAR_TEST_HOLES_BASEADDR, 1,0x00);
 }


测试中发现,for循环一次的时间是80ns,但是改用上面的那些i = 0;之类的赋值语句时就不能产生延时的效果,具体就是在示波器上看不出来波形的变化,就算赋值语句的执行时间短一些,那我加了很多条语句也应该能有变化阿


 


小弟是初学者,问题可能出在我的操作方法上,希望高手能提出点批评意见,不胜感谢!

我自己顶
谢谢版主了 我也是觉得用MB的话速度会不够,不知道换POWERPC会不会有很大的提高呢?请问如果是V4芯片上的PPC实际运行的时候能跑多快的时钟呢?
再次谢谢了
哦 我现在在看microblaze的手册 后面有一章介绍的是汇编指令 microblaze能用汇编写程序吗 这样是不是快一些阿
pengyoubieku 谢谢你的回复
我刚才试着在程序里面加进汇编代码 但是好像有问题 具体是这样的
#define FILL_LED_REG() asm volatile ("addi r13,r0,0x7") ;\
asm volatile ("addi r14,r0,0x2004") ;

#define LED_SET() asm volatile ("swi r13,r14, 0x0000");

上面是定义的两个宏

我用于点灯的GPIO的地址为
#define XPAR_LEDS_BASEADDR 0x20040000
#define XPAR_LEDS_HIGHADDR 0x2004FFFF

然后在后面调用上面自己定义的那两个宏来点灯 但是灯没有反应 麻烦你看看我的程序有什么问题好吗 谢谢了
返回列表