这是本文档旧的修订版!
银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
技术论坛 | http://www.eeschool.org | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-07-10 | gingko | 初次建立 |
int main(void) { int i; /* MCU 配置 */ /* 重置所有外设,初始化Flash接口和 Systick. */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化所有已配置的外设 */ MX_GPIO_Init(); MX_FMC_Init(); //向FPGA RAM中写入数据 for(i = 0;i < 512;i ++){ fpga_write(i, 2 * i); } //从FPGA RAM中读取数据 for(i = 0;i < 512;i ++){ if(fpga_read(i) != 2*i){ while(1){ LED_RED_ON; HAL_Delay(500); LED_RED_OFF; HAL_Delay(500); } } } //测试成功 LED_GREEN_ON; while (1) { //通过映射寄存器来控制FPGA三色LED循环点亮 FPGA_LED_RED_ON; FPGA_LED_GREEN_OFF; FPGA_LED_BLUE_OFF; HAL_Delay(500); FPGA_LED_RED_OFF; FPGA_LED_GREEN_ON; FPGA_LED_BLUE_OFF; HAL_Delay(500); FPGA_LED_RED_OFF; FPGA_LED_GREEN_OFF; FPGA_LED_BLUE_ON; HAL_Delay(500); } }
void MX_FMC_Init(void) { FMC_NORSRAM_TimingTypeDef Timing; /** 执行NOR1存储器初始化序列*/ hnor1.Instance = FMC_NORSRAM_DEVICE; hnor1.Extended = FMC_NORSRAM_EXTENDED_DEVICE; /* hnor1.Init */ hnor1.Init.NSBank = FMC_NORSRAM_BANK1; //指定将使用的NORSRAM存储设备。 hnor1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_ENABLE; //指定地址和数据值在数据总线上多路复用 hnor1.Init.MemoryType = FMC_MEMORY_TYPE_NOR; //外部存储器的类型。 hnor1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16; //外部存储设备的宽度 hnor1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE; //禁用闪存的突发访问模式 hnor1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW; //等待信号极性 hnor1.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS; //FMC等待时间 hnor1.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;// FMC写操作使能 hnor1.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;// 禁用FMC等待信号 hnor1.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;// 禁用FMC扩展模式 hnor1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE; // 禁止FMC异步等待 hnor1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;// FMC禁止写突发 hnor1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ASYNC; // FMC连续时钟 hnor1.Init.WriteFifo = FMC_WRITE_FIFO_ENABLE; //FMC写FIFO hnor1.Init.PageSize = FMC_PAGE_SIZE_NONE; //FMC页大小 /* Timing */ Timing.AddressSetupTime = 7; Timing.AddressHoldTime = 1; Timing.DataSetupTime = 6; Timing.BusTurnAroundDuration = 0; Timing.CLKDivision = 0; Timing.DataLatency = 0; Timing.AccessMode = FMC_ACCESS_MODE_A; /* ExtTiming */ if (HAL_NOR_Init(&hnor1, &Timing, NULL) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } }
#define fpga_write(offset,data) *((volatile unsigned short int *)(0x60000000 + (offset << 1))) = data #define fpga_read(offset) *((volatile unsigned short int *)(0x60000000 + (offset << 1))) //FPGA三色LED控制寄存器地址 #define FPGA_LED_RED 10 #define FPGA_LED_GREEN 11 #define FPGA_LED_BLUE 12 //控制寄存器值 #define ON 0 //点亮相应LED #define OFF 1 //关闭相应LED //ARM控制LED命令 #define FPGA_LED_RED_ON fpga_write(FPGA_LED_RED,ON) #define FPGA_LED_RED_OFF fpga_write(FPGA_LED_RED,OFF) #define FPGA_LED_GREEN_ON fpga_write(FPGA_LED_GREEN,ON) #define FPGA_LED_GREEN_OFF fpga_write(FPGA_LED_GREEN,OFF) #define FPGA_LED_BLUE_ON fpga_write(FPGA_LED_BLUE,ON) #define FPGA_LED_BLUE_OFF fpga_write(FPGA_LED_BLUE,OFF)