初级会员

- 积分
- 127
- 金钱
- 127
- 注册时间
- 2016-4-8
- 在线时间
- 15 小时
|
1金钱
今天我看了一下用fsmc控制外部RAM的实验,有几点不明白,请原子哥指教一下。
void FSMC_SRAM_WriteBuffer(u8* pBuffer,u32 WriteAddr,u32 n)
{
for(;n!=0;n--)
{
*(vu8*)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer;
WriteAddr++;
pBuffer++;
}
}
就是这个往sram里面写n个字节的时候,假如我让 WriteAddr=0,此时表示我要往地址为0x68000000中写数据了,此时fsmc的A0到A25都是0吗?如果是0的话!它和(当 Bank1 接的是 16 位宽度存储器的时候: HADDR[25:1]对应fsmc[24;0];有没有冲突呢?
第二个问题:fsmc的每一个地址是不是对应的是外面SRAM的8位(即一个字节)呢?
第三个问题:为什么地址的最后一位是偶数的话,UB=0,UL=1低8有效,高8无无效呢?这个是有里面的硬件决定的吗?如果是的话,问什么要搞这么麻烦呢?直接16位都有效的话,也没有事呀!
第四问题:如果我要写16位的数据的话,即u16* pBuffer,是不是函数里面最后一个语句要改成pBuffer+=2了呢?
|
最佳答案
查看完整内容[请看2#楼]
1,是的,没冲突。2,对应2个字节,因为数据线是16位的。 3,硬件决定。 方便字节访问。 4,不需要,你把vu8改为vu16就行了。
|