После инициализации экран закрышен Синим и все. Что бы я не писал в SDRAM ничего не меняется и не происходит.
Помогите, пожалуйста.
Сам код инициализации:
Код: Выделить всё
/* SDRAM DEFINES */
#define SDRAM_BASE 0xD0000000
#define SDRAM_SIZE 0x00800000
#define TMRD(x) (x << 0) /* Load Mode Register to Active */
#define TXSR(x) (x << 4) /* Exit Self-refresh delay */
#define TRAS(x) (x << 8) /* Self refresh time */
#define TRC(x) (x << 12) /* Row cycle delay */
#define TWR(x) (x << 16) /* Recovery delay */
#define TRP(x) (x << 20) /* Row precharge delay */
#define TRCD(x) (x << 24) /* Row to column delay */
/* LCD-TFT DEFINES */
#define LCD_WIDTH 240 /* Width */
#define LCD_HEIGHT 320 /* Height */
#define HBP 4 /* Horizontal back porch 4*/
#define HSYNC 8 /* HSync 8*/
#define HFP 4 /* Horizontal front porch 4*/
#define VBP 1 /* Vertical back porch1 */
#define VSYNC 2 /* VSync2 */
#define VFP 1 /* Vertical front porch1 */
#define ACTIVE_W (HSYNC + LCD_WIDTH + HBP - 1)
#define ACTIVE_H (VSYNC + LCD_HEIGHT + VBP - 1)
#define TOTAL_WIDTH (HSYNC + HBP + LCD_WIDTH + HFP - 1)
#define TOTAL_HEIGHT (VSYNC + VBP + LCD_HEIGHT + VFP - 1)
#define PIXEL_WIDHT 2
void SDRAM_Configuration(void) {
volatile uint32_t ptr = 0;
volatile uint32_t i = 0;
RCC->AHB3ENR |= RCC_AHB3ENR_FMCEN;
// Initialization step 1
FMC_Bank5_6->SDCR[0] = FMC_SDCR1_SDCLK_1 | FMC_SDCR1_RBURST | FMC_SDCR1_RPIPE_1;
FMC_Bank5_6->SDCR[1] = FMC_SDCR1_NR_0 | FMC_SDCR1_MWID_0 | FMC_SDCR1_NB | FMC_SDCR1_CAS;
// Initialization step 2
FMC_Bank5_6->SDTR[0] = TRC(7) | TRP(2);
FMC_Bank5_6->SDTR[1] = TMRD(2) | TXSR(7) | TRAS(4) | TWR(2) | TRCD(2);
// Initialization step 3
while(FMC_Bank5_6->SDSR & FMC_SDSR_BUSY);
FMC_Bank5_6->SDCMR = 1 | FMC_SDCMR_CTB2 | (1 << 5);
// Initialization step 4
for(i = 0; i < 1000000; i++);
// Initialization step 5
while(FMC_Bank5_6->SDSR & FMC_SDSR_BUSY);
FMC_Bank5_6->SDCMR = 2 | FMC_SDCMR_CTB2 | (1 << 5);
// Initialization step 6
while(FMC_Bank5_6->SDSR & FMC_SDSR_BUSY);
FMC_Bank5_6->SDCMR = 3 | FMC_SDCMR_CTB2 | (4 << 5);
// Initialization step 7
while(FMC_Bank5_6->SDSR & FMC_SDSR_BUSY);
FMC_Bank5_6->SDCMR = 4 | FMC_SDCMR_CTB2 | (1 << 5) | (0x231 << 9);
// Initialization step 8
while(FMC_Bank5_6->SDSR & FMC_SDSR_BUSY);
FMC_Bank5_6->SDRTR |= (683 << 1);
while(FMC_Bank5_6->SDSR & FMC_SDSR_BUSY);
// Clear SDRAM
//for(ptr = SDRAM_BASE; ptr < (SDRAM_BASE + SDRAM_SIZE); ptr += 4)
// *((uint32_t *)ptr) = 0x00000000;
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* Function Name : LTDC_Configuration
* Description : Setting LTDC for LCD TFT
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
void LTDC_Configuration(void) {
RCC->APB2ENR |= RCC_APB2ENR_LTDCEN;
//RCC->AHB1ENR |= RCC_AHB1ENR_DMA2DEN;
RCC_PLLSAIConfig(320,4,4);
RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div16);
RCC_PLLSAICmd(ENABLE); // Enable PLLSAI Clock
while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET){}
LTDC->SSCR = ((HSYNC - 1) << 16) | (VSYNC - 1);
LTDC->BPCR = ((HBP - 1) << 16) | (VBP - 1);
LTDC->AWCR = (ACTIVE_W << 16) | (ACTIVE_H);
LTDC->TWCR = (TOTAL_WIDTH << 16) | (TOTAL_HEIGHT);
LTDC_Layer1->WHPCR = (HBP + HSYNC) | ((HBP + HSYNC + LCD_WIDTH - 1) << 16);
LTDC_Layer1->WVPCR = VBP + VSYNC | ((VBP + VSYNC + LCD_HEIGHT - 1) << 16);
LTDC_Layer1->PFCR = 2;
LTDC_Layer1->CFBAR = SDRAM_BASE;
LTDC_Layer1->CFBLR = ((LCD_WIDTH * PIXEL_WIDHT) << 16) | ((LCD_WIDTH * PIXEL_WIDHT) + 3);
LTDC_Layer1->CR = LTDC_LxCR_LEN;
//LTDC->BCCR = 0xFF0000;
LTDC->SRCR = LTDC_SRCR_IMR;
LTDC->GCR = LTDC_GCR_LTDCEN;
}
void UB_SDRAM_Write16b(uint32_t adr, uint16_t wert)
{
*(uint16_t*) (SDRAM_BASE + adr) = wert;
}
uint16_t UB_SDRAM_Read16b(uint32_t adr)
{
uint16_t ret_wert=0;
ret_wert = *(__IO uint16_t*)(SDRAM_BASE + adr);
return(ret_wert);
}