新手上路
- 积分
- 24
- 金钱
- 24
- 注册时间
- 2022-10-13
- 在线时间
- 2 小时
|

楼主 |
发表于 2025-2-13 15:19:04
|
显示全部楼层
你好,能不能把FMC的这部分配置操作发给我参考一下,我现在选择的是PD7作为FMC_NE1的片选,但是一直无法成功读写FPGA。
/* 使能 FMC 时钟 */
RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FMC, ENABLE);
GPIO初始化如下对应的FMC复用功能
/*-- SRAM GPIOs Configuration --------------------------------------------------*/
/*
+-------------------+------------------+-------------------+
| PD14 <-> FMC_D0 | PF0 <-> FMC_A0 | PE0 <-> FMC_NBL0 |
| PD15 <-> FMC_D1 | PF1 <-> FMC_A1 | PE1 <-> FMC_NBL1 |
| PD0 <-> FMC_D2 | PF2 <-> FMC_A2 | PD4 <-> FMC_NOE |
| PD1 <-> FMC_D3 | PF3 <-> FMC_A3 | PD5 <-> FMC_NWE |
| PE7 <-> FMC_D4 | PF4 <-> FMC_A4 | PD7 <-> FMC_NE1 |
| PE8 <-> FMC_D5 | PF5 <-> FMC_A5 |-------------------+
| PE9 <-> FMC_D6 | PF12 <-> FMC_A6 |
| PE10 <-> FMC_D7 | PF13 <-> FMC_A7 |
| PE11 <-> FMC_D8 | PF14 <-> FMC_A8 |
| PE12 <-> FMC_D9 | PF15 <-> FMC_A9 |
| PE13 <-> FMC_D10 | PG0 <-> FMC_A10 |
| PE14 <-> FMC_D11 | PG1 <-> FMC_A11 |
| PE15 <-> FMC_D12 | PG2 <-> FMC_A12 |
| PD8 <-> FMC_D13 | PG3 <-> FMC_A13 |
| PD9 <-> FMC_D14 |
| PD10 <-> FMC_D15 |
FMC结构体初始化
void FMC_FPGA_Config(void)
{
FMC_NORSRAMInitTypeDef FMC_NORSRAMInitStructure;
FMC_NORSRAMTimingInitTypeDef p;
p.FMC_AddressSetupTime = 2;
p.FMC_AddressHoldTime = 1;
p.FMC_DataSetupTime = 5;
p.FMC_BusTurnAroundDuration = 1;
p.FMC_CLKDivision = 2;
p.FMC_DataLatency = 2;
p.FMC_AccessMode = FMC_AccessMode_A;
FMC_NORSRAMInitStructure.FMC_Bank = FMC_Bank1_NORSRAM1; FMC_NORSRAMInitStructure.FMC_DataAddressMux = FMC_DataAddressMux_Disable;
FMC_NORSRAMInitStructure.FMC_MemoryType = FMC_MemoryType_SRAM;//FSMC_MemoryType_NOR;
FMC_NORSRAMInitStructure.FMC_MemoryDataWidth = FMC_NORSRAM_MemoryDataWidth_8b;
FMC_NORSRAMInitStructure.FMC_BurstAccessMode = FMC_BurstAccessMode_Disable;
FMC_NORSRAMInitStructure.FMC_WaitSignalPolarity = FMC_WaitSignalPolarity_Low;
FMC_NORSRAMInitStructure.FMC_AsynchronousWait=FMC_AsynchronousWait_Disable;
FMC_NORSRAMInitStructure.FMC_WrapMode = FMC_WrapMode_Disable;
FMC_NORSRAMInitStructure.FMC_WaitSignalActive = FMC_WaitSignalActive_BeforeWaitState;
FMC_NORSRAMInitStructure.FMC_WriteOperation = FMC_WriteOperation_Enable;
FMC_NORSRAMInitStructure.FMC_WaitSignal = FMC_WaitSignal_Disable;
FMC_NORSRAMInitStructure.FMC_ExtendedMode = FMC_ExtendedMode_Disable;
FMC_NORSRAMInitStructure.FMC_WriteBurst = FMC_WriteBurst_Disable;
FMC_NORSRAMInitStructure.FMC_ReadWriteTimingStruct = &p;
FMC_NORSRAMInitStructure.FMC_WriteTimingStruct = &p;
FMC_NORSRAMInit(&FMC_NORSRAMInitStructure);
/* Enable FSMC Bank1_SRAM Bank */
FMC_NORSRAMCmd(FMC_Bank1_NORSRAM1, ENABLE);
}
FPGA的地址定义为
#define FPGA_BANK_ADDR_CMD ((uint32_t)0x63FFDFFF)
#define FPGA_BANK_ADDR_DAT ((uint32_t)0x63FFCFFF)
然后就是写FPGA
void FPGA_WR_CMD(u8 index,u8 val)
{
*(__IO uint8_t *) (FPGA_BANK_ADDR_CMD) = index;
*(__IO uint8_t *) (FPGA_BANK_ADDR_DAT) = val;
}
在main()中,直接对FPGA操作,比如:FPGA_WR_CMD(0x04,0xFD);
这样配置操作有什么问题吗?望不吝赐教!感谢! |
|