你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

应用

[复制链接]
ulovefw 提问时间:2021-9-2 08:10 /
用的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,好像后移了一个数据时钟,目前找不到是啥原因出现的这个问题?
收藏 评论1 发布时间:2021-9-2 08:10

举报

1个回答
ulovefw 回答时间:2021-9-4 16:27:35
为什么没人回答?

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版