如何通过FSMC实现STM32与FPGA的同时相互读写数据? 50C

如何通过FSMC实现STM32与FPGA的同时相互读写数据?

1.问题背景:
本人设计的数据采集模块:STM32F407为主控芯片进行数据分析和处理,FPGA(EP2C8)负责外接ADC的控制和数据缓存。
STM32与FPGA之间设计的使用FSMC通信,本人已经实现单方面的数据传输:即FPGA将ADC采集的数据通过16位的数据总线传输给STM32里面。
但是,当我想在STM32接收数据的同时,向FPGA发送两次数据 以改变FPGA控制ADC的采样频率。这时候,出现问题。

2.出现的问题:
FPGA的SignalTap显示,数据总线没有出现我STM32发送的数据,反而是地址总线出现了数据,但地址总线从此开始自己加一地变化下去?

3.STM32的发送数据的程序代码

条件判断后,直接赋值给地址0x60000000。

if(freq == 3000)
         *(volatile int16_t *)0x60000000=0x0B;
if(freq == 800000000)
         *(volatile int16_t *)0x60000000=0x0C;

4.FPGA的接收数据的程序代码

其中** FSMC_XA **是FSMC的20位的地址总线。
_ FSMC_XD 是FSMC的16位的数据总线。_
AD_DIVCLK_REG1 和 AD_DIVCLK_REG2 是控制ADC采样的分频计数器_。
_

if (rising_edge(CLK)) then  

       if(AD_EN_WORK='0' and CS ='0' and WE = '0')then 

             case FSMC_XA(17 downto 11) is

                 when "1100000" =>AD_DIVCLK_REG1                                    <="0000000000110001";   

                 when "1100001" =>AD_SAMPLE_DEPTH_REG(11 downto 0)          <=FSMC_XD(11 downto 0);                                          

                 when "1100111" =>AD_DIVCLK_REG2                                    <="0000000000110001";   

                 when others     =>AD_DIVCLK_REG1<=AD_DIVCLK_REG1;

             end case; 

         end if;

            case FSMC_XD(15 downto 0) is

                 when "0000000000001011" =>AD_DIVCLK_REG1                                   <="0000000000000011";   

                 AD_DIVCLK_REG2                                 <="0000000000000011";       

                 when "0000000000001100" =>AD_DIVCLK_REG1                                   <="0000000000000001";   

                 AD_DIVCLK_REG2                                 <="0000000000000001";    

              when others    =>AD_DIVCLK_REG1<=AD_DIVCLK_REG1;

          end case;                       

    end if;    

5.SignalTap的监测图
图片说明

由SignalTap可以看出,
1. FSMC_XA作为地址总线,它出现了STM32的数据,但出现一次后就开始一直自加一了?我在STM32里面明明只赋值了两次?
2. FSMC_XD作为数据总线,一直是FPGA采集得到的ADC的数据,并成功发送给了STM32。但他为什么没有出现STM32里面,条件判断后所赋值的数:0x0B和0x0C呢?
3.FPGA里面的REG1明明初始值设了49(110001b),却显示为1,并且没变化。不应该先开始就是49,然后收到STM32的值后,就相对应地改变吗?
注:STM32程序的FSMC相关配置都配置好了,两个芯片的程序都没有报错,程序都正常下载到了芯片上。

                         希望大神能够抽时间解决一下,具体有细节问题还请随时问我。留言或者微信都行(微信:13438912526)。
