[Horus] Another 40K saved for Lua
This commit is contained in:
@@ -37,16 +37,18 @@
|
||||
|
||||
#define LCD_BKLIGHT_PWM_FREQ 300
|
||||
|
||||
#define LCD_FIRST_FRAME_BUFFER SDRAM_BANK_ADDR
|
||||
#define LCD_SECOND_FRAME_BUFFER (SDRAM_BANK_ADDR + DISPLAY_BUFFER_SIZE)
|
||||
#define LCD_BACKUP_FRAME_BUFFER (SDRAM_BANK_ADDR + 2*DISPLAY_BUFFER_SIZE)
|
||||
uint8_t LCD_FIRST_FRAME_BUFFER[DISPLAY_BUFFER_SIZE] __SDRAM;
|
||||
uint8_t LCD_SECOND_FRAME_BUFFER[DISPLAY_BUFFER_SIZE] __SDRAM;
|
||||
uint8_t LCD_BACKUP_FRAME_BUFFER[DISPLAY_BUFFER_SIZE] __SDRAM;
|
||||
|
||||
uint32_t CurrentFrameBuffer = LCD_FIRST_FRAME_BUFFER;
|
||||
uint8_t * CurrentFrameBuffer = LCD_FIRST_FRAME_BUFFER;
|
||||
uint32_t CurrentLayer = LCD_FIRST_LAYER;
|
||||
|
||||
#define NRST_LOW() do { LCD_GPIO_NRST->BSRRH = LCD_GPIO_PIN_NRST; } while(0)
|
||||
#define NRST_HIGH() do { LCD_GPIO_NRST->BSRRL = LCD_GPIO_PIN_NRST; } while(0)
|
||||
|
||||
uint8_t modelBitmap[MODEL_BITMAP_SIZE] __SDRAM;
|
||||
|
||||
static void LCD_AF_GPIOConfig(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
@@ -144,6 +146,7 @@ static void LCD_NRSTConfig(void)
|
||||
GPIO_Init(LCD_GPIO_NRST, &GPIO_InitStructure);
|
||||
}
|
||||
|
||||
// TODO delay function
|
||||
static void delay3(uint32_t nCount)
|
||||
{
|
||||
uint32_t index = 0;
|
||||
@@ -291,7 +294,7 @@ void LCD_LayerInit()
|
||||
LTDC_Layer_InitStruct.LTDC_CFBLineNumber = LCD_H;
|
||||
|
||||
/* Start Address configuration : the LCD Frame buffer is defined on SDRAM w/ Offset */
|
||||
LTDC_Layer_InitStruct.LTDC_CFBStartAdress = LCD_FIRST_FRAME_BUFFER;
|
||||
LTDC_Layer_InitStruct.LTDC_CFBStartAdress = (uint32_t)LCD_FIRST_FRAME_BUFFER;
|
||||
|
||||
/* Initialize LTDC layer 1 */
|
||||
LTDC_LayerInit(LTDC_Layer1, <DC_Layer_InitStruct);
|
||||
@@ -301,7 +304,7 @@ void LCD_LayerInit()
|
||||
LTDC_Layer_InitStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_PAxCA;
|
||||
|
||||
/* Start Address configuration : the LCD Frame buffer is defined on SDRAM w/ Offset */
|
||||
LTDC_Layer_InitStruct.LTDC_CFBStartAdress = LCD_FIRST_FRAME_BUFFER + DISPLAY_BUFFER_SIZE;
|
||||
LTDC_Layer_InitStruct.LTDC_CFBStartAdress = (uint32_t)LCD_SECOND_FRAME_BUFFER;
|
||||
|
||||
/* Initialize LTDC layer 2 */
|
||||
LTDC_LayerInit(LTDC_Layer2, <DC_Layer_InitStruct);
|
||||
@@ -387,14 +390,12 @@ void LCD_Init(void)
|
||||
*/
|
||||
void LCD_SetLayer(uint32_t Layerx)
|
||||
{
|
||||
if (Layerx == LCD_FIRST_LAYER)
|
||||
{
|
||||
if (Layerx == LCD_FIRST_LAYER) {
|
||||
CurrentFrameBuffer = LCD_FIRST_FRAME_BUFFER;
|
||||
CurrentLayer = LCD_FIRST_LAYER;
|
||||
}
|
||||
else
|
||||
{
|
||||
CurrentFrameBuffer = LCD_FIRST_FRAME_BUFFER + DISPLAY_BUFFER_SIZE;
|
||||
else {
|
||||
CurrentFrameBuffer = LCD_SECOND_FRAME_BUFFER;
|
||||
CurrentLayer = LCD_SECOND_LAYER;
|
||||
}
|
||||
}
|
||||
@@ -438,7 +439,7 @@ void lcdInit(void)
|
||||
|
||||
void lcdDrawSolidFilledRectDMA(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color)
|
||||
{
|
||||
uint32_t addr = CurrentFrameBuffer + 2*(LCD_W*y + x);
|
||||
uint32_t addr = (uint32_t)CurrentFrameBuffer + 2*(LCD_W*y + x);
|
||||
uint8_t red = (0xF800 & color) >> 11;
|
||||
uint8_t blue = 0x001F & color;
|
||||
uint8_t green = (0x07E0 & color) >> 5;
|
||||
@@ -470,7 +471,7 @@ void lcdDrawBitmapDMA(uint16_t x, uint16_t y, uint16_t w, uint16_t h, const uint
|
||||
if ((uint32_t(bitmap) & 0x03) != 0)
|
||||
return;
|
||||
|
||||
uint32_t addr = CurrentFrameBuffer + 2*(LCD_W*y + x);
|
||||
uint32_t addr = (uint32_t)CurrentFrameBuffer + 2*(LCD_W*y + x);
|
||||
|
||||
DMA2D_DeInit();
|
||||
|
||||
@@ -538,14 +539,12 @@ void DMAcopy(void * src, void * dest, int len)
|
||||
|
||||
void lcdStoreBackupBuffer()
|
||||
{
|
||||
uint16_t * src = (uint16_t *)CurrentFrameBuffer, * dest = (uint16_t *)LCD_BACKUP_FRAME_BUFFER;
|
||||
DMAcopy(src, dest, DISPLAY_BUFFER_SIZE);
|
||||
DMAcopy(CurrentFrameBuffer, LCD_BACKUP_FRAME_BUFFER, DISPLAY_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
int lcdRestoreBackupBuffer()
|
||||
{
|
||||
uint16_t * dest = (uint16_t *)CurrentFrameBuffer, * src = (uint16_t *)LCD_BACKUP_FRAME_BUFFER;
|
||||
DMAcopy(src, dest, DISPLAY_BUFFER_SIZE);
|
||||
DMAcopy(LCD_BACKUP_FRAME_BUFFER, CurrentFrameBuffer, DISPLAY_BUFFER_SIZE);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user