int FpgaFmcInit(void)
{
SRAM_HandleTypeDef FPGA_SRAM_Handler;
FMC_NORSRAM_TimingTypeDef FPGA_FMC_ReadWriteTim;
FPGA_SRAM_Handler.Instance=FMC_NORSRAM_DEVICE; //BANK1
FPGA_SRAM_Handler.Extended=FMC_NORSRAM_EXTENDED_DEVICE; //选择 BWTR 未用到
FPGA_SRAM_Handler.Init.NSBank=FMC_NORSRAM_BANK1; //使用NE1--PD7
FPGA_SRAM_Handler.Init.DataAddressMux=FMC_DATA_ADDRESS_MUX_ENABLE; ////////复用数据线 复用的话 仅在 NOR和 PSRAM存储器有效
FPGA_SRAM_Handler.Init.MemoryType=FMC_MEMORY_TYPE_NOR; ///////////不能为SRAM 否则 地址总线不能复用
FPGA_SRAM_Handler.Init.MemoryDataWidth=FMC_NORSRAM_MEM_BUS_WIDTH_16; //16位数据宽度
FPGA_SRAM_Handler.Init.WriteOperation=FMC_WRITE_OPERATION_ENABLE; //存储器写使能 //初始化为1
FPGA_SRAM_Handler.Init.WaitSignal=FMC_WAIT_SIGNAL_ENABLE; //等待使能位 //初始化为1
// FPGA_SRAM_Handler.Init.WriteFifo = FMC_WRITE_FIFO_DISABLE; //FIFO禁止
FPGA_SRAM_Handler.Init.ExtendedMode=FMC_EXTENDED_MODE_DISABLE; //读写使用相同的时序
FPGA_SRAM_Handler.Init.WriteBurst=FMC_WRITE_BURST_DISABLE; //禁止突发写
FPGA_SRAM_Handler.Init.PageSize = FMC_PAGE_SIZE_NONE; //现需页大小,默认0
/***不是很重要的数据****/
FPGA_SRAM_Handler.Init.BurstAccessMode=FMC_BURST_ACCESS_MODE_DISABLE; //是否使能突发访问,仅对同步突发存储器有效,此处未用 默认 禁止
FPGA_SRAM_Handler.Init.WaitSignalPolarity=FMC_WAIT_SIGNAL_POLARITY_LOW;//等待信号的极性,仅在突发模式访问下有用
FPGA_SRAM_Handler.Init.WaitSignalActive=FMC_WAIT_TIMING_BEFORE_WS; //存储器是在等待周期之前的一个时钟周期还是等待周期期间使能NWAIT
FPGA_SRAM_Handler.Init.AsynchronousWait=FMC_ASYNCHRONOUS_WAIT_DISABLE;//是否使能异步传输期间的等待信号(默认值)
FPGA_SRAM_Handler.Init.ContinuousClock=FMC_CONTINUOUS_CLOCK_SYNC_ONLY; //连续时钟使能关闭
/*******/
//FSMC读时序控制寄存器
FPGA_FMC_ReadWriteTim.DataSetupTime=24; //数据保存时间(DATAST)为85个HCLK =4.6*85=391ns
FPGA_FMC_ReadWriteTim.AddressHoldTime=9;
FPGA_FMC_ReadWriteTim.AddressSetupTime=6; //地址建立时间(ADDSET)为17个HCLK 1/216M=4.6ns*17=78ns
FPGA_FMC_ReadWriteTim.AccessMode=FMC_ACCESS_MODE_A; //模式A
/******************FMC写时序控制寄存器, 读写使用不同时序时才有效,此时无效*************/
HAL_SRAM_Init(&FPGA_SRAM_Handler,&FPGA_FMC_ReadWriteTim,&FPGA_FMC_ReadWriteTim);
delay_ms(50); // delay 50 ms
return 0;
}
//FMC的SRAM底层驱动,时钟使能,引脚分配
//此函数会被HAL_SRAM_Init()调用
//hsram:SRAM句柄
void HAL_SRAM_MspInit(SRAM_HandleTypeDef *hsram)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_FMC_CLK_ENABLE(); //使能FMC时钟
/**********************fpga的sram****************************/
__HAL_RCC_GPIOB_CLK_ENABLE(); //使能GPIOB时钟
__HAL_RCC_GPIOD_CLK_ENABLE(); //使能GPIOD时钟
__HAL_RCC_GPIOE_CLK_ENABLE(); //使能GPIOE时钟
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
GPIO_Initure.Alternate=GPIO_AF12_FMC; //复用为FMC
//初始化PB7
GPIO_Initure.Pin=GPIO_PIN_7;
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
//初始化PD0,1,3,4,5,6,7,8,9,10,11,12,13,14,15
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|
GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
HAL_GPIO_Init(GPIOD,&GPIO_Initure);
//初始化PE0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|
GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
HAL_GPIO_Init(GPIOE,&GPIO_Initure);
}
WR的波形怎样调整参数,才能让它向右移动
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
下图中每个单位刻度为10ns,可能是因为哪些配置不对CS片选信号出现了短暂的高电平,导致数据操作错误
参数为20,15,15时候的波形如下
FPGA_FMC_ReadWriteTim.DataSetupTime=20;
FPGA_FMC_ReadWriteTim.AddressHoldTime=15;
FPGA_FMC_ReadWriteTim.AddressSetupTime=15;
FPGA_FMC_ReadWriteTim.AccessMode=FMC_ACCESS_MODE_A;
参数为24,9,6时候的波形如下
FPGA_FMC_ReadWriteTim.DataSetupTime=24;
FPGA_FMC_ReadWriteTim.AddressHoldTime=9;
FPGA_FMC_ReadWriteTim.AddressSetupTime=6;
FPGA_FMC_ReadWriteTim.AccessMode=FMC_ACCESS_MODE_A;
参数为24,9,15时候的波形如下
FPGA_FMC_ReadWriteTim.DataSetupTime=24;
FPGA_FMC_ReadWriteTim.AddressHoldTime=9;
FPGA_FMC_ReadWriteTim.AddressSetupTime=15;
FPGA_FMC_ReadWriteTim.AccessMode=FMC_ACCESS_MODE_A;
一周热门 更多>