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

📄 lcd.c

📁 sharp触摸屏测试代码
💻 C
字号:
/*********************************************************************************************************
 *
 *
 * 
 * ********************************************************************************************************
 */


#include "lcd.h"

#define DMA_ADDR 0xc0000000



#if 1 
struct fb_info  lcd={
    	panel_name:	"LQ035 AD-TFT",
	pixclock:55,

	/* bpp set based on DIP switches on LCD board */
	xres:		240,			yres:		320,
	hsync_len:	13, /* hsw */		vsync_len:	2,  /* vsw */
	left_margin:	21, /* hbp */		upper_margin:	5,  /* vbp */
	right_margin:	11, /* hfp */		lower_margin:	5,  /* vfp */

//	sync:		FB_SYNC_VERT_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,

	LCDtiming2:	LCD_TIMING2_IPC,

	LCDtiming3:	0,

	LCDcontrol:     LCD_CTRL_TFT | LCD_CTRL_BW_COLOR | LCD_CTRL_WATERMARK,

	LCDICPcontrol:	LCDICP_CONTROL_CLSEN | LCDICP_CONTROL_SPSEN,

	LCDICPsetup:	LCDICP_SETUP_MODE_HRTFT | LCDICP_SETUP_VERT_NORMAL | LCDICP_SETUP_HORIZ_NORMAL,

	LCDICPtiming1:	LCDICP_TIMING1_PSDEL(9) | LCDICP_TIMING1_REVDEL(3) | LCDICP_TIMING1_LPDEL(14),

	LCDICPtiming2:	LCDICP_TIMING2_PSDEL2(209) | LCDICP_TIMING2_SPLVALUE(34),
};
/*#else
*/
#endif 





void lcd_paint(char * pic);


static int fclkfreq_get( void)
{
    u32 mainDiv1, mainDiv2, preDiv, ps;
    u32 clkset = (u32*)(0x80000400+32);
	
    //clkset = clksc->clkset;

    mainDiv1 = (clkset >>  7) & 0x0f;
    mainDiv2 = (clkset >> 11) & 0x1f;
    preDiv   = (clkset >>  2) & 0x1f;
    ps       = (clkset >> 18) & 0x03;

	return  14745600 / ((preDiv + 2) * ( 1 << ps)) * (mainDiv1 +2) * (mainDiv2 + 2) ;
}


static  int get_pcd(unsigned int pixclock)
{
	unsigned int pcd=0;

	if (pixclock) {
		pcd = fclkfreq_get() / 100;
		pcd =pcd/1000;
		pcd *= pixclock;
		pcd /= 10000000;
		pcd += 1;	/* make up for integer math truncations */
	}
	
	return pcd;
}


void lcd_enable()
{
	u32 pcd ;

	lcdRegs_t *LCD = (lcdRegs_t *)(0x80003000);
	lcdicpRegs_t *LCDICP = (lcdicpRegs_t *)(0x80001000);
	u32 *i;
	
	struct tmp_lcd_reg {
		u32		 LCDtiming0;
		u32		 LCDtiming1;
		u32		 LCDtiming2;
		u32		 LCDtiming3;
		u32		 LCDcontrol;
		u32		 LCDICPsetup;
		u32		 LCDICPcontrol;
		u32		 LCDICPtiming1;
		u32		 LCDICPtiming2;
	}   tmpreg;

/*
 * step 1:
 */

	

	
	    tmpreg.LCDcontrol = LCD_CTRL_BPP16 | LCD_CTRL_BGR|LCD_CTRL_PWR;

	   pcd= get_pcd(lcd.pixclock);
	tmpreg.LCDtiming0 =
	    LCD_TIMING0_HFP(lcd.right_margin) +
	    LCD_TIMING0_HBP(lcd.left_margin) +
	    LCD_TIMING0_HSW(lcd.hsync_len) +
	    LCD_TIMING0_PPL(lcd.xres);


	tmpreg.LCDtiming1 =
		LCD_TIMING1_VBP(lcd.upper_margin) +
		LCD_TIMING1_VFP(lcd.lower_margin) +
		LCD_TIMING1_VSW(lcd.vsync_len) +
		LCD_TIMING1_LPP(lcd.yres);

	tmpreg.LCDtiming2 = lcd.LCDtiming2 ; 
	//tmpreg.LCDtiming2 = lcd.LCDtiming2 | 
	 //   	LCD_TIMING2_CPL(lcd.xres) |
	//	LCD_TIMING2_PCD(pcd)| 
	//	(lcd.sync & FB_SYNC_HOR_HIGH_ACT  ? 0 : LCD_TIMING2_IHS) |
	//	(lcd.sync & FB_SYNC_VERT_HIGH_ACT ? 0 : LCD_TIMING2_IVS);
	tmpreg.LCDtiming3    = lcd.LCDtiming3;

	
	tmpreg.LCDICPsetup   = lcd.LCDICPsetup | LCDICP_SETUP_PPL(lcd.xres);
	tmpreg.LCDICPsetup   |= LCDICP_SETUP_POWER;

	tmpreg.LCDICPcontrol = lcd.LCDICPcontrol;
	tmpreg.LCDICPtiming1 = lcd.LCDICPtiming1;
	tmpreg.LCDICPtiming2 = lcd.LCDICPtiming2;

//set gpio
	i=(u32)(0x80000e00+0x2c);
	*i=3;	

//set reg

	LCD->control=LCD_CTRL_ENABLE;
	
	
	LCDICP->control = tmpreg.LCDICPcontrol;
	LCDICP->setup   = tmpreg.LCDICPsetup;
	LCDICP->timing1 = tmpreg.LCDICPtiming1;
	LCDICP->timing2 = tmpreg.LCDICPtiming2;
	LCD->timing0    = tmpreg.LCDtiming0;
	LCD->timing1    = tmpreg.LCDtiming1;
	LCD->timing2    = tmpreg.LCDtiming2;
	LCD->timing3    = tmpreg.LCDtiming3;
	LCD->upbase     = DMA_ADDR;
	LCD->lpoverflow = DMA_ADDR;
	LCD->intrEnable = 0;
	LCD->control    = tmpreg.LCDcontrol;


	
}

void lcd_paint(char *pic)
{	
	int i;
	
//	u32 *tmp=(u32*)DMA_ADDR;
	u8 *tmp=(u8*)0x80000E0c; 
	
for(i=0;i<(320*240);i++)
	*tmp=0xf0f0f0f0;	
		
}

void v_start()
{
	int i;
	lcd_enable();
	while(1)
	{
		lcd_paint(0);
		for (i=0;i<100;i++);
	}
}














⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -