提交 45238ef2 编写于 作者: wuyangyong's avatar wuyangyong

fix ili9325 driver

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@440 bbd45198-f89e-11dd-88c7-29a3b14d5316
上级 f3bb2aa8
...@@ -123,7 +123,6 @@ ...@@ -123,7 +123,6 @@
#define Cyan 0x7FFF #define Cyan 0x7FFF
#define Yellow 0xFFE0 #define Yellow 0xFFE0
static u16 DeviceCode; static u16 DeviceCode;
static void LCD_CtrlLinesConfig(void) static void LCD_CtrlLinesConfig(void)
...@@ -159,7 +158,7 @@ static void LCD_CtrlLinesConfig(void) ...@@ -159,7 +158,7 @@ static void LCD_CtrlLinesConfig(void)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2;
GPIO_Init(GPIOF, &GPIO_InitStructure); GPIO_Init(GPIOF, &GPIO_InitStructure);
/* Set PG.12(NE4 (LCD/CS)) as alternate function push pull - CE3(LCD /CS) */ /* Set NE2(LCD/CS) as alternate function push pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_Init(GPIOG, &GPIO_InitStructure); GPIO_Init(GPIOG, &GPIO_InitStructure);
} }
...@@ -171,7 +170,7 @@ static void LCD_CtrlLinesConfig(void) ...@@ -171,7 +170,7 @@ static void LCD_CtrlLinesConfig(void)
* Output : None * Output : None
* Return : None * Return : None
*******************************************************************************/ *******************************************************************************/
void LCD_FSMCConfig(void) static void LCD_FSMCConfig(void)
{ {
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef p; FSMC_NORSRAMTimingInitTypeDef p;
...@@ -206,19 +205,16 @@ void LCD_FSMCConfig(void) ...@@ -206,19 +205,16 @@ void LCD_FSMCConfig(void)
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
// FSMC_NORSRAMInitStructure.FSMC_AsyncWait = FSMC_AsyncWait_Disable;
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
/* BANK 4 (of NOR/SRAM Bank 1~4) is enabled */
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE); FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE);
} }
void LCD_X_Init(void) static void LCD_X_Init(void)
{ {
/* Configure the LCD Control pins --------------------------------------------*/ /* Configure the LCD Control pins --------------------------------------------*/
LCD_CtrlLinesConfig(); LCD_CtrlLinesConfig();
...@@ -229,19 +225,19 @@ void LCD_X_Init(void) ...@@ -229,19 +225,19 @@ void LCD_X_Init(void)
/******************************************************************************* /*******************************************************************************
* Function Name : LCD_WriteReg * Function Name : ili9325_WriteReg
* Description : Writes to the selected LCD register. * Description : Writes to the selected LCD register.
* Input : - LCD_Reg: address of the selected register. * Input : - LCD_Reg: address of the selected register.
* - LCD_RegValue: value to write to the selected register. * - LCD_RegValue: value to write to the selected register.
* Output : None * Output : None
* Return : None * Return : None
*******************************************************************************/ *******************************************************************************/
void LCD_WriteReg(u8 LCD_Reg,u16 LCD_RegValue) void ili9325_WriteReg(u8 LCD_Reg,u16 LCD_RegValue)
{ {
/* Write 16-bit Index, then Write Reg */ /* Write 16-bit Index, then Write Reg */
LCD->LCD_REG = LCD_Reg; ili9325_REG = LCD_Reg;
/* Write 16-bit Reg */ /* Write 16-bit Reg */
LCD->LCD_RAM = LCD_RegValue; ili9325_RAM = LCD_RegValue;
} }
/******************************************************************************* /*******************************************************************************
...@@ -254,108 +250,51 @@ void LCD_WriteReg(u8 LCD_Reg,u16 LCD_RegValue) ...@@ -254,108 +250,51 @@ void LCD_WriteReg(u8 LCD_Reg,u16 LCD_RegValue)
u16 LCD_ReadReg(u8 LCD_Reg) u16 LCD_ReadReg(u8 LCD_Reg)
{ {
/* Write 16-bit Index (then Read Reg) */ /* Write 16-bit Index (then Read Reg) */
LCD->LCD_REG = LCD_Reg; ili9325_REG = LCD_Reg;
/* Read 16-bit Reg */ /* Read 16-bit Reg */
return (LCD->LCD_RAM); return (ili9325_RAM);
} }
/******************************************************************************* /*******************************************************************************
* Function Name : LCD_WriteRAM_Prepare * Function Name : ili9325_WriteRAM_Prepare
* Description : Prepare to write to the LCD RAM. * Description : Prepare to write to the LCD RAM.
* Input : None * Input : None
* Output : None * Output : None
* Return : None * Return : None
*******************************************************************************/ *******************************************************************************/
void LCD_WriteRAM_Prepare(void) void ili9325_WriteRAM_Prepare(void)
{ {
LCD->LCD_REG = R34; ili9325_REG = R34;
} }
/******************************************************************************* /*******************************************************************************
* Function Name : LCD_WriteRAM * Function Name : ili9325_WriteRAM
* Description : Writes to the LCD RAM. * Description : Writes to the LCD RAM.
* Input : - RGB_Code: the pixel color in RGB mode (5-6-5). * Input : - RGB_Code: the pixel color in RGB mode (5-6-5).
* Output : None * Output : None
* Return : None * Return : None
*******************************************************************************/ *******************************************************************************/
void LCD_WriteRAM(u16 RGB_Code) void ili9325_WriteRAM(u16 RGB_Code)
{ {
/* Write 16-bit GRAM Reg */ /* Write 16-bit GRAM Reg */
LCD->LCD_RAM = RGB_Code; ili9325_RAM = RGB_Code;
}
/*******************************************************************************
* Function Name : LCD_ReadRAM
* Description : Reads the LCD RAM.
* Input : None
* Output : None
* Return : LCD RAM Value.
*******************************************************************************/
u16 LCD_ReadRAM(void)
{
//u16 dummy;
/* Write 16-bit Index (then Read Reg) */
LCD->LCD_REG = R34; /* Select GRAM Reg */
/* Read 16-bit Reg */
//dummy = LCD->LCD_RAM;
return LCD->LCD_RAM;
} }
/* 读取指定地址的GRAM */ /* 读取指定地址的GRAM */
unsigned short ili9325_ReadGRAM(unsigned short x,unsigned short y) unsigned short ili9325_ReadGRAM(unsigned short x,unsigned short y)
{ {
unsigned short temp; unsigned short temp;
ili9325_SetCursor(x,y); ili9325_SetCursor(x,y);
LCD->LCD_REG = R34; ili9325_REG = R34;
/* dummy read */ /* dummy read */
temp = LCD->LCD_RAM; temp = ili9325_RAM;
temp = LCD->LCD_RAM; temp = ili9325_RAM;
return temp; return temp;
} }
/*******************************************************************************
* Function Name : LCD_SetCursor
* Description : Sets the cursor position.
* Input : - Xpos: specifies the X position.
* - Ypos: specifies the Y position.
* Output : None
* Return : None
*******************************************************************************/
//void LCD_SetCursor(u16 Xpos, u16 Ypos)
//{
// LCD_WriteReg(0x06,Ypos>>8);
// LCD_WriteReg(0x07,Ypos);
//
// LCD_WriteReg(0x02,Xpos>>8);
// LCD_WriteReg(0x03,Xpos);
//}
void Delay(u32 nCount)
{
u32 TimingDelay;
while (nCount--)
{
for (TimingDelay=0; TimingDelay<10000; TimingDelay++);
}
}
void ili9325_Initializtion(void) void ili9325_Initializtion(void)
{ {
/***************************** volatile unsigned int i;
** 硬件连接说明 **
** STM32 ili9320 **
** PE0~15 <----> DB0~15 **
** PD15 <----> nRD **
** PD14 <----> RS **
** PD13 <----> nWR **
** PD12 <----> nCS **
** PD11 <----> nReset **
** PC0 <----> BK_LED **
******************************/
u16 i;
LCD_X_Init(); LCD_X_Init();
{ {
...@@ -368,88 +307,82 @@ void ili9325_Initializtion(void) ...@@ -368,88 +307,82 @@ void ili9325_Initializtion(void)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_Init(GPIOF,&GPIO_InitStructure); GPIO_Init(GPIOF,&GPIO_InitStructure);
} }
GPIO_ResetBits(GPIOF, GPIO_Pin_10);
Delay(5);
GPIO_SetBits(GPIOF, GPIO_Pin_10); GPIO_SetBits(GPIOF, GPIO_Pin_10);
Delay(5);
DeviceCode = LCD_ReadReg(0x0000); DeviceCode = LCD_ReadReg(0x0000);
if (DeviceCode==0x9325||DeviceCode==0x9328) if (DeviceCode==0x9325||DeviceCode==0x9328)
{ {
LCD_WriteReg(0x00e7,0x0010); ili9325_WriteReg(0x00e7,0x0010);
LCD_WriteReg(0x0000,0x0001); //start internal osc ili9325_WriteReg(0x0000,0x0001); //start internal osc
LCD_WriteReg(0x0001,0x0100); ili9325_WriteReg(0x0001,0x0100);
LCD_WriteReg(0x0002,0x0700); //power on sequence ili9325_WriteReg(0x0002,0x0700); //power on sequence
/* [5:4]-ID1~ID0 [3]-AM-1垂直-0水平 */ /* [5:4]-ID1~ID0 [3]-AM-1垂直-0水平 */
LCD_WriteReg(0x0003,(1<<12)|(1<<5)|(0<<4) | (1<<3) ); ili9325_WriteReg(0x0003,(1<<12)|(1<<5)|(0<<4) | (1<<3) );
LCD_WriteReg(0x0004,0x0000); ili9325_WriteReg(0x0004,0x0000);
LCD_WriteReg(0x0008,0x0207); ili9325_WriteReg(0x0008,0x0207);
LCD_WriteReg(0x0009,0x0000); ili9325_WriteReg(0x0009,0x0000);
LCD_WriteReg(0x000a,0x0000); //display setting ili9325_WriteReg(0x000a,0x0000); //display setting
LCD_WriteReg(0x000c,0x0001); //display setting ili9325_WriteReg(0x000c,0x0001); //display setting
LCD_WriteReg(0x000d,0x0000); //0f3c ili9325_WriteReg(0x000d,0x0000); //0f3c
LCD_WriteReg(0x000f,0x0000); ili9325_WriteReg(0x000f,0x0000);
//Power On sequence // //Power On sequence //
LCD_WriteReg(0x0010,0x0000); ili9325_WriteReg(0x0010,0x0000);
LCD_WriteReg(0x0011,0x0007); ili9325_WriteReg(0x0011,0x0007);
LCD_WriteReg(0x0012,0x0000); ili9325_WriteReg(0x0012,0x0000);
LCD_WriteReg(0x0013,0x0000); ili9325_WriteReg(0x0013,0x0000);
for (i=50000; i>0; i--); for (i=50000; i>0; i--);
for (i=50000; i>0; i--); for (i=50000; i>0; i--);
LCD_WriteReg(0x0010,0x1590); ili9325_WriteReg(0x0010,0x1590);
LCD_WriteReg(0x0011,0x0227); ili9325_WriteReg(0x0011,0x0227);
for (i=50000; i>0; i--); for (i=50000; i>0; i--);
for (i=50000; i>0; i--); for (i=50000; i>0; i--);
LCD_WriteReg(0x0012,0x009c); ili9325_WriteReg(0x0012,0x009c);
for (i=50000; i>0; i--); for (i=50000; i>0; i--);
for (i=50000; i>0; i--); for (i=50000; i>0; i--);
LCD_WriteReg(0x0013,0x1900); ili9325_WriteReg(0x0013,0x1900);
LCD_WriteReg(0x0029,0x0023); ili9325_WriteReg(0x0029,0x0023);
LCD_WriteReg(0x002b,0x000e); ili9325_WriteReg(0x002b,0x000e);
for (i=50000; i>0; i--); for (i=50000; i>0; i--);
for (i=50000; i>0; i--); for (i=50000; i>0; i--);
LCD_WriteReg(0x0020,0x0000); ili9325_WriteReg(0x0020,0x0000);
LCD_WriteReg(0x0021,0x0000); ili9325_WriteReg(0x0021,0x0000);
///////////////////////////////////////////////////////
for (i=50000; i>0; i--); for (i=50000; i>0; i--);
for (i=50000; i>0; i--); for (i=50000; i>0; i--);
LCD_WriteReg(0x0030,0x0007); ili9325_WriteReg(0x0030,0x0007);
LCD_WriteReg(0x0031,0x0707); ili9325_WriteReg(0x0031,0x0707);
LCD_WriteReg(0x0032,0x0006); ili9325_WriteReg(0x0032,0x0006);
LCD_WriteReg(0x0035,0x0704); ili9325_WriteReg(0x0035,0x0704);
LCD_WriteReg(0x0036,0x1f04); ili9325_WriteReg(0x0036,0x1f04);
LCD_WriteReg(0x0037,0x0004); ili9325_WriteReg(0x0037,0x0004);
LCD_WriteReg(0x0038,0x0000); ili9325_WriteReg(0x0038,0x0000);
LCD_WriteReg(0x0039,0x0706); ili9325_WriteReg(0x0039,0x0706);
LCD_WriteReg(0x003c,0x0701); ili9325_WriteReg(0x003c,0x0701);
LCD_WriteReg(0x003d,0x000f); ili9325_WriteReg(0x003d,0x000f);
for (i=50000; i>0; i--); for (i=50000; i>0; i--);
for (i=50000; i>0; i--); for (i=50000; i>0; i--);
LCD_WriteReg(0x0050,0x0000); ili9325_WriteReg(0x0050,0x0000);
LCD_WriteReg(0x0051,0x00ef); ili9325_WriteReg(0x0051,0x00ef);
LCD_WriteReg(0x0052,0x0000); ili9325_WriteReg(0x0052,0x0000);
LCD_WriteReg(0x0053,0x013f); ili9325_WriteReg(0x0053,0x013f);
LCD_WriteReg(0x0060,0xa700); ili9325_WriteReg(0x0060,0xa700);
LCD_WriteReg(0x0061,0x0001); ili9325_WriteReg(0x0061,0x0001);
LCD_WriteReg(0x006a,0x0000); ili9325_WriteReg(0x006a,0x0000);
LCD_WriteReg(0x0080,0x0000); ili9325_WriteReg(0x0080,0x0000);
LCD_WriteReg(0x0081,0x0000); ili9325_WriteReg(0x0081,0x0000);
LCD_WriteReg(0x0082,0x0000); ili9325_WriteReg(0x0082,0x0000);
LCD_WriteReg(0x0083,0x0000); ili9325_WriteReg(0x0083,0x0000);
LCD_WriteReg(0x0084,0x0000); ili9325_WriteReg(0x0084,0x0000);
LCD_WriteReg(0x0085,0x0000); ili9325_WriteReg(0x0085,0x0000);
ili9325_WriteReg(0x0090,0x0010);
LCD_WriteReg(0x0090,0x0010); ili9325_WriteReg(0x0092,0x0000);
LCD_WriteReg(0x0092,0x0000); ili9325_WriteReg(0x0093,0x0003);
LCD_WriteReg(0x0093,0x0003); ili9325_WriteReg(0x0095,0x0110);
LCD_WriteReg(0x0095,0x0110); ili9325_WriteReg(0x0097,0x0000);
LCD_WriteReg(0x0097,0x0000); ili9325_WriteReg(0x0098,0x0000);
LCD_WriteReg(0x0098,0x0000);
//display on sequence //display on sequence
LCD_WriteReg(0x0007,0x0133); ili9325_WriteReg(0x0007,0x0133);
ili9325_WriteReg(0x0020,0x0000);
LCD_WriteReg(0x0020,0x0000); ili9325_WriteReg(0x0021,0x0000);
LCD_WriteReg(0x0021,0x0000);
} }
ili9325_Clear( Blue ); ili9325_Clear( Blue );
} }
...@@ -461,16 +394,16 @@ void ili9325_Initializtion(void) ...@@ -461,16 +394,16 @@ void ili9325_Initializtion(void)
* y 列座标 * y 列座标
* 出口参数:无 * 出口参数:无
* 说 明: * 说 明:
* 调用方法:ili9320_SetCursor(10,10); * 调用方法:ili9325_SetCursor(10,10);
****************************************************************************/ ****************************************************************************/
void ili9325_SetCursor(u16 x,u16 y) void ili9325_SetCursor(u16 x,u16 y)
{ {
LCD_WriteReg(R32,x); /* 0-239 */ ili9325_WriteReg(R32,x); /* 0-239 */
LCD_WriteReg(R33,y); /* 0-319 */ ili9325_WriteReg(R33,y); /* 0-319 */
} }
/**************************************************************************** /****************************************************************************
* 名 称:void ili9320_SetWindows(u16 StartX,u16 StartY,u16 EndX,u16 EndY) * 名 称:void ili9325_SetWindows(u16 StartX,u16 StartY,u16 EndX,u16 EndY)
* 功 能:设置窗口区域 * 功 能:设置窗口区域
* 入口参数:StartX 行起始座标 * 入口参数:StartX 行起始座标
* StartY 列起始座标 * StartY 列起始座标
...@@ -478,71 +411,38 @@ void ili9325_SetCursor(u16 x,u16 y) ...@@ -478,71 +411,38 @@ void ili9325_SetCursor(u16 x,u16 y)
* EndY 列结束座标 * EndY 列结束座标
* 出口参数:无 * 出口参数:无
* 说 明: * 说 明:
* 调用方法:ili9320_SetWindows(0,0,100,100); * 调用方法:ili9325_SetWindows(0,0,100,100);
****************************************************************************/ ****************************************************************************/
void ili9320_SetWindows(u16 StartX,u16 StartY,u16 EndX,u16 EndY) void ili9325_SetWindows(u16 StartX,u16 StartY,u16 EndX,u16 EndY)
{ {
ili9325_SetCursor(StartX,StartY); ili9325_SetCursor(StartX,StartY);
LCD_WriteReg(0x0050, StartX); ili9325_WriteReg(0x0050, StartX);
LCD_WriteReg(0x0052, StartY); ili9325_WriteReg(0x0052, StartY);
LCD_WriteReg(0x0051, EndX); ili9325_WriteReg(0x0051, EndX);
LCD_WriteReg(0x0053, EndY); ili9325_WriteReg(0x0053, EndY);
} }
/**************************************************************************** /****************************************************************************
* 名 称:void ili9320_Clear(u16 dat) * 名 称:void ili9325_Clear(u16 dat)
* 功 能:将屏幕填充成指定的颜色,如清屏,则填充 0xffff * 功 能:将屏幕填充成指定的颜色,如清屏,则填充 0xffff
* 入口参数:dat 填充值 * 入口参数:dat 填充值
* 出口参数:无 * 出口参数:无
* 说 明: * 说 明:
* 调用方法:ili9320_Clear(0xffff); * 调用方法:ili9325_Clear(0xffff);
****************************************************************************/ ****************************************************************************/
void ili9325_Clear(u16 Color) void ili9325_Clear(u16 Color)
{ {
u32 index=0; u32 index=0;
ili9325_SetCursor(0,0); ili9325_SetCursor(0,0);
LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ ili9325_WriteRAM_Prepare(); /* Prepare to write GRAM */
for (index=0; index<76800; index++) for (index=0; index<76800; index++)
{ {
LCD->LCD_RAM=Color; ili9325_RAM=Color;
} }
} }
/**************************************************************************** /****************************************************************************
* 名 称:u16 ili9320_GetPoint(u16 x,u16 y) * 名 称:void ili9325_DrawPicture(u16 StartX,u16 StartY,u16 EndX,u16 EndY,u16 *pic)
* 功 能:获取指定座标的颜色值
* 入口参数:x 行座标
* y 列座标
* 出口参数:当前座标颜色值
* 说 明:
* 调用方法:i=ili9320_GetPoint(10,10);
****************************************************************************/
u16 ili9320_GetPoint(u16 x,u16 y)
{
ili9325_SetCursor(x,y);
return (ili9325_BGR2RGB(LCD_ReadRAM()));
}
/****************************************************************************
* 名 称:void ili9320_SetPoint(u16 x,u16 y,u16 point)
* 功 能:在指定座标画点
* 入口参数:x 行座标
* y 列座标
* point 点的颜色
* 出口参数:无
* 说 明:
* 调用方法:ili9320_SetPoint(10,10,0x0fe0);
****************************************************************************/
void ili9320_SetPoint(u16 x,u16 y,u16 point)
{
if ( (x>320)||(y>240) ) return;
ili9325_SetCursor(x,y);
LCD_WriteRAM_Prepare();
LCD_WriteRAM(point);
}
/****************************************************************************
* 名 称:void ili9320_DrawPicture(u16 StartX,u16 StartY,u16 EndX,u16 EndY,u16 *pic)
* 功 能:在指定座标范围显示一副图片 * 功 能:在指定座标范围显示一副图片
* 入口参数:StartX 行起始座标 * 入口参数:StartX 行起始座标
* StartY 列起始座标 * StartY 列起始座标
...@@ -551,18 +451,18 @@ void ili9320_SetPoint(u16 x,u16 y,u16 point) ...@@ -551,18 +451,18 @@ void ili9320_SetPoint(u16 x,u16 y,u16 point)
pic 图片头指针 pic 图片头指针
* 出口参数:无 * 出口参数:无
* 说 明:图片取模格式为水平扫描,16位颜色模式 * 说 明:图片取模格式为水平扫描,16位颜色模式
* 调用方法:ili9320_DrawPicture(0,0,100,100,(u16*)demo); * 调用方法:ili9325_DrawPicture(0,0,100,100,(u16*)demo);
****************************************************************************/ ****************************************************************************/
void ili9320_DrawPicture(u16 StartX,u16 StartY,u16 EndX,u16 EndY,u16 *pic) void ili9325_DrawPicture(u16 StartX,u16 StartY,u16 EndX,u16 EndY,u16 *pic)
{ {
u16 i; u16 i;
ili9320_SetWindows(StartX,StartY,EndX,EndY); ili9325_SetWindows(StartX,StartY,EndX,EndY);
ili9325_SetCursor(StartX,StartY); ili9325_SetCursor(StartX,StartY);
LCD_WriteRAM_Prepare(); ili9325_WriteRAM_Prepare();
for (i=0; i<(EndX*EndY); i++) for (i=0; i<(EndX*EndY); i++)
{ {
LCD_WriteRAM(*pic++); ili9325_WriteRAM(*pic++);
} }
} }
......
...@@ -7,22 +7,14 @@ extern void ili9325_Clear(u16 Color); ...@@ -7,22 +7,14 @@ extern void ili9325_Clear(u16 Color);
extern unsigned short ili9325_BGR2RGB(unsigned short c); extern unsigned short ili9325_BGR2RGB(unsigned short c);
extern void LCD_WriteRAM_Prepare(void); extern void ili9325_WriteRAM_Prepare(void);
extern void LCD_WriteRAM(u16 RGB_Code); extern void ili9325_WriteRAM(u16 RGB_Code);
extern unsigned short ili9325_ReadGRAM(unsigned short x,unsigned short y); extern unsigned short ili9325_ReadGRAM(unsigned short x,unsigned short y);
extern void LCD_WriteReg(u8 LCD_Reg,u16 LCD_RegValue); extern void ili9325_WriteReg(u8 LCD_Reg,u16 LCD_RegValue);
typedef struct
{
vu16 LCD_REG; /* 0x00 */
vu16 reserve1; /* 0x02 */
vu16 reserve2; /* 0x04 */
vu16 reserve3; /* 0x06 */
vu16 LCD_RAM; /* 0x08 */
} LCD_ili9325_TypeDef;
/* LCD is connected to the FSMC_Bank1_NOR/SRAM2 and NE2 is used as ship select signal */ /* LCD is connected to the FSMC_Bank1_NOR/SRAM2 and NE2 is used as ship select signal */
#define LCD_ili9325_BASE ((u32)(0x60000000 | 0x04000000)) /* RS <==> A2 */
#define LCD ((LCD_ili9325_TypeDef *) LCD_ili9325_BASE) #define ili9325_REG (*((volatile unsigned short *) 0x64000000)) /* RS = 0 */
#define ili9325_RAM (*((volatile unsigned short *) 0x64000008)) /* RS = 1 */
#endif #endif
...@@ -314,8 +314,8 @@ void rt_hw_lcd_set_pixel(rtgui_color_t *c, rt_base_t x, rt_base_t y) ...@@ -314,8 +314,8 @@ void rt_hw_lcd_set_pixel(rtgui_color_t *c, rt_base_t x, rt_base_t y)
p = rtgui_color_to_565p(*c); p = rtgui_color_to_565p(*c);
ili9325_SetCursor(x,y); ili9325_SetCursor(x,y);
LCD_WriteRAM_Prepare(); ili9325_WriteRAM_Prepare();
LCD_WriteRAM(p); ili9325_WriteRAM(p);
} }
/* 获取像素点颜色 */ /* 获取像素点颜色 */
...@@ -335,16 +335,14 @@ void rt_hw_lcd_draw_hline(rtgui_color_t *c, rt_base_t x1, rt_base_t x2, rt_base_ ...@@ -335,16 +335,14 @@ void rt_hw_lcd_draw_hline(rtgui_color_t *c, rt_base_t x1, rt_base_t x2, rt_base_
p = rtgui_color_to_565p(*c); p = rtgui_color_to_565p(*c);
/* [5:4]-ID~ID0 [3]-AM-1垂直-0水平 */ /* [5:4]-ID~ID0 [3]-AM-1垂直-0水平 */
LCD_WriteReg(0x0003,(1<<12)|(1<<5)|(1<<4) | (0<<3) ); ili9325_WriteReg(0x0003,(1<<12)|(1<<5)|(1<<4) | (0<<3) );
ili9325_SetCursor(x1, y); ili9325_SetCursor(x1, y);
LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ ili9325_WriteRAM_Prepare(); /* Prepare to write GRAM */
while (x1 < x2) while (x1 < x2)
{ {
//LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ ili9325_WriteRAM(p);
LCD_WriteRAM(p);
x1++; x1++;
//ili9320_SetCursor(x1, y);
} }
} }
...@@ -357,16 +355,14 @@ void rt_hw_lcd_draw_vline(rtgui_color_t *c, rt_base_t x, rt_base_t y1, rt_base_t ...@@ -357,16 +355,14 @@ void rt_hw_lcd_draw_vline(rtgui_color_t *c, rt_base_t x, rt_base_t y1, rt_base_t
p = rtgui_color_to_565p(*c); p = rtgui_color_to_565p(*c);
/* [5:4]-ID~ID0 [3]-AM-1垂直-0水平 */ /* [5:4]-ID~ID0 [3]-AM-1垂直-0水平 */
LCD_WriteReg(0x0003,(1<<12)|(1<<5)|(0<<4) | (1<<3) ); ili9325_WriteReg(0x0003,(1<<12)|(1<<5)|(0<<4) | (1<<3) );
ili9325_SetCursor(x, y1); ili9325_SetCursor(x, y1);
LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ ili9325_WriteRAM_Prepare(); /* Prepare to write GRAM */
while (y1 < y2) while (y1 < y2)
{ {
//LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ ili9325_WriteRAM(p);
LCD_WriteRAM(p);
y1++; y1++;
//ili9320_SetCursor(x, y1);
} }
} }
...@@ -379,17 +375,15 @@ void rt_hw_lcd_draw_raw_hline(rt_uint8_t *pixels, rt_base_t x1, rt_base_t x2, rt ...@@ -379,17 +375,15 @@ void rt_hw_lcd_draw_raw_hline(rt_uint8_t *pixels, rt_base_t x1, rt_base_t x2, rt
ptr = (rt_uint16_t*) pixels; ptr = (rt_uint16_t*) pixels;
/* [5:4]-ID~ID0 [3]-AM-1垂直-0水平 */ /* [5:4]-ID~ID0 [3]-AM-1垂直-0水平 */
LCD_WriteReg(0x0003,(1<<12)|(1<<5)|(1<<4) | (0<<3) ); ili9325_WriteReg(0x0003,(1<<12)|(1<<5)|(1<<4) | (0<<3) );
ili9325_SetCursor(x1, y); ili9325_SetCursor(x1, y);
LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ ili9325_WriteRAM_Prepare(); /* Prepare to write GRAM */
while (x1 < x2) while (x1 < x2)
{ {
LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ ili9325_WriteRAM( *ptr );
LCD_WriteRAM( *ptr );
x1 ++; x1 ++;
ptr ++; ptr ++;
ili9325_SetCursor(x1, y);
} }
} }
...@@ -416,14 +410,13 @@ rt_err_t rt_hw_lcd_init(void) ...@@ -416,14 +410,13 @@ rt_err_t rt_hw_lcd_init(void)
/* write */ /* write */
temp=0; temp=0;
for(test_y=0; test_y<320; test_y++) /* [5:4]-ID~ID0 [3]-AM-1垂直-0水平 */
ili9325_WriteReg(0x0003,(1<<12)|(1<<5)|(1<<4) | (0<<3) );
ili9325_SetCursor(0,0);
ili9325_WriteRAM_Prepare();
for(test_y=0; test_y<76800; test_y++)
{ {
for(test_x=0; test_x<240; test_x++) ili9325_WriteRAM(temp++);
{
ili9325_SetCursor(test_x,test_y);
LCD->LCD_REG = 34;
LCD->LCD_RAM = temp++;
}
} }
/* read */ /* read */
......
...@@ -24,7 +24,8 @@ static void GPIO_Configuration(void) ...@@ -24,7 +24,8 @@ static void GPIO_Configuration(void)
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_Init(GPIOA,&GPIO_InitStructure);
FLASH_RST_0(); // RESET FLASH_RST_0(); // RESET
FLASH_CS_1();
FLASH_RST_1(); FLASH_RST_1();
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册