📄 ltv350_init.cpp
字号:
/**************************************************************
The initial and control for 320×240 24Bpp TFT LCD----3.5寸横屏
**************************************************************/
#include "precomp.h"
#include <windows.h>
#include <memory.h>
#include "MC9328MXL.h"
#include "GPIO.h"
#include "Platform.h"
#include <string.h>
#define LCD_spi_cs 0x00000100 //PORT D8
#define LCD_spi_scl 0x00000080 //PORT D7
#define LCD_spi_sdi 0x00000400 //PORT D10
#define LCD_command_INDEX 1
#define LCD_command_INSTR 0
static TGPIO_Reg *gpGPIO[4];
static void lcd_spi_process(unsigned char type,unsigned short datas);
static void lcd_samsung_LTV350QV_SPI_write(unsigned char reg,unsigned short datas);
//static void Gpio_Free(void);
/**************************************************************
320X240 16Bpp TFT LCD Port setˉ
**************************************************************/
static void Lcd_Port_Init(void)//未添加内存释放功能
{
gpGPIO[0] = (TGPIO_Reg*)VirtualAlloc(0, 4*1024, MEM_RESERVE, PAGE_NOACCESS);
if (gpGPIO[0] == NULL) {
ERRORMSG(1, (TEXT("GPIO_InitRegister: VirtualAlloc failed!\r\n")));
return;
}
else {
if (!VirtualCopy((PVOID)gpGPIO[0], (PVOID)(GPIO_A_Reg_Virtual_Address), 4*1024, (PAGE_READWRITE | PAGE_NOCACHE)))
{
ERRORMSG(1, (TEXT("GPIO_InitRegister: VirtualCopy failed!\r\n")));
return;
}
}
gpGPIO[3] = (TGPIO_Reg*)((DWORD)gpGPIO[0] + ((DWORD)GPIO_D_Reg_Virtual_Address - (DWORD)GPIO_A_Reg_Virtual_Address));
gpGPIO[3]->GIUS |= (BIT7 | BIT8 | BIT10); //SET PIN AS I/O
gpGPIO[3]->DDIR |= (BIT7 | BIT8 | BIT10); //SET AS OUTPUT DIR
gpGPIO[3]->OCR1 |= (BIT14 | BIT15 | BIT16 | BIT17 | BIT20 | BIT21); //SELECT DA(DATE REGESTER)
}
/*static void Gpio_Free(void)
{
gpGPIO[3]->GIUS &= ~(BIT7 | BIT8 | BIT10);
gpGPIO[3]->DDIR &= ~(BIT7 | BIT8 | BIT10);
}*/
/**************************************************************
DELAY FOR CPU TIME
***************************************************************/
static void Delay(DWORD Times)
{
while(Times)Times--;
}
/**************************************************************
模拟 SAMSUNG LCD LTV350QV SPI 接口程序
**************************************************************/
static void lcd_spi_process(unsigned char type,unsigned short datas)
{
unsigned char i;
unsigned char orders;
gpGPIO[3]->DR &= ~LCD_spi_cs;
Delay(50);
if(type) orders = 0x74;
else orders = 0x76;
for(i = 0; i < 8; i++)
{
gpGPIO[3]->DR &= ~LCD_spi_scl;
Delay(50);
if(orders & 0x80) gpGPIO[3]->DR |= LCD_spi_sdi;
else gpGPIO[3]->DR &= ~LCD_spi_sdi;
Delay(50);
gpGPIO[3]->DR |= LCD_spi_scl;
Delay(50);
orders = orders << 1;
}
for(i = 0; i < 16; i++)
{
gpGPIO[3]->DR &= ~LCD_spi_scl;
Delay(50);
if(datas & 0x8000) gpGPIO[3]->DR |= LCD_spi_sdi;
else gpGPIO[3]->DR &= ~LCD_spi_sdi;
Delay(50);
gpGPIO[3]->DR |= LCD_spi_scl;
Delay(50);
datas = datas << 1;
}
gpGPIO[3]->DR |= LCD_spi_cs;
}
static void lcd_samsung_LTV350QV_SPI_write(unsigned char reg,unsigned short datas)
{
lcd_spi_process(LCD_command_INDEX,reg);
lcd_spi_process(LCD_command_INSTR,datas);
}
/**************************************************************
SAMSUNG LCD LTV350QV 240X320_Init
功能:LTV350QV 内部寄存器设置。
**************************************************************/
static void samsung_LTV350QV_init(void)
{
unsigned char j = 235;
int i = 1;
while(j)
{
j++;
gpGPIO[3]->PUEN |= (BIT7 | BIT8 | BIT10);
//Sleep(4000);
DEBUGMSG(1, (TEXT("__%d\n"),j));
lcd_samsung_LTV350QV_SPI_write(9,0);
Sleep(10);
lcd_samsung_LTV350QV_SPI_write(9,0x4000);
lcd_samsung_LTV350QV_SPI_write(10,0x2000);
lcd_samsung_LTV350QV_SPI_write(9,0x4055);
Sleep(50);
lcd_samsung_LTV350QV_SPI_write(1,0x409d);//0x409d
lcd_samsung_LTV350QV_SPI_write(2,0x0204);//0x0204
lcd_samsung_LTV350QV_SPI_write(3,0x0100);
lcd_samsung_LTV350QV_SPI_write(4,0x3000);//0x3000
lcd_samsung_LTV350QV_SPI_write(5,0x4003);//0x4003
lcd_samsung_LTV350QV_SPI_write(6,0x000D);//vsync-b
lcd_samsung_LTV350QV_SPI_write(7,0x0021);//hsync-b
lcd_samsung_LTV350QV_SPI_write(8,0x0c00);
lcd_samsung_LTV350QV_SPI_write(10,0x0103);
lcd_samsung_LTV350QV_SPI_write(11,0x0301);
lcd_samsung_LTV350QV_SPI_write(12,0x1f0f);
lcd_samsung_LTV350QV_SPI_write(13,0x1f0f);
lcd_samsung_LTV350QV_SPI_write(14,0x0707);
lcd_samsung_LTV350QV_SPI_write(15,0x0307);
lcd_samsung_LTV350QV_SPI_write(16,0x0707);
lcd_samsung_LTV350QV_SPI_write(17,0x0000);
lcd_samsung_LTV350QV_SPI_write(18,0x0004);
lcd_samsung_LTV350QV_SPI_write(19,0x0000);
Sleep(70);
lcd_samsung_LTV350QV_SPI_write(9,0x4a55);
lcd_samsung_LTV350QV_SPI_write(5,0x5003);
gpGPIO[3]->PUEN &= ~(BIT7 | BIT8 | BIT10);
}
}
/**************************************************************
SAMSUNG LCD LTV350QV 240X320_Init
功能:被外部调用,初始化LCD主函数。
**************************************************************/
DWORD WINAPI Lcd_Tft_240X320_Init( void* value )
{
Lcd_Port_Init();
//while(1)
//{
samsung_LTV350QV_init();
//Sleep(4000);
//}
//Gpio_Free();
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -