打印

FSMC的问题

[复制链接]
3790|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jinjing999|  楼主 | 2010-5-4 09:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jinjing999 于 2010-5-4 09:43 编辑

我在提供例子里:
void FSMC_SRAM_WriteBuffer(u16* pBuffer, u32 WriteAddr, u32 NumHalfwordToWrite)
{
  for(; NumHalfwordToWrite != 0; NumHalfwordToWrite--) /* while there is data to write */
  {
    /* Transfer data to the memory */
    *(u16 *) (Bank1_SRAM3_ADDR + WriteAddr) = *pBuffer++;
   
    /* Increment the address*/  
    WriteAddr += 2;
  }   
}


void FSMC_SRAM_ReadBuffer(u16* pBuffer, u32 ReadAddr, u32 NumHalfwordToRead)
{
  for(; NumHalfwordToRead != 0; NumHalfwordToRead--) /* while there is data to read */
  {
    /* Read a half-word from the memory */
    *pBuffer++ = *(vu16*) (Bank1_SRAM3_ADDR + ReadAddr);
    /* Increment the address*/  
    ReadAddr += 2;
  }  
}

都是操作的16位数据,用的SARM是16位的。
如果我还用SARM的16位宽度的器件,我能操作的8位数据吗?
把函数改成以下,能操作吗?

void FSMC_SRAM_WriteBuffer(u8* pBuffer, u32 WriteAddr, u32 NumHalfwordToWrite)
{
  for(; NumHalfwordToWrite != 0; NumHalfwordToWrite--) /* while there is data to write */
  {
    /* Transfer data to the memory */
    *(u8 *) (Bank1_SRAM3_ADDR + WriteAddr) = *pBuffer++;
   
    /* Increment the address*/  
    WriteAddr ++;
  }   
}

void FSMC_SRAM_ReadBuffer(u8* pBuffer, u32 ReadAddr, u32 NumHalfwordToRead)
{
  for(; NumHalfwordToRead != 0; NumHalfwordToRead--) /* while there is data to read */
  {
    /* Read a half-word from the memory */
    *pBuffer++ = *(u8*) (Bank1_SRAM3_ADDR + ReadAddr);
    /* Increment the address*/  
    ReadAddr ++;
  }  
}
沙发
jinjing999|  楼主 | 2010-5-4 09:44 | 只看该作者
呵呵
现在没有现成的硬件

我考虑是用16位器件,还是用8位器件

使用特权

评论回复
板凳
香水城| | 2010-5-4 10:20 | 只看该作者
可以操作8位数据。

使用特权

评论回复
地板
shizhewen| | 2010-5-4 10:21 | 只看该作者
呵呵

使用特权

评论回复
5
jinjing999|  楼主 | 2010-5-4 13:39 | 只看该作者
关于时序参数计算,我有点搞不懂?
ADDSET:地址建立时间
ADDHOLD:地址保持时间
DATAST:数据建立时间
ACCMOD:访问模式

建立时间:
((ADDSET + 1) + (DATAST + 1)) × HCLK = max (tWC, tRC)
DATAST × HCLK = tPWE1
DATAST必须满足:
DATAST = (tAA + tsu(Data_NE) + tv(A_NE))/HCLK – ADDSET – 4

tWC   12ns    写周期时间
tRC   读周期时间   12ns
tPWE1   写使能低脉冲宽度  8ns
tAA        地址有效时间   12ns

HCLK   内部AHB时钟频率  72  MHz

tsu(Data_NE) + tv(A_NE)数据至FSMC_NEx高的建立时间 + FSMC_NEx低至FSMC_A有效     36ns


这是一篇文档给的数据

计算出的结果:

使用上述公式、存储器的时序(表4)和STM32F10xxx的参数(表2),可以得到:

地址建立时间:0x0

地址保持时间:0x0

数据建立时间:0x2

我怎么带上边的公式:HCLK 只能等于8才能对。可给的参数是72M,就是1.39ns也是不对的

使用特权

评论回复
6
jinjing999|  楼主 | 2010-5-4 13:39 | 只看该作者
请问这个是怎么算的。实在搞不明白

使用特权

评论回复
7
yybj| | 2010-5-4 20:36 | 只看该作者
我也很想弄明白,知道的高手说明下

使用特权

评论回复
8
香水城| | 2010-5-4 21:19 | 只看该作者
回5楼:这个帖子回答了你的问题:请教香主,关于FSMC的时序计算

使用特权

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

本版积分规则

73

主题

363

帖子

1

粉丝