打印
[DSP编程]

5509开发板FLASH程序的问题

[复制链接]
929|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangch_sh|  楼主 | 2014-10-13 08:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我们公司有一块5509开发板,例程里有FLASH程序。
我看不懂,
比如片选:
#define CESECT1 0x200000
#define CESECT2 0x400000
#define CESECT3 0x600000
void Flash_CS()
{
        deminaddr = (int *)CESECT2;
        *deminaddr = 0x00fd;
    deminaddr = (int *)CESECT3;
        *deminaddr = 0x0040;
        deminaddr = (int *)CESECT2;
        *deminaddr = 0x00ff;
}

相关帖子

沙发
wangch_sh|  楼主 | 2014-10-13 08:40 | 只看该作者






使用特权

评论回复
板凳
wangch_sh|  楼主 | 2014-10-13 08:48 | 只看该作者
1.手册上说,CE1和CE2接至CPLD使用。
deminaddr = (int *)CESECT2;
        *deminaddr = 0x00fd;
这一句是选中CE2,AFLASH为0使能。
那为什么是CE2而不是CE1呢?
2.deminaddr = (int *)CESECT3;
        *deminaddr = 0x0040;
这一句好像是FLASH分配到CE3,那是怎么分配到CE3的呢?
请高手指教,谢谢!

使用特权

评论回复
地板
wangch_sh|  楼主 | 2014-10-13 08:50 | 只看该作者

使用特权

评论回复
5
wangch_sh|  楼主 | 2014-10-13 08:51 | 只看该作者
U4是SRAM,CE0接到片选;U5是FLASH,没接CE3.

使用特权

评论回复
6
wangch_sh|  楼主 | 2014-10-13 17:52 | 只看该作者
没人知道吗?

使用特权

评论回复
7
zhangmangui| | 2014-10-13 21:57 | 只看该作者
wangch_sh 发表于 2014-10-13 08:48
1.手册上说,CE1和CE2接至CPLD使用。
deminaddr = (int *)CESECT2;
        *deminaddr = 0x00fd;

#define CESECT1 0x200000
#define CESECT2 0x400000
#define CESECT3 0x600000
这个宏定义就是每个映射区的基地址   也就是起始地址
从你的文档里可以看出   CE0用于外扩SDRAM   CE1-CE2接到了CPLD上
*deminaddr = 0x00fd;是用来时能FLASH    也就是CPLD检测到CE2拉低了  
过来的数据就会送到了功能寄存器  也就是文档中D1(AFLASH)位为1
这说明接下来要对FLASH操作了
deminaddr = (int *)CESECT3;
        *deminaddr = 0x0040;
由于CE3没有外扩SDRAM和FLASH  也没有接CPLD
所以送数据0x0040时   数据总线没有像FLASH或SDRAM的占用  
由于CPLD中通过寄存器使能了FLASH   所以这个数据CPLD直接读取配置Flash地址扩展寄存器
也就是FCE,FA18-FA13都为0     FRST为高    也就是对应数据0x40
也就是片选了flash

使用特权

评论回复
评论
NWPU_CHEN 2014-10-14 15:20 回复TA
受教了 
8
zhangmangui| | 2014-10-13 21:58 | 只看该作者
wangch_sh 发表于 2014-10-13 08:51
U4是SRAM,CE0接到片选;U5是FLASH,没接CE3.

CE3应该都没接    就是用于关键时候送数据的    也就只有CPLD通过里面的
译码程序读取了

使用特权

评论回复
9
wangch_sh|  楼主 | 2014-10-14 12:33 | 只看该作者

1.手册上说,CE1和CE2接至CPLD使用。
deminaddr = (int *)CESECT2;
        *deminaddr = 0x00fd;
这一句是选中CE2,AFLASH为0使能。
那为什么是CE2而不是CE1呢?
谢谢!
这样行不行呢?
deminaddr = (int *)CESECT1;
        *deminaddr = 0x00fd;
请多指教。

使用特权

评论回复
10
NWPU_CHEN| | 2014-10-14 15:16 | 只看该作者
wangch_sh 发表于 2014-10-14 12:33
1.手册上说,CE1和CE2接至CPLD使用。
deminaddr = (int *)CESECT2;
        *deminaddr = 0x00fd;

你映射的管理扩展寄存器组的访问地址估计是在CE2、CE3存储空间,所以才通过这两个存储空间对功能寄存器进行访问的吧

使用特权

评论回复
11
zhangmangui| | 2014-10-14 23:54 | 只看该作者
wangch_sh 发表于 2014-10-14 12:33
1.手册上说,CE1和CE2接至CPLD使用。
deminaddr = (int *)CESECT2;
        *deminaddr = 0x00fd;

这就与CPLD里面的代码有关啊   你可以贴出CPLD里面的译码
就明白了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:为江山踏坏了乌骓马,为社稷拉断了宝雕弓。

318

主题

2817

帖子

5

粉丝