Fix / optimize FSMC init (#18941)
This commit is contained in:
parent
5e08efb0fc
commit
cec035688d
@ -171,16 +171,17 @@ LCD_CONTROLLER_TypeDef *LCD;
|
|||||||
|
|
||||||
void LCD_IO_Init(uint8_t cs, uint8_t rs) {
|
void LCD_IO_Init(uint8_t cs, uint8_t rs) {
|
||||||
uint32_t controllerAddress;
|
uint32_t controllerAddress;
|
||||||
|
struct fsmc_nor_psram_reg_map* fsmcPsramRegion;
|
||||||
|
|
||||||
if (fsmcInit) return;
|
if (fsmcInit) return;
|
||||||
fsmcInit = 1;
|
fsmcInit = 1;
|
||||||
|
|
||||||
switch (cs) {
|
switch (cs) {
|
||||||
case FSMC_CS_NE1: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION1; break;
|
case FSMC_CS_NE1: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION1; fsmcPsramRegion = FSMC_NOR_PSRAM1_BASE; break;
|
||||||
#if ENABLED(STM32_XL_DENSITY)
|
#if ENABLED(STM32_XL_DENSITY)
|
||||||
case FSMC_CS_NE2: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION2; break;
|
case FSMC_CS_NE2: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION2; fsmcPsramRegion = FSMC_NOR_PSRAM2_BASE; break;
|
||||||
case FSMC_CS_NE3: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION3; break;
|
case FSMC_CS_NE3: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION3; fsmcPsramRegion = FSMC_NOR_PSRAM3_BASE; break;
|
||||||
case FSMC_CS_NE4: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION4; break;
|
case FSMC_CS_NE4: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION4; fsmcPsramRegion = FSMC_NOR_PSRAM4_BASE; break;
|
||||||
#endif
|
#endif
|
||||||
default: return;
|
default: return;
|
||||||
}
|
}
|
||||||
@ -246,13 +247,8 @@ void LCD_IO_Init(uint8_t cs, uint8_t rs) {
|
|||||||
gpio_set_mode(PIN_MAP[cs].gpio_device, PIN_MAP[cs].gpio_bit, GPIO_AF_OUTPUT_PP); //FSMC_CS_NEx
|
gpio_set_mode(PIN_MAP[cs].gpio_device, PIN_MAP[cs].gpio_bit, GPIO_AF_OUTPUT_PP); //FSMC_CS_NEx
|
||||||
gpio_set_mode(PIN_MAP[rs].gpio_device, PIN_MAP[rs].gpio_bit, GPIO_AF_OUTPUT_PP); //FSMC_RS_Ax
|
gpio_set_mode(PIN_MAP[rs].gpio_device, PIN_MAP[rs].gpio_bit, GPIO_AF_OUTPUT_PP); //FSMC_RS_Ax
|
||||||
|
|
||||||
#if ENABLED(STM32_XL_DENSITY)
|
fsmcPsramRegion->BCR = FSMC_BCR_WREN | FSMC_BCR_MTYP_SRAM | FSMC_BCR_MWID_16BITS | FSMC_BCR_MBKEN;
|
||||||
FSMC_NOR_PSRAM4_BASE->BCR = FSMC_BCR_WREN | FSMC_BCR_MTYP_SRAM | FSMC_BCR_MWID_16BITS | FSMC_BCR_MBKEN;
|
fsmcPsramRegion->BTR = (FSMC_DATA_SETUP_TIME << 8) | FSMC_ADDRESS_SETUP_TIME;
|
||||||
FSMC_NOR_PSRAM4_BASE->BTR = (FSMC_DATA_SETUP_TIME << 8) | FSMC_ADDRESS_SETUP_TIME;
|
|
||||||
#else // PSRAM1 for STM32F103V (high density)
|
|
||||||
FSMC_NOR_PSRAM1_BASE->BCR = FSMC_BCR_WREN | FSMC_BCR_MTYP_SRAM | FSMC_BCR_MWID_16BITS | FSMC_BCR_MBKEN;
|
|
||||||
FSMC_NOR_PSRAM1_BASE->BTR = (FSMC_DATA_SETUP_TIME << 8) | FSMC_ADDRESS_SETUP_TIME;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
afio_remap(AFIO_REMAP_FSMC_NADV);
|
afio_remap(AFIO_REMAP_FSMC_NADV);
|
||||||
|
|
||||||
|
@ -104,16 +104,17 @@
|
|||||||
|
|
||||||
void LCD_IO_Init(uint8_t cs, uint8_t rs) {
|
void LCD_IO_Init(uint8_t cs, uint8_t rs) {
|
||||||
uint32_t controllerAddress;
|
uint32_t controllerAddress;
|
||||||
|
struct fsmc_nor_psram_reg_map* fsmcPsramRegion;
|
||||||
|
|
||||||
if (fsmcInit) return;
|
if (fsmcInit) return;
|
||||||
fsmcInit = 1;
|
fsmcInit = 1;
|
||||||
|
|
||||||
switch (cs) {
|
switch (cs) {
|
||||||
case FSMC_CS_NE1: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION1; break;
|
case FSMC_CS_NE1: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION1; fsmcPsramRegion = FSMC_NOR_PSRAM1_BASE; break;
|
||||||
#if ENABLED(STM32_XL_DENSITY)
|
#if ENABLED(STM32_XL_DENSITY)
|
||||||
case FSMC_CS_NE2: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION2; break;
|
case FSMC_CS_NE2: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION2; fsmcPsramRegion = FSMC_NOR_PSRAM2_BASE; break;
|
||||||
case FSMC_CS_NE3: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION3; break;
|
case FSMC_CS_NE3: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION3; fsmcPsramRegion = FSMC_NOR_PSRAM3_BASE; break;
|
||||||
case FSMC_CS_NE4: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION4; break;
|
case FSMC_CS_NE4: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION4; fsmcPsramRegion = FSMC_NOR_PSRAM4_BASE; break;
|
||||||
#endif
|
#endif
|
||||||
default: return;
|
default: return;
|
||||||
}
|
}
|
||||||
@ -179,13 +180,8 @@
|
|||||||
gpio_set_mode(PIN_MAP[cs].gpio_device, PIN_MAP[cs].gpio_bit, GPIO_AF_OUTPUT_PP); //FSMC_CS_NEx
|
gpio_set_mode(PIN_MAP[cs].gpio_device, PIN_MAP[cs].gpio_bit, GPIO_AF_OUTPUT_PP); //FSMC_CS_NEx
|
||||||
gpio_set_mode(PIN_MAP[rs].gpio_device, PIN_MAP[rs].gpio_bit, GPIO_AF_OUTPUT_PP); //FSMC_RS_Ax
|
gpio_set_mode(PIN_MAP[rs].gpio_device, PIN_MAP[rs].gpio_bit, GPIO_AF_OUTPUT_PP); //FSMC_RS_Ax
|
||||||
|
|
||||||
#if ENABLED(STM32_XL_DENSITY)
|
fsmcPsramRegion->BCR = FSMC_BCR_WREN | FSMC_BCR_MTYP_SRAM | FSMC_BCR_MWID_16BITS | FSMC_BCR_MBKEN;
|
||||||
FSMC_NOR_PSRAM4_BASE->BCR = FSMC_BCR_WREN | FSMC_BCR_MTYP_SRAM | FSMC_BCR_MWID_16BITS | FSMC_BCR_MBKEN;
|
fsmcPsramRegion->BTR = (FSMC_DATA_SETUP_TIME << 8) | FSMC_ADDRESS_SETUP_TIME;
|
||||||
FSMC_NOR_PSRAM4_BASE->BTR = (FSMC_DATA_SETUP_TIME << 8) | FSMC_ADDRESS_SETUP_TIME;
|
|
||||||
#else // PSRAM1 for STM32F103V (high density)
|
|
||||||
FSMC_NOR_PSRAM1_BASE->BCR = FSMC_BCR_WREN | FSMC_BCR_MTYP_SRAM | FSMC_BCR_MWID_16BITS | FSMC_BCR_MBKEN;
|
|
||||||
FSMC_NOR_PSRAM1_BASE->BTR = (FSMC_DATA_SETUP_TIME << 8) | FSMC_ADDRESS_SETUP_TIME;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
afio_remap(AFIO_REMAP_FSMC_NADV);
|
afio_remap(AFIO_REMAP_FSMC_NADV);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user