321 lines
10 KiB
C
321 lines
10 KiB
C
#ifndef __SDRAM_H
|
|
#define __SDRAM_H
|
|
|
|
#include "stm32h7xx.h"
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
#define SDRAM_SIZE 0x4000000 //64M字节,两片W9825G6KH-6,32MB@16bit组成64M@32bit
|
|
|
|
/*SDRAM 的bank选择*/
|
|
#define FMC_BANK_SDRAM FMC_Bank2_SDRAM
|
|
#define FMC_COMMAND_TARGET_BANK FMC_SDRAM_CMD_TARGET_BANK2
|
|
|
|
/**
|
|
* @brief FMC SDRAM 数据基地址
|
|
*/
|
|
#define SDRAM_BANK_ADDR ((uint32_t)0xD0000000)
|
|
|
|
/**
|
|
* @brief FMC SDRAM 数据宽度
|
|
*/
|
|
/* #define SDRAM_MEMORY_WIDTH FMC_SDRAM_MEM_BUS_WIDTH_8 */
|
|
/* #define SDRAM_MEMORY_WIDTH FMC_SDRAM_MEM_BUS_WIDTH_16 */
|
|
#define SDRAM_MEMORY_WIDTH FMC_SDRAM_MEM_BUS_WIDTH_32
|
|
|
|
/**
|
|
* @brief FMC SDRAM CAS Latency
|
|
*/
|
|
/* #define SDRAM_CAS_LATENCY FMC_CAS_Latency_2 */
|
|
#define SDRAM_CAS_LATENCY FMC_SDRAM_CAS_LATENCY_3
|
|
|
|
/**
|
|
* @brief FMC SDRAM SDCLK时钟分频因子
|
|
*/
|
|
#define SDCLOCK_PERIOD FMC_SDRAM_CLOCK_PERIOD_2
|
|
/* #define SDCLOCK_PERIOD FMC_SDClock_Period_3 */
|
|
|
|
/**
|
|
* @brief FMC SDRAM 突发读取特性
|
|
*/
|
|
/* #define SDRAM_READBURST FMC_SDRAM_RBURST_DISABLE*/
|
|
#define SDRAM_READBURST FMC_Read_Burst_Enable
|
|
|
|
|
|
#define SDRAM_TIMEOUT ((uint32_t)0xFFFF)
|
|
|
|
|
|
|
|
/**
|
|
* @brief FMC SDRAM 模式配置的寄存器相关定义
|
|
*/
|
|
#define SDRAM_MODEREG_BURST_LENGTH_1 ((uint16_t)0x0000)
|
|
#define SDRAM_MODEREG_BURST_LENGTH_2 ((uint16_t)0x0001)
|
|
#define SDRAM_MODEREG_BURST_LENGTH_4 ((uint16_t)0x0002)
|
|
#define SDRAM_MODEREG_BURST_LENGTH_8 ((uint16_t)0x0004)
|
|
#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL ((uint16_t)0x0000)
|
|
#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED ((uint16_t)0x0008)
|
|
#define SDRAM_MODEREG_CAS_LATENCY_2 ((uint16_t)0x0020)
|
|
#define SDRAM_MODEREG_CAS_LATENCY_3 ((uint16_t)0x0030)
|
|
#define SDRAM_MODEREG_OPERATING_MODE_STANDARD ((uint16_t)0x0000)
|
|
#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000)
|
|
#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE ((uint16_t)0x0200)
|
|
|
|
|
|
/*信息输出*/
|
|
#define SDRAM_DEBUG_ON 1
|
|
|
|
#define SDRAM_INFO(fmt,arg...) printf("<<-SDRAM-INFO->> "fmt"\n",##arg)
|
|
#define SDRAM_ERROR(fmt,arg...) printf("<<-SDRAM-ERROR->> "fmt"\n",##arg)
|
|
#define SDRAM_DEBUG(fmt,arg...) do{\
|
|
if(SDRAM_DEBUG_ON)\
|
|
printf("<<-SDRAM-DEBUG->> [%d]"fmt"\n",__LINE__, ##arg);\
|
|
}while(0)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
|
|
/*地址信号线*/
|
|
#define FMC_A0_GPIO_PORT GPIOF
|
|
#define FMC_A0_GPIO_CLK() __GPIOF_CLK_ENABLE()
|
|
#define FMC_A0_GPIO_PIN GPIO_PIN_0
|
|
|
|
#define FMC_A1_GPIO_PORT GPIOF
|
|
#define FMC_A1_GPIO_CLK() __GPIOF_CLK_ENABLE()
|
|
#define FMC_A1_GPIO_PIN GPIO_PIN_1
|
|
|
|
#define FMC_A2_GPIO_PORT GPIOF
|
|
#define FMC_A2_GPIO_CLK() __GPIOF_CLK_ENABLE()
|
|
#define FMC_A2_GPIO_PIN GPIO_PIN_2
|
|
|
|
#define FMC_A3_GPIO_PORT GPIOF
|
|
#define FMC_A3_GPIO_CLK() __GPIOF_CLK_ENABLE()
|
|
#define FMC_A3_GPIO_PIN GPIO_PIN_3
|
|
|
|
#define FMC_A4_GPIO_PORT GPIOF
|
|
#define FMC_A4_GPIO_CLK() __GPIOF_CLK_ENABLE()
|
|
#define FMC_A4_GPIO_PIN GPIO_PIN_4
|
|
|
|
#define FMC_A5_GPIO_PORT GPIOF
|
|
#define FMC_A5_GPIO_CLK() __GPIOF_CLK_ENABLE()
|
|
#define FMC_A5_GPIO_PIN GPIO_PIN_5
|
|
|
|
#define FMC_A6_GPIO_PORT GPIOF
|
|
#define FMC_A6_GPIO_CLK() __GPIOF_CLK_ENABLE()
|
|
#define FMC_A6_GPIO_PIN GPIO_PIN_12
|
|
|
|
#define FMC_A7_GPIO_PORT GPIOF
|
|
#define FMC_A7_GPIO_CLK() __GPIOF_CLK_ENABLE()
|
|
#define FMC_A7_GPIO_PIN GPIO_PIN_13
|
|
|
|
#define FMC_A8_GPIO_PORT GPIOF
|
|
#define FMC_A8_GPIO_CLK() __GPIOF_CLK_ENABLE()
|
|
#define FMC_A8_GPIO_PIN GPIO_PIN_14
|
|
|
|
#define FMC_A9_GPIO_PORT GPIOF
|
|
#define FMC_A9_GPIO_CLK() __GPIOF_CLK_ENABLE()
|
|
#define FMC_A9_GPIO_PIN GPIO_PIN_15
|
|
|
|
#define FMC_A10_GPIO_PORT GPIOG
|
|
#define FMC_A10_GPIO_CLK() __GPIOG_CLK_ENABLE()
|
|
#define FMC_A10_GPIO_PIN GPIO_PIN_0
|
|
|
|
#define FMC_A11_GPIO_PORT GPIOG
|
|
#define FMC_A11_GPIO_CLK() __GPIOG_CLK_ENABLE()
|
|
#define FMC_A11_GPIO_PIN GPIO_PIN_1
|
|
|
|
#define FMC_A12_GPIO_PORT GPIOG
|
|
#define FMC_A12_GPIO_CLK() __GPIOG_CLK_ENABLE()
|
|
#define FMC_A12_GPIO_PIN GPIO_PIN_2
|
|
/*数据信号线*/
|
|
#define FMC_D0_GPIO_PORT GPIOD
|
|
#define FMC_D0_GPIO_CLK() __GPIOD_CLK_ENABLE()
|
|
#define FMC_D0_GPIO_PIN GPIO_PIN_14
|
|
|
|
#define FMC_D1_GPIO_PORT GPIOD
|
|
#define FMC_D1_GPIO_CLK() __GPIOD_CLK_ENABLE()
|
|
#define FMC_D1_GPIO_PIN GPIO_PIN_15
|
|
|
|
#define FMC_D2_GPIO_PORT GPIOD
|
|
#define FMC_D2_GPIO_CLK() __GPIOD_CLK_ENABLE()
|
|
#define FMC_D2_GPIO_PIN GPIO_PIN_0
|
|
|
|
#define FMC_D3_GPIO_PORT GPIOD
|
|
#define FMC_D3_GPIO_CLK() __GPIOD_CLK_ENABLE()
|
|
#define FMC_D3_GPIO_PIN GPIO_PIN_1
|
|
|
|
#define FMC_D4_GPIO_PORT GPIOE
|
|
#define FMC_D4_GPIO_CLK() __GPIOE_CLK_ENABLE()
|
|
#define FMC_D4_GPIO_PIN GPIO_PIN_7
|
|
|
|
#define FMC_D5_GPIO_PORT GPIOE
|
|
#define FMC_D5_GPIO_CLK() __GPIOE_CLK_ENABLE()
|
|
#define FMC_D5_GPIO_PIN GPIO_PIN_8
|
|
|
|
#define FMC_D6_GPIO_PORT GPIOE
|
|
#define FMC_D6_GPIO_CLK() __GPIOE_CLK_ENABLE()
|
|
#define FMC_D6_GPIO_PIN GPIO_PIN_9
|
|
|
|
#define FMC_D7_GPIO_PORT GPIOE
|
|
#define FMC_D7_GPIO_CLK() __GPIOE_CLK_ENABLE()
|
|
#define FMC_D7_GPIO_PIN GPIO_PIN_10
|
|
|
|
#define FMC_D8_GPIO_PORT GPIOE
|
|
#define FMC_D8_GPIO_CLK() __GPIOE_CLK_ENABLE()
|
|
#define FMC_D8_GPIO_PIN GPIO_PIN_11
|
|
|
|
#define FMC_D9_GPIO_PORT GPIOE
|
|
#define FMC_D9_GPIO_CLK() __GPIOE_CLK_ENABLE()
|
|
#define FMC_D9_GPIO_PIN GPIO_PIN_12
|
|
|
|
#define FMC_D10_GPIO_PORT GPIOE
|
|
#define FMC_D10_GPIO_CLK() __GPIOE_CLK_ENABLE()
|
|
#define FMC_D10_GPIO_PIN GPIO_PIN_13
|
|
|
|
#define FMC_D11_GPIO_PORT GPIOE
|
|
#define FMC_D11_GPIO_CLK() __GPIOE_CLK_ENABLE()
|
|
#define FMC_D11_GPIO_PIN GPIO_PIN_14
|
|
|
|
#define FMC_D12_GPIO_PORT GPIOE
|
|
#define FMC_D12_GPIO_CLK() __GPIOE_CLK_ENABLE()
|
|
#define FMC_D12_GPIO_PIN GPIO_PIN_15
|
|
|
|
#define FMC_D13_GPIO_PORT GPIOD
|
|
#define FMC_D13_GPIO_CLK() __GPIOD_CLK_ENABLE()
|
|
#define FMC_D13_GPIO_PIN GPIO_PIN_8
|
|
|
|
#define FMC_D14_GPIO_PORT GPIOD
|
|
#define FMC_D14_GPIO_CLK() __GPIOD_CLK_ENABLE()
|
|
#define FMC_D14_GPIO_PIN GPIO_PIN_9
|
|
|
|
#define FMC_D15_GPIO_PORT GPIOD
|
|
#define FMC_D15_GPIO_CLK() __GPIOD_CLK_ENABLE()
|
|
#define FMC_D15_GPIO_PIN GPIO_PIN_10
|
|
|
|
#define FMC_D16_GPIO_PORT GPIOH
|
|
#define FMC_D16_GPIO_CLK() __GPIOH_CLK_ENABLE()
|
|
#define FMC_D16_GPIO_PIN GPIO_PIN_8
|
|
|
|
#define FMC_D17_GPIO_PORT GPIOH
|
|
#define FMC_D17_GPIO_CLK() __GPIOH_CLK_ENABLE()
|
|
#define FMC_D17_GPIO_PIN GPIO_PIN_9
|
|
|
|
#define FMC_D18_GPIO_PORT GPIOH
|
|
#define FMC_D18_GPIO_CLK() __GPIOH_CLK_ENABLE()
|
|
#define FMC_D18_GPIO_PIN GPIO_PIN_10
|
|
|
|
#define FMC_D19_GPIO_PORT GPIOH
|
|
#define FMC_D19_GPIO_CLK() __GPIOH_CLK_ENABLE()
|
|
#define FMC_D19_GPIO_PIN GPIO_PIN_11
|
|
|
|
#define FMC_D20_GPIO_PORT GPIOH
|
|
#define FMC_D20_GPIO_CLK() __GPIOH_CLK_ENABLE()
|
|
#define FMC_D20_GPIO_PIN GPIO_PIN_12
|
|
|
|
#define FMC_D21_GPIO_PORT GPIOH
|
|
#define FMC_D21_GPIO_CLK() __GPIOH_CLK_ENABLE()
|
|
#define FMC_D21_GPIO_PIN GPIO_PIN_13
|
|
|
|
#define FMC_D22_GPIO_PORT GPIOH
|
|
#define FMC_D22_GPIO_CLK() __GPIOH_CLK_ENABLE()
|
|
#define FMC_D22_GPIO_PIN GPIO_PIN_14
|
|
|
|
#define FMC_D23_GPIO_PORT GPIOH
|
|
#define FMC_D23_GPIO_CLK() __GPIOH_CLK_ENABLE()
|
|
#define FMC_D23_GPIO_PIN GPIO_PIN_15
|
|
|
|
#define FMC_D24_GPIO_PORT GPIOI
|
|
#define FMC_D24_GPIO_CLK() __GPIOI_CLK_ENABLE()
|
|
#define FMC_D24_GPIO_PIN GPIO_PIN_0
|
|
|
|
#define FMC_D25_GPIO_PORT GPIOI
|
|
#define FMC_D25_GPIO_CLK() __GPIOI_CLK_ENABLE()
|
|
#define FMC_D25_GPIO_PIN GPIO_PIN_1
|
|
|
|
#define FMC_D26_GPIO_PORT GPIOI
|
|
#define FMC_D26_GPIO_CLK() __GPIOI_CLK_ENABLE()
|
|
#define FMC_D26_GPIO_PIN GPIO_PIN_2
|
|
|
|
#define FMC_D27_GPIO_PORT GPIOI
|
|
#define FMC_D27_GPIO_CLK() __GPIOI_CLK_ENABLE()
|
|
#define FMC_D27_GPIO_PIN GPIO_PIN_3
|
|
|
|
#define FMC_D28_GPIO_PORT GPIOI
|
|
#define FMC_D28_GPIO_CLK() __GPIOI_CLK_ENABLE()
|
|
#define FMC_D28_GPIO_PIN GPIO_PIN_6
|
|
|
|
#define FMC_D29_GPIO_PORT GPIOI
|
|
#define FMC_D29_GPIO_CLK() __GPIOI_CLK_ENABLE()
|
|
#define FMC_D29_GPIO_PIN GPIO_PIN_7
|
|
|
|
#define FMC_D30_GPIO_PORT GPIOI
|
|
#define FMC_D30_GPIO_CLK() __GPIOI_CLK_ENABLE()
|
|
#define FMC_D30_GPIO_PIN GPIO_PIN_9
|
|
|
|
#define FMC_D31_GPIO_PORT GPIOI
|
|
#define FMC_D31_GPIO_CLK() __GPIOI_CLK_ENABLE()
|
|
#define FMC_D31_GPIO_PIN GPIO_PIN_10
|
|
|
|
/*控制信号线*/
|
|
#define FMC_CS_GPIO_PORT GPIOH
|
|
#define FMC_CS_GPIO_CLK() __GPIOH_CLK_ENABLE()
|
|
#define FMC_CS_GPIO_PIN GPIO_PIN_6
|
|
|
|
#define FMC_BA0_GPIO_PORT GPIOG
|
|
#define FMC_BA0_GPIO_CLK() __GPIOG_CLK_ENABLE()
|
|
#define FMC_BA0_GPIO_PIN GPIO_PIN_4
|
|
|
|
#define FMC_BA1_GPIO_PORT GPIOG
|
|
#define FMC_BA1_GPIO_CLK() __GPIOG_CLK_ENABLE()
|
|
#define FMC_BA1_GPIO_PIN GPIO_PIN_5
|
|
|
|
#define FMC_WE_GPIO_PORT GPIOC
|
|
#define FMC_WE_GPIO_CLK() __GPIOC_CLK_ENABLE()
|
|
#define FMC_WE_GPIO_PIN GPIO_PIN_0
|
|
|
|
#define FMC_RAS_GPIO_PORT GPIOF
|
|
#define FMC_RAS_GPIO_CLK() __GPIOF_CLK_ENABLE()
|
|
#define FMC_RAS_GPIO_PIN GPIO_PIN_11
|
|
|
|
#define FMC_CAS_GPIO_PORT GPIOG
|
|
#define FMC_CAS_GPIO_CLK() __GPIOG_CLK_ENABLE()
|
|
#define FMC_CAS_GPIO_PIN GPIO_PIN_15
|
|
|
|
#define FMC_CLK_GPIO_PORT GPIOG
|
|
#define FMC_CLK_GPIO_CLK() __GPIOG_CLK_ENABLE()
|
|
#define FMC_CLK_GPIO_PIN GPIO_PIN_8
|
|
|
|
#define FMC_CKE_GPIO_PORT GPIOH
|
|
#define FMC_CKE_GPIO_CLK() __GPIOH_CLK_ENABLE()
|
|
#define FMC_CKE_GPIO_PIN GPIO_PIN_7
|
|
|
|
/*UDQM LDQM*/
|
|
#define FMC_UDQM_GPIO_PORT GPIOE
|
|
#define FMC_UDQM_GPIO_CLK() __GPIOE_CLK_ENABLE()
|
|
#define FMC_UDQM_GPIO_PIN GPIO_PIN_1
|
|
|
|
#define FMC_LDQM_GPIO_PORT GPIOE
|
|
#define FMC_LDQM_GPIO_CLK() __GPIOE_CLK_ENABLE()
|
|
#define FMC_LDQM_GPIO_PIN GPIO_PIN_0
|
|
|
|
/*UDQM2 LDQM2*/
|
|
#define FMC_UDQM2_GPIO_PORT GPIOI
|
|
#define FMC_UDQM2_GPIO_CLK() __GPIOI_CLK_ENABLE()
|
|
#define FMC_UDQM2_GPIO_PIN GPIO_PIN_5
|
|
|
|
#define FMC_LDQM2_GPIO_PORT GPIOI
|
|
#define FMC_LDQM2_GPIO_CLK() __GPIOI_CLK_ENABLE()
|
|
#define FMC_LDQM2_GPIO_PIN GPIO_PIN_4
|
|
/** @defgroup STM32429 SDRAM函数
|
|
* @{
|
|
*/
|
|
void SDRAM_Init(void);
|
|
void SDRAM_WriteBuffer(uint32_t* pBuffer, uint32_t uwWriteAddress, uint32_t uwBufferSize);
|
|
void SDRAM_ReadBuffer(uint32_t* pBuffer, uint32_t uwReadAddress, uint32_t uwBufferSize);
|
|
uint8_t SDRAM_Test(void);
|
|
|
|
|
|
#endif /* __SDRAM_H */
|