打印
[总线接口]

stm32h743 fmc fpga通信过程遇到的读些匹配问题

[复制链接]
4303|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
用的arm芯片是stm32h743,arm侧驱动程序如下:void MX_FMC_Init(void){           
    GPIO_InitTypeDef GPIO_Initure;
         FMC_NORSRAM_TimingTypeDef FSMC_ReadWriteTim;
    FMC_NORSRAM_TimingTypeDef FSMC_WriteTim;

    FMC_MPU_Config(); //使能MPU保护FPGA区域
       
    SRAM_Handler.Instance=FMC_NORSRAM_DEVICE; //BANK1
    SRAM_Handler.Extended=FMC_NORSRAM_EXTENDED_DEVICE;      

         SRAM_Handler.Init.NSBank=FMC_NORSRAM_BANK1;     //使用NE1
    SRAM_Handler.Init.DataAddressMux=FMC_DATA_ADDRESS_MUX_DISABLE;  //不复用数据线
    SRAM_Handler.Init.MemoryType=FMC_MEMORY_TYPE_SRAM;              //SRAM
    SRAM_Handler.Init.MemoryDataWidth=FMC_NORSRAM_MEM_BUS_WIDTH_8;  //8位数据宽度
    SRAM_Handler.Init.BurstAccessMode=FMC_BURST_ACCESS_MODE_DISABLE; //是否使能突发访问,仅对同步突发存储器有效,此处未用到
    SRAM_Handler.Init.WaitSignalPolarity=FMC_WAIT_SIGNAL_POLARITY_LOW;//等待信号的极性,仅在突发模式访问下有用
    SRAM_Handler.Init.WaitSignalActive=FMC_WAIT_TIMING_BEFORE_WS;   //存储器是在等待周期之前的一个时钟周期还是等待周期期间使能NWAIT
    SRAM_Handler.Init.WriteOperation=FMC_WRITE_OPERATION_ENABLE;    //存储器写使能
    SRAM_Handler.Init.WaitSignal=FMC_WAIT_SIGNAL_DISABLE;           //等待使能位,此处未用到
    SRAM_Handler.Init.ExtendedMode=FMC_EXTENDED_MODE_ENABLE;        //读写使用不同的时序
    SRAM_Handler.Init.AsynchronousWait=FMC_ASYNCHRONOUS_WAIT_DISABLE;//是否使能同步传输模式下的等待信号,此处未用到
    SRAM_Handler.Init.WriteBurst=FMC_WRITE_BURST_DISABLE;           //禁止突发写
    SRAM_Handler.Init.ContinuousClock=FMC_CONTINUOUS_CLOCK_SYNC_ASYNC;
         SRAM_Handler.Init.WriteFifo=FMC_WRITE_FIFO_ENABLE;         
    SRAM_Handler.Init.PageSize=FMC_PAGE_SIZE_NONE;

    /*FMC使用的HCLK3,主频200MHz,1个FMC时钟周期就是5ns*/   
    //FSMC读时序控制寄存器
    FSMC_ReadWriteTim.AddressSetupTime=0x08;    //地址建立时间(ADDSET 0~15)为15个HCLK 5ns*15=85ns
    FSMC_ReadWriteTim.AddressHoldTime=0x02;     //地址保持时间(ADDHOLD 1~15)为15个HCLK 5ns*5=25ns
    FSMC_ReadWriteTim.DataSetupTime=0x15;       //数据建立时间(DATASET 1~256)为85个HCLK 5ns*85=425ns
    FSMC_ReadWriteTim.AccessMode=FMC_ACCESS_MODE_A; //模式A
               
    //FSMC写时序控制寄存器
    FSMC_WriteTim.AddressSetupTime=0x08;        //地址建立时间(ADDSET 0~15)为15个HCLK 5x15=85ns
    FSMC_WriteTim.AddressHoldTime=0x02;         //地址保持时间(ADDHOLD 1~15)为15个HCLK 5ns*5=25ns
    FSMC_WriteTim.DataSetupTime=0x15;           //数据保存时间(DATASET 1~256)为21个HCLK 5*21=105ns
    FSMC_WriteTim.AccessMode=FMC_ACCESS_MODE_A; //模式A
               
    HAL_SRAM_Init(&SRAM_Handler,&FSMC_ReadWriteTim,&FSMC_WriteTim);       
         
    delay_ms(50); // delay 50 ms
}

fpga使用的是altera的EP4CGX50F484。
arm中测试程序如下:
static void Fill_Buffer(u8 *pBuffer, u32 uwBufferLength, u16 uwOffset)
{
  u16 tmpIndex = 0;

  /* Put in global buffer different values */
  for (tmpIndex = 0; tmpIndex < uwBufferLength; tmpIndex++)
  {
    pBuffer[tmpIndex] = tmpIndex + uwOffset;
  }
}

__IO uint32_t FMC_SRAM_Test(void)
{
        uint32_t uwIndex = 0;
        __IO uint32_t uwWriteReadStatus = 0;
       
        u8 aTxBuffer[BUFFER_SIZE];
        u8 aRxBuffer[BUFFER_SIZE];
       
//        vu8 i=0;
//        vu8 temp=0;
//        for(i=0;i<100;i++)
//        {
//                *(vu8*)(0x60000000+i)=temp;
//                temp++;
//        }
//       
//        vu8 temp1[32];
//        for(i=0;i<32;i++)
//        {
//                temp1 = *(vu8*)(0x60000000+i);
//        }
         
        Fill_Buffer(aTxBuffer, BUFFER_SIZE, 0x0000);
       
        /* Write data to the SRAM memory */
  for(uwIndex = 0; uwIndex < BUFFER_SIZE; uwIndex++)
  {
    *(__IO uint8_t *)(SRAM_BANK_ADDR + WRITE_READ_ADDR + 1 * uwIndex) = aTxBuffer[uwIndex];
  }
       
        /* Read back data from the SRAM memory */
  for(uwIndex = 0; uwIndex < BUFFER_SIZE; uwIndex++)
  {
    aRxBuffer[uwIndex] = *(__IO uint8_t *)(SRAM_BANK_ADDR + WRITE_READ_ADDR + 1 * uwIndex);
  }
       
        /*##-3- Checking data integrity ############################################*/
  //uwWriteReadStatus = Buffercmp(aTxBuffer, aRxBuffer, BUFFER_SIZE);
        return uwWriteReadStatus;
},其中BUFFER_SIZE为0x18,写地址从60000000开始,读地址从60000800开始,
在signaltap中抓取读写波形:


问题是,写的时候第0x17个数据跑到了读地址60000800,好像后移了一个数据时钟,目前找不到是啥原因出现的这个问题?

使用特权

评论回复

相关帖子

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

本版积分规则

6

主题

69

帖子

1

粉丝