5509开发板FLASH程序的问题
我们公司有一块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;
}
1.手册上说,CE1和CE2接至CPLD使用。
deminaddr = (int *)CESECT2;
*deminaddr = 0x00fd;
这一句是选中CE2,AFLASH为0使能。
那为什么是CE2而不是CE1呢?
2.deminaddr = (int *)CESECT3;
*deminaddr = 0x0040;
这一句好像是FLASH分配到CE3,那是怎么分配到CE3的呢?
请高手指教,谢谢! U4是SRAM,CE0接到片选;U5是FLASH,没接CE3. 没人知道吗? wangch_sh 发表于 2014-10-13 08:48 static/image/common/back.gif
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 wangch_sh 发表于 2014-10-13 08:51 static/image/common/back.gif
U4是SRAM,CE0接到片选;U5是FLASH,没接CE3.
CE3应该都没接 就是用于关键时候送数据的 也就只有CPLD通过里面的
译码程序读取了
1.手册上说,CE1和CE2接至CPLD使用。
deminaddr = (int *)CESECT2;
*deminaddr = 0x00fd;
这一句是选中CE2,AFLASH为0使能。
那为什么是CE2而不是CE1呢?
谢谢!
这样行不行呢?
deminaddr = (int *)CESECT1;
*deminaddr = 0x00fd;
请多指教。 wangch_sh 发表于 2014-10-14 12:33 static/image/common/back.gif
1.手册上说,CE1和CE2接至CPLD使用。
deminaddr = (int *)CESECT2;
*deminaddr = 0x00fd;
你映射的管理扩展寄存器组的访问地址估计是在CE2、CE3存储空间,所以才通过这两个存储空间对功能寄存器进行访问的吧 wangch_sh 发表于 2014-10-14 12:33 static/image/common/back.gif
1.手册上说,CE1和CE2接至CPLD使用。
deminaddr = (int *)CESECT2;
*deminaddr = 0x00fd;
这就与CPLD里面的代码有关啊 你可以贴出CPLD里面的译码
就明白了
页:
[1]