用的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,好像后移了一个数据时钟,目前找不到是啥原因出现的这个问题? |
为什么没人回答? |
STM32G431CBU6如何设置IO口的方向?
STM32H743VIH6 usart dma闲时中断无法获取数据
超时进入错误处理函数
STM32F4 LWIP 无操作系统 数据收发问题
有STM32G4的LL FLASH库么?
stm32h7 usb HS 中断传输模式,可以达到 24MB/s 吗?
STM32H7 IIC timing计算
ptp
请问下STM32CubeMX上建立USB HOST 库的时候,为什么会有这个警告呢?这是什么意思?