硬汉嵌入式论坛

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

FMC如果连续产生多个读脉冲?

[复制链接]

98

主题

360

回帖

654

积分

金牌会员

积分
654
发表于 2020-8-19 13:39:05 | 显示全部楼层 |阅读模式
利用STM32F4的FMC接AD7606,虽然读出的数据正常,但时序跟手册稍有区别,不知从哪儿下手调整一下,特来请教硬汉哥。
第一张图是手册里面的读时序,第二张图是我用逻辑分析仪捕捉到的时序。
可以看到手册里读N次数据片选仅跳变了一次,但我实际捕捉NE片选信号却跳变了8次(程序中循环对这个地址读取了8次),有办法也改成跳变一次吗?

手册时序

手册时序


逻辑分析仪时序

逻辑分析仪时序

回复

使用道具 举报

98

主题

360

回帖

654

积分

金牌会员

积分
654
 楼主| 发表于 2020-8-19 13:44:12 | 显示全部楼层
FMC初始化代码如下
static void CfgAdFmc(void)
{
        FMC_NORSRAMInitTypeDef                          FMC_NORSRAMInitStructure;
        FMC_NORSRAMTimingInitTypeDef  FMC_SDRAMTimingInitStructure;               

        RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FMC, ENABLE);                                                                                                 /*        打开FMC外设时钟        */
       
        /* FSMC_Bank1_NORSRAM4 configuration */
        FMC_SDRAMTimingInitStructure.FMC_AddressSetupTime                                = 0;                                                                 /*        地址建立时间        */
        FMC_SDRAMTimingInitStructure.FMC_AddressHoldTime                                 = 0;                                                                 /*        地址保持时间        */
        FMC_SDRAMTimingInitStructure.FMC_DataSetupTime                                         = 3;                                                                 /*        数据建立时间        */
        FMC_SDRAMTimingInitStructure.FMC_BusTurnAroundDuration         = 0;                                                                 /*        总线恢复时间        */
        FMC_SDRAMTimingInitStructure.FMC_CLKDivision                                                 = 0;                                                                 /*        时钟分频因子        */
        FMC_SDRAMTimingInitStructure.FMC_DataLatency                                                 = 0;                                                                 /*        数据产生时间        */
        FMC_SDRAMTimingInitStructure.FMC_AccessMode                                                 = FMC_AccessMode_A;        
       
        FMC_NORSRAMInitStructure.FMC_Bank                                                                         = FMC_Bank1_NORSRAM1;                                                                         /*        片选NE1        */
        FMC_NORSRAMInitStructure.FMC_DataAddressMux                                        = FMC_DataAddressMux_Disable;                                         /*        数据地址不复用        */
        FMC_NORSRAMInitStructure.FMC_MemoryType                                                 = FMC_MemoryType_SRAM;                                                                         /*        存储类型选择SRAM        */
        FMC_NORSRAMInitStructure.FMC_MemoryDataWidth                                 = FMC_NORSRAM_MemoryDataWidth_16b;                         /*        16位数据        */
        FMC_NORSRAMInitStructure.FMC_BurstAccessMode                                 = FMC_BurstAccessMode_Disable;                                         /*        禁止突发模式        */
        FMC_NORSRAMInitStructure.FMC_AsynchronousWait                         = FMC_AsynchronousWait_Disable;                                 /*        禁止异步模式        */
        FMC_NORSRAMInitStructure.FMC_WaitSignalPolarity                 = FMC_WaitSignalPolarity_Low;                                         /*        等待信号为低        */
        FMC_NORSRAMInitStructure.FMC_WrapMode                                                         = FMC_WrapMode_Disable;                                                                 /*        禁止突发存取模式        */
        FMC_NORSRAMInitStructure.FMC_WaitSignalActive                         = FMC_WaitSignalActive_BeforeWaitState;
        FMC_NORSRAMInitStructure.FMC_WriteOperation                                 = FMC_WriteOperation_Enable;
        FMC_NORSRAMInitStructure.FMC_WaitSignal                                                 = FMC_WaitSignal_Disable;
        FMC_NORSRAMInitStructure.FMC_ExtendedMode                                         = FMC_ExtendedMode_Disable;
        FMC_NORSRAMInitStructure.FMC_WriteBurst                                                 = FMC_WriteBurst_Disable;
        FMC_NORSRAMInitStructure.FMC_ReadWriteTimingStruct        = &FMC_SDRAMTimingInitStructure;
        FMC_NORSRAMInitStructure.FMC_WriteTimingStruct                         = &FMC_SDRAMTimingInitStructure;

        FMC_NORSRAMInit(&FMC_NORSRAMInitStructure);
        FMC_NORSRAMCmd(FMC_Bank1_NORSRAM1, ENABLE);        
}
回复

使用道具 举报

98

主题

360

回帖

654

积分

金牌会员

积分
654
 楼主| 发表于 2020-8-19 14:02:05 | 显示全部楼层
起因是AD转换速率提高了,而读AD数据是在中断中读取的,测试发现速率一提高(30us一次中断),程序就会莫名重启。但屏蔽掉读AD的这段代码就没问题了,所以想着会不会是读AD的整体时间太长导致。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117538
QQ
发表于 2020-8-19 16:20:00 | 显示全部楼层
NE片选就是要跳变八次。

FMC中断效率低了,不是已经发布FMC DMA了么,学习下即可

https://forum.anfulai.cn/forum.php?mod=viewthread&tid=93255


QQ截图20200819162246.png

回复

使用道具 举报

98

主题

360

回帖

654

积分

金牌会员

积分
654
 楼主| 发表于 2020-8-19 16:33:21 | 显示全部楼层
eric2013 发表于 2020-8-19 16:20
NE片选就是要跳变八次。

FMC中断效率低了,不是已经发布FMC DMA了么,学习下即可

刚看完35章节和36章节,很不幸的是我们硬件也踩了这个DMA1的坑。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-13 13:46 , Processed in 0.042327 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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