Начал осваивать LPC1788 и хочется использовать простенький монохромный экран 320 на 240. Код с ручным дерганием есть, но хотелось бы аппаратной радости! Буфер для картинки для моего дисплея всего 9600 байт. Внешнее ОЗУ использовать не планируется. На ките взял LCD пример, чтото настроил своего и смотрю ноги на экране - както дергаются, если в LCDUPBASE указан адрес ВНЕШНЕЙ озу. Но если задаю в регистр адрес внутреннего буфера - то нужные ноги не дергаются совсем.
Как то можно использовать внутренее озу для LCD драйвера, или это дело заточено под внешнюю SDRAM?
Код инициализации примерно такой:
CODE
#include <nxp/iolpc1788.h>
#include "drv_clk.h"
#include "arm_comm.h"
#include "drv_stn_lcd_1bpp.h"
#define C_GLCD_PIX_CLK (6.4MHZ)
#define LCD_MEMORY_SIZE (240 * 320 / 8)
#pragma data_alignment=8
__no_init unsigned char LCDMemory[LCD_MEMORY_SIZE];
extern Int32U SDRAM_VRAM_BASE_ADDR;
#define LCD_VRAM_BASE_ADDR ((Int32U)&SDRAM_VRAM_BASE_ADDR)
#define LCD_CURSOR_BASE_ADDR ((Int32U)0x20088800)
void lcdInit(void)
{
// Assign pins
IOCON_P2_02 = 0x27;
IOCON_P2_03 = 0x27;
IOCON_P2_04 = 0x27;
IOCON_P2_05 = 0x27;
IOCON_P2_06 = 0x26;
IOCON_P2_07 = 0x26;
IOCON_P2_08 = 0x26;
IOCON_P2_09 = 0x26;
/*Back light enable*/
// FIO2DIR_bit.P2_1 = 1;
// FIO2SET = (1<<1);
// Init GLCD cotroller
PCONP_bit.PCLCD = 1; // enable LCD controller clock
CRSR_CTRL_bit.CrsrOn = 0; // Disable cursor
LCD_CTRL_bit.LcdEn = 0; // disable GLCD controller
LCD_CTRL_bit.LcdBpp= 0; // 1 bpp
LCD_CTRL_bit.LcdBW = 1; //
LCD_CTRL_bit.LcdMono8 = 0;
LCD_CTRL_bit.LcdTFT = 0; // STN panel
LCD_CTRL_bit.LcdDual =0; // single panel
LCD_CTRL_bit.BGR = 0; // notmal output
LCD_CTRL_bit.BEBO = 0; // little endian byte order
LCD_CTRL_bit.BEPO = 0; // little endian pix order
LCD_CTRL_bit.LcdPwr= 0; // disable power
LCD_CFG_bit.CLKDIV = CLK_GetClock(CLK_PERIPH) / (Int32U)C_GLCD_PIX_CLK;
LCD_POL_bit.BCD = 0; // bypass inrenal clk divider
LCD_POL_bit.CLKSEL = 0; // clock source for the LCD block is HCLK
LCD_POL_bit.IVS = 0; // LCDFP pin is active LOW and inactive HIGH
LCD_POL_bit.IHS = 0; // LCDLP pin is active LOW and inactive HIGH
LCD_POL_bit.IPC = 0; // data is driven out into the LCD on the falling edge
LCD_POL_bit.IOE = 0; // active high
LCD_POL_bit.CPL = C_GLCD_H_SIZE-1;
// init Horizontal Timing
LCD_TIMH_bit.HBP = C_GLCD_H_BACK_PORCH - 1;
LCD_TIMH_bit.HFP = C_GLCD_H_FRONT_PORCH - 1;
LCD_TIMH_bit.HSW = C_GLCD_H_PULSE - 1;
LCD_TIMH_bit.PPL = (C_GLCD_H_SIZE/16) - 1;
// init Vertical Timing
LCD_TIMV_bit.VBP = C_GLCD_V_BACK_PORCH;
LCD_TIMV_bit.VFP = C_GLCD_V_FRONT_PORCH;
LCD_TIMV_bit.VSW = C_GLCD_V_PULSE;
LCD_TIMV_bit.LPP = C_GLCD_V_SIZE - 1;
// Frame Base Address doubleword aligned
//LCD_UPBASE = 0x40000000;//LCD_VRAM_BASE_ADDR & ~7UL ;
// LCD_LPBASE = LCD_VRAM_BASE_ADDR & ~7UL ;
// LCD_UPBASE = 0x40000100;
// LCD_LPBASE = 0x40000100;
LCD_UPBASE = ((unsigned int)LCDMemory) & ~7UL ;
}