⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ltv350_init.cpp

📁 MXL9328LCD驱动实现
💻 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 + -