реклама на сайте
подробности

 
 
> LPC1788 + STN LCD и внутреняя ОЗУ, LCDUPBASE может быть внутренней ОЗУ?
kostyan
сообщение Mar 2 2012, 09:26
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 8-11-05
Пользователь №: 10 577



Начал осваивать 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 ;
}

Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 22:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01297 секунд с 7
ELECTRONIX ©2004-2016