|
如何在LCD 的驱动中增加一个SPI 初始化代码
[复制链接]
如何在LCD 的驱动中增加一个SPI 初始化代码,而SPI 是用GPIO 来模拟的,那在BSP 当中如何应用控制GPIO 呢!
PS:
主要目的就是在init.c 中的InitDisplay()中增加如下代码:
#define HX_SCLK (1 << 3)
#define HX_CS (1 << 2)
#define HX_SDI (1 << 4)
#define LCD_RESET (1 << 1)
#define BL_EN (1 << 1)
#define SET_HX_SCLK (s2440IOP->rGPFDAT=s2440IOP->rGPFDAT|HX_SCLK )
#define CLR_HX_SCLK (s2440IOP->rGPFDAT=s2440IOP->rGPFDAT&(~HX_SCLK) )
#define SET_HX_CS (s2440IOP->rGPFDAT=s2440IOP->rGPFDAT|HX_CS )
#define CLR_HX_CS (s2440IOP->rGPFDAT=s2440IOP->rGPFDAT&(~HX_CS) )
#define SET_HX_SDI (s2440IOP->rGPFDAT=s2440IOP->rGPFDAT|HX_SDI )
#define CLR_HX_SDI (s2440IOP->rGPFDAT=s2440IOP->rGPFDAT&(~HX_SDI) )
#define SET_LCD_RESET (s2440IOP->rGPFDAT=s2440IOP->rGPFDAT|LCD_RESET )
#define CLR_LCD_RESET (s2440IOP->rGPFDAT=s2440IOP->rGPFDAT&(~LCD_RESET) )
#define SET_BL_EN (s2440IOP->rGPFDAT=s2440IOP->rGPFDAT|BL_EN )
#define CLR_BL_EN (s2440IOP->rGPFDAT=s2440IOP->rGPFDAT&(~BL_EN) )
//***********************************
void HX8238intial(void);
void Write_com(unsigned short SSD2123_index);
void Write_register(unsigned short SSD2123_data);
void Write_com_reg(unsigned short SSD2123_index, unsigned short SSD2123_data);
// void Lcd_ClearScr_SPI(unsigned short DATA1);
//---------------------------------------------------------
void HX8238intial(void)
{ Delay(10);
CLR_LCD_RESET;
Delay(10);
SET_LCD_RESET;
Delay(5);
//********Enter initial LQ048Y3DH01 *******
Write_com_reg(0x0001,0x0102);
Write_com_reg(0x0002,0x0400);
Write_com_reg(0x0003,0x28E7);//0x28E7
Write_com_reg(0x0004,0x4100);
Write_com_reg(0x000B,0x0019);
Write_com_reg(0x000C,0x700A);//0x700A
Write_com_reg(0x000D,0x0200);//0x0200
Write_com_reg(0x0011,0x1101);
Write_com_reg(0x0012,0x1020);
Write_com_reg(0x0013,0x0320);
Write_com_reg(0x0014,0x01E0);
Write_com_reg(0x0015,0x03E8);
Write_com_reg(0x0016,0x0C0A);
Write_com_reg(0x0017,0x0001);
Write_com_reg(0x0018,0x0000);
//*********gamma********************
Write_com_reg(0x0030,0x341F);
Write_com_reg(0x0031,0x0D1B);
Write_com_reg(0x0032,0x1301);
Write_com_reg(0x0033,0x6634);
Write_com_reg(0x0034,0x0034);
Write_com_reg(0x0035,0x0300);
Write_com_reg(0x0036,0x0D1B);
Write_com_reg(0x0037,0x1508);
Write_com_reg(0x0038,0x6634);
Write_com_reg(0x0039,0x8276);
Write_com_reg(0x0028,0x0006);
Write_com_reg(0x0022,0x0090);
Write_com_reg(0x003D,0x0290);
Write_com_reg(0x0021,0x0F5A);
Write_com_reg(0x003F,0x181B);
Delay(20);
}
//********************************
void Write_com(unsigned short SSD2123_index)
{
unsigned char HX_WR_COM=0x74;//74
unsigned char i;
SET_HX_CS ;//SET_HX_CS;
SET_HX_SDI ;//SET_HX_SDI;
SET_HX_SCLK;//SET_HX_CLK;
CLR_HX_CS;
Delay(1);
for(i=8;i>0;i--)
{
CLR_HX_SCLK;
if (HX_WR_COM & 0x80)
SET_HX_SDI;
else
CLR_HX_SDI;
HX_WR_COM <<= 1;
Delay(1);
SET_HX_SCLK;
Delay(1);
}
for(i=0;i<16;i++) // 7 ~14 Data
{
CLR_HX_SCLK;
if ( SSD2123_index& 0x8000)
SET_HX_SDI;
else
CLR_HX_SDI;
SSD2123_index<<= 1;
Delay(1);
SET_HX_SCLK;
Delay(1);
}
SET_HX_SCLK;
//Delay(1);
//SET_HX_SDI ;//SET_HX_SDI;
Delay(1);
SET_HX_CS;
}
//************************************
void Write_register(unsigned short SSD2123_data)
{
unsigned char HX_WR_COM=0x76;//76
unsigned char i;
SET_HX_CS ;//SET_HX_CS;
SET_HX_SDI ;//SET_HX_SDI;
SET_HX_SCLK;//SET_HX_CLK;
CLR_HX_CS;
Delay(1);
for(i=0;i<8;i++) // 2 ~6 ssd2123_reg
{
CLR_HX_SCLK;
if (HX_WR_COM & 0x80)
SET_HX_SDI;
else
CLR_HX_SDI;
HX_WR_COM <<= 1;
Delay(1);
SET_HX_SCLK;
Delay(1);
}
for(i=0;i<16;i++) // 7 ~14 Data
{
CLR_HX_SCLK;
if ( SSD2123_data& 0x8000)
SET_HX_SDI;
else
CLR_HX_SDI;
SSD2123_data<<= 1;
Delay(1);
SET_HX_SCLK;
Delay(1);
}
SET_HX_SCLK;
// Delay(1);
//SET_HX_SDI ;//SET_HX_SDI;
Delay(1);
SET_HX_CS;
}
//******************************************************
void Write_com_reg(unsigned short SSD2123_index, unsigned short SSD2123_data)
{
Write_com(SSD2123_index);
Delay(5);
Write_register( SSD2123_data);
Delay(5);
}
|
|