0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
深入理解FPGA和STM32之间的FSMC通信
1、FSMC简介:FSMC即灵活的静态存储控制器,FSMC管理1GB空间,拥有4个Bank连接外部存储器,每个Bank有独立的片选信号和独立的时序配置;支持的存储器类型有SRAM、PSRAM、NOR/ONENAND、ROM、LCD接口(支持8080和6800模式)、NANDFlash和16位的PCCard。 2、在设计中将FPGA当做SRAM来驱动,使用库函数来实现FSMC的初始化配置代码如下:
STM32F427利用FSMC接口访问FPGA的SRAM(3)—— STM32F427访问FPGA的SRAM
参考STM32F407例程,外部SRAM章节。 关于时序的配置,主要是设置这7个参数,如果是SRAM,则只需关注前3个参数,和最后一个参数。 根据F427 datasheet也可以看出,前3个参数均设为0x01。  代码不一定对,先贴出来记录下 #include &quot;sram.h&quot; #define Bank1_SRAM3_ADDR ((u32)(0x68000000)) ...
stm32下通过fsmc驱动fpga通讯的例程
3位地址线,16位数据线,RD WR CS控制信号片选信号,控制fsmc与fpga通信。
深入理解FPGA核STM32之间的FSMC通信
该文档可以深入理解FPGA核STM32之间的FSMC并行通信方式。
STM32通过FSMC与FPGA通信
STM32通过FSMC与FPGA通信,即将FPGA作为STM32的外部RAM
STM32开发板FSMC读写FPGA程序
STM32开发板FSMC读写FPGA程序
STM32F427利用FSMC接口访问FPGA的SRAM(1)—— STM32F427启动文件
该启动文件做好后,才能进行下一步(STM32F427利用FSMC接口访问FPGA的SRAM),所以此文记录如何制作F427的启动文件。 1、参考F407探索者的资料:TFTLCD显示实验、外部SRAM实验。主要了解FSMC的原理。 2、参考STM32F427+FPGA板子的原理图,确定FSMC接口都有啥,包括:D0~D15数据线,A0~A18地址线,NL,CLK,NOE,NWE,NWAIT,N...
STM32关于FSMC读写TFTLCD SRAM使用详情
** STM32关于FSMC读写SRAM使用详情 ** FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和 16 位 PC 存储器卡连接,可以看做是连接芯片和外存(sram)的通信协议; 以下是我对FSMC的个人理解,内容来自官方datasheet,详情请看官方datasheet; STM32F4 的 FSMC 接口支持包括 SRAM、NAND FLASH、NOR FLASH 和 PSRA...
100脚的STM32F103VE单片机通过FSMC接口读写DS12C887时钟芯片中的寄存器
【接线】 DS12C887的VCC接+5V,GND接地。MOT悬空,AD0~1接PD14~15,AD2~3接PD0~1,AD4~7接PE7~10。RESET引脚接PA8(这个可以随便接,与FSMC无关),DS接PD4,R/W接PD5,CS接PD7(这是100脚的单片机上唯一的FSMC片选引脚)。 PB7(NADV)必须通过一个反相器后才能接到AS,并且不可以用地址线A8~A25代替(DS1
STM32-FPGA by FSMC
Arm Cortex M3 STM32系列CPU的FSMC接口和Altera FPGA进行数据通信。 包括STM32程序(Keil C)和FPGA VHDL源代码
STM32接口FSMC/FMC难点的理解
一,FSMC简           FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和 16 位 PC 存储器卡连接, STM32 的 FSMC 接口支持包括 SRAM、NAND FLASH、NOR FLASH 和 PSRAM 等存储器。 二,FSMC存储块 STM32F767的FMC将外部存储器划分为6个固定大小的256M的存储区域,如下图
FPGA与STM32串口通信
FPGA中,添加一个TTL串口;与STM32串口通信引脚相连。波特率一致;   FPGA:   void uart_stm32_isr(void *context,alt_u32 id)//中断服务函数 {     //i1=0;   alt_u16 status9;   do   {     status9 =IORD_ALTERA_AVALON_UART_STATUS(UA
ARM和FPGA之间的通信(硬件原理图篇)
设计该开发板的初衷是为了学习,但也希望今后能扩展其功能,看到大家都在diy示波器,自己也非常冲动的想DIY一把,于是呼选了arm+fpga的方案,fpga主要用来实现数据的高速采样,而ARM则提供数据的显示,以及一些人机交互的功能。那么该方案中最重要的地方就是ARM和FPGA之间的通信如何实现了。在网上查了很多的资料,有说将FPGA作为ARM的一个外设,可以通过DMA的方式来直接访问;也有说把FP
双口RAM读写程序
本程序是基于STM32单片机的程序,双ARM单片机通过双口RAM进行数据交换的程序
STM32F427利用FSMC接口访问FPGA的SRAM(2)—— STM32F427工程添加固件库
将探索者F407开发板例程里的FWLIB文件夹打开,在stm32f4xx.h中看到了支持的STM32系列产品。。。因此判断应该可以通过宏定义来选择不同的STM32设备类型。 利用探索者F407开发板的例程,找到一处FMC / FSMC的定义: 发现这个宏定义实际上是在KEIL编译选项中写的:    将FWLIB中的C文件和H文件加入项目后,提示找不到FSMC_xxx,因为在上一个步...
ARM_FPGA_TESTok.rar
stm32采用的是STM32F407VGT6,FPGA采用的是Verilog语言,实现了STM32与FPGA的通信,采用的方式为FSMC,Quartus II下可抓取读写的数据。
读写FPGA定制的RAM中的数据
此程序时先在FPGA中定制一个RAM,然后单片机控制时序,先将数据写进去,然后读出来,验证数据是否是对的。
STM32F103ZE单片机FSMC接口读取NAND Flash芯片K9F1G08U0E的数据时出现数据丢失的解决办法
BUG:若Flash存储器中存储有连续的0xff字节,则在进行连续读(Page Read)操作时可能会丢失部分0xff。 例如,写入以下数据到某一页的开头(如地址0x00800000): {0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x21, 0
STM32中FSMC与硬件I2C冲突
ST官网勘误表中列到,FSMC与I2C不能同时开启。解决的办法可以有 1:将I2C映射到PB9,PB8. 2:使用模拟的I2C. I/O重映射步骤:(以串口为例) 1.打开重映射时钟和USART重映射后的I/O口引脚时钟,  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  |RC C_APB2Periph_AFIO,ENABLE);
STM32F103ZET与AD7606模块数据采集例程-FSMC和SPI模式
STM32F103ZET与AD7606模块数据采集例程-FSMC和SPI模式两种连接方式
FSMC(STM32+NANDFLASH)
OPEN103V STM32+NANDFLASH通信
DM9000A通过FSMC总线通信时,如何确定地址端口和数据端口
引言  灵活的静态存储器控制器(FSMC),能够与同步或异步存储器和16位PC存储器卡接口,将连接该总线的所有外设都看成这四种器件:   - 静态随机存储器(SRAM)   - 只读存储器(ROM)   - NOR闪存   - PSRAM(4个存储器块) 简单的说,就是当配置好FSMC总线后(包括WR、RD、DB0-DB15这些控制线和数据线),FSMC就会自动帮我们做处理,而不需要我们
stm32 使用FSMC连接bank1的第三个存储区程序参考及说明
FSMC stm32
STM32 FSMC总线与TFT8080接口对接分析
STM32 FSMC总线深入研究 由于CPU与FPGA通信的需要,以及对8080总线的熟悉,首选采用了STM32的FSMC总线,作为片间通信接口。FSMC能达到16MHz的写入速度,理论上能写20fps的1024*768的图片哈哈。(当然实际上是不可能的,就算是DMA传输,数据源也跟不上,实际上刷模拟的图片每秒10fps,刷的很high)当然这不是本篇的要点,这里主要研究STM32的FSMC
基于FPGA的双口RAM读写操作
基于FPGA的双口RAM读写操作(连续读写)    最近在使用双口RAM作为数据流的缓存,拟采用连续写入,然后连续读出的方式,即每个数据占用1个clock时钟周期。写入操作:wren,wraddr, datain可同时有效并赋值;读出操作:1. 当rden使能有效后一个周期,数据才输出(注意点);                 2. 读操作地址在rden使能有效后,需要不断自加递增;    读操...
STM32 FSMC 驱动80总线液晶屏的方法的解释
这里先看TFT液晶屏所谓的80时序图: 当我们对比之后发现STM32的FSMC的SRAM时序和80总线很相近,也可以套用: 在这里只要把地址线当成RS就可以相当于80时序了,具体实现方法是这样的: 把A0连接到RS,那么当我对0地址进行读写方式的时候A0将会输出0,这也就相当于命令的读写,当我地1地址进行读写的时候,那就相当于对数据的读写,这样就巧妙的避开了地址的问题,因为液晶是地址
关于FSMC的一些理解1
FSMS:可以理解为外部存储器的控制器。 地址线理解: HADDR:内部地址线,一共28跟,最高两位(26,27)不需要干预,故为0~25。 FSMC_A[25~0]:芯片引出的地址引脚,该引脚用于连接外部存储器之类的。 HADDR和FSMC_A关系: 八位模式下: 一一对应,即FSMC_A0跟HADDR[0]连接,其余也一样。 16位模式下: HADDR[0]悬空(这个悬空是通过...
STM32实现FSMC驱动TFTLCD液晶显示屏
1、TFTLCD接口及驱动流程 TFTLCD液晶显示屏的接口说明,这里是16位80并口接线方式,关于这种方式的简介可以参考百度文库 80并口协议 LCD引脚包括: CS:片选信号 WR:写信号 RD:读信号 DB[1-17]:16位双向数据线 RST:复位信号 RS:命令0/数据标志1 CTR:背光控制信号 还有当其作为输入设备时一系列接口信号 80并口读写的时序图如下: 读时序: (1)根据读...
SPI,SPI_DMA,FSMC配置流程
SPI配置流程: GPIO时钟使能 SPI时钟使能 对应GPIO复用推挽上拉 设置SPI双向数据模式 设置SPI工作模式 设置SPI的数据大小 设置串行同步时钟的空闲状态为高电平或低电平 时钟跳变沿数据采样 设置片选信号 定义波特率预分频值 SPI通信,DMA模式,在SPI通信中,可以同时开启发送和接收DMA请求,自动完成数据的发送和接受,完成数据的交换,配置流程: 配置好S...
iCore 开发板 STM32 FSMC 方式访问 FPGA
iCore 开发板 STM32 FSMC 方式访问 FPGA
STM32与FPGA进行16位SPI通信
STM32与FPGA通讯,使用的是16位SPI协议。STM32F103ZET6 Verilog
【FPGA】双端口RAM的设计(同步读写)
之前的博文都是讲单端口RAM的,它们仅有一套控制输入,例如cs,we,oe,还有数据总线以及地址。 【FPGA】单端口RAM的设计(同步读、同步写) 附上太多链接,我也累,自己找吧。 双端口RAM,顾名思义,有两套地址,数据总线,以及cs等。 从输入输出也可以看出来: input clk , // Clock Input input [ADDR_WIDTH - 1 : 0]...
基于FPGA的SD卡读写
FPGA SD卡读写 FPGA SD Card Reader
基于FPGA的PCIE总线实现PC与SDRAM的数据读写过程
关于实验室的一个工程项目,该工程主要包括GUI、COM组件、驱动和FPGA,我主要负责软件部分,现在记录下基本的修改编辑过程: 1、修改COM组件 (1)修改IS3_1000.cpp添加方法,找到相似的方法进行修改, (2)修改ioctrol.h    主要包括读写命令地址(#define)和 CLT_CODE也需设置一下  2、修改WDM驱动文件(利用WDK编译,cd:f  f  bui
自已写的FPGA使用SPI模式读写FLASH
自已写的FPGA使用SPI模式读写FLASH ,Flash型号W25Q128BV。
STM32FSMC接口详解
详解地解释了STM32的FSMC接口操作与原理,以及如何使用lcd
FPGA读写 IS61LV25616AL的verilog程序
使用verilog编写的IS61LV25616AL的SRAM读写程序,程序在XSC3S400开发板上测试过,可以完成读写工作,另外附带IS61LV25616AL的数据手册
FPGA学习之路——FIFO读写
在300000多ps时,PLL模块初始化完成,可以看到clk_20m,clk_100m,clk_sdram的波形了。 新建IP核FIFO clk_20m        (rdclk) 读FIFO时钟 sdram_wr_ack   (rdreq) FIFO读请求信号 ...
FPGA作为从机与STM32用SPI的方式进行通信,结果显示在OLED上
本人首先用两片STM32F1以软件的方式进行SPI通信,一主一从以便了解SPI协议,通信测试成功(实际中一般用硬件spi)。然后用STM32F1主机与FPGA进行通信,根据从机STM32F1从机的接收代码改为Verilog,并且将SPI接收到的数据显示在0.96寸OLED(FPGA驱动OLED也是SPI方式,只是FPGA作为主机了)上。
W5300网口芯片的FPGA控制协议流程
一、 系统硬件构成与设计 1.1 W5300芯片介绍 W5300是一款0.18um CMOS工艺的单芯片器件,内部集成10/100M以太网控制器,MAC和TCP协议栈。W5300主要应用于高性能嵌入式领域,如多媒体数据流服务。通过一个集成有TCP/IP协议的10/100M的以太网MAC和PHY的单芯片可以非常简单快捷的实现Internet连接。W5300的数据通信存储器扩展到12