[DSP编程] 5509开发板FLASH程序的问题

[复制链接]
1156|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 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| wangch_sh 发表于 2014-10-13 08:51 | 显示全部楼层
U4是SRAM,CE0接到片选;U5是FLASH,没接CE3.
 楼主| wangch_sh 发表于 2014-10-13 17:52 | 显示全部楼层
没人知道吗?
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

评论

受教了  发表于 2014-10-14 15:20
zhangmangui 发表于 2014-10-13 21:58 | 显示全部楼层
wangch_sh 发表于 2014-10-13 08:51
U4是SRAM,CE0接到片选;U5是FLASH,没接CE3.

CE3应该都没接    就是用于关键时候送数据的    也就只有CPLD通过里面的
译码程序读取了
 楼主| 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;
请多指教。
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存储空间,所以才通过这两个存储空间对功能寄存器进行访问的吧
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

粉丝
快速回复 在线客服 返回列表 返回顶部