硬汉嵌入式论坛

 找回密码
 立即注册
查看: 8007|回复: 5
收起左侧

[有问必答] 请教FSMC问题

[复制链接]

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
发表于 2014-5-29 10:49:05 | 显示全部楼层 |阅读模式
版主您好,请教下FSMC操作问题,我现在操作的是一个8位数据和8位地址线的芯片,调试过程中发现读的时候正常,进行写操作时发现NWE信号出现问题,即写一个8bit数据,出现4次NWE有效电平,给人感觉是写了一个32bit的数据,配置如下:

    /*-- FSMC Configuration,数据暂时以最长时间调试 ------------------------------------------------------*/
    p.FSMC_AddressSetupTime = 10;        //地址建立时间
    p.FSMC_AddressHoldTime = 0;            //地址保持时间
    p.FSMC_DataSetupTime = 15;            //设定数据时间时间
    p.FSMC_BusTurnAroundDuration = 1;    //总线转向时间
    p.FSMC_CLKDivision = 0;
    p.FSMC_DataLatency = 0;//数据延时
    p.FSMC_AccessMode = FSMC_AccessMode_A;

    FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;        //地址为0x60000000
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;//不复用
    FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;    // FSMC_MemoryType_PSRAM;
    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;//总线位宽为8bit
    /*使能或关闭同步NOR闪存存储器的突发访问模式设置是否使用迸发访问模式(应该就是连续读写模式吧)*/
    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
   
    FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
    /*设置WAIT信号的有效电平*/
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
    /*设置是否使用环回模式*/
    FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
    /*设置WAIT信号有效时机*/
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
    /*设定是否使能写操作*/
    FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
    /*设定是否使用WAIT信号*/
    FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
    /*使能或关闭扩展模式,扩展模式用于访问具有不同读写操作时序的存储器,设定是否使用单独的写时序*/     
    FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
   
    FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
    FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
    FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

    FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);

    /*!< Enable FSMC Bank1_SRAM1 Bank */
    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);

麻烦版主帮忙分析下,谢谢
回复

使用道具 举报

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
 楼主| 发表于 2014-5-29 11:30:53 | 显示全部楼层
u8 FSMC_CPLD_Read(u8 ui_write_addr)  
{  
    u8 uc_data = 0;
    u32 ui_addr_offset=0;
   
    ui_addr_offset = ((u32)ui_write_addr) << 16;
    uc_data = *(u32 *) (EXT_CPLD_ADDR + ui_addr_offset);   
    return(uc_data);
}

void FSMC_CPLD_Write(u8 uc_data, u8 ui_write_addr)  
{  
    u32 ui_addr_offset=0;
   
    ui_addr_offset = ((u32)ui_write_addr) << 16;
   
    *(uint32_t *) (EXT_CPLD_ADDR + ui_addr_offset) = uc_data;   
}  

读写函数
回复

使用道具 举报

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
 楼主| 发表于 2014-5-29 12:59:53 | 显示全部楼层
找到原因 了,还是因为对指针不熟悉造成的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2014-5-29 15:36:15 | 显示全部楼层

回 jcx0324 的帖子

jcx0324:找到原因 了,还是因为对指针不熟悉造成的 (2014-05-29 12:59) 
本打算下午给你看看呢,解决了就好。
回复

使用道具 举报

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
 楼主| 发表于 2014-5-30 08:08:30 | 显示全部楼层
谢谢啦,感觉FSMC还是挺好用的
回复

使用道具 举报

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
 楼主| 发表于 2014-6-9 15:34:35 | 显示全部楼层
再请教个问题,我如上面配置,FSMC读的时间比写的时间长很多,我想要读写是不同的时序,不知版主有没设置过?我修改这句话 FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;通信就出错,忘记在哪里看到的例程可以分开写的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-13 04:12 , Processed in 0.409491 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表