📄 s60753.c
字号:
/****************************************************************************
*
* Copyrigth(C), 2002-2005,Sanxing Tech,Co.,Ltd.
* Filename: s60753.c
* Version: V1.0
* Description: LCD module s60753 driver implement.
*
modification history
---------------------
* $Log: s60753.c,v $
* Revision 1.1 2008/06/22 08:26:17 lmZou
* 增加F16R16的bsp
*
* Revision 1.9 2008/06/19 06:32:13 lmZou
* 增加获取bmp图片信息
*
* Revision 1.8 2008/04/19 11:43:31 zlm
* 整理对比度默认值
*
* Revision 1.7 2008/04/19 02:51:43 zlm
* 调整lcd对比度默认值
*
* Revision 1.6 2008/03/18 08:28:18 zlm
* lcd初始化在boot阶段需要适当延时!在应用阶段可不需要延时!
* 调整lcd对比度设置接口,默认对比度为15
* 终端启动后点亮背光!
*
* Revision 1.5 2008/03/16 12:06:03 zlm
* 调整lcd的对比度接口
*
* Revision 1.4 2008/03/15 07:34:45 zlm
* boot调试通过!boot启动阶段lcd显示错乱!待调
*
*
*******************************************************************************/
/*------------------------------------------------------------------------------
Section: Includes
------------------------------------------------------------------------------*/
#include "s60753.h"
#include "drv/multi/ppc860Siu.h"
void s60753_Cross(uchar a, uchar b);
void s60753_Logo(void);
static int s60753_refreshArea(int xstart,int ystart,int width,int height);
/*------------------------------------------------------------------------------
Section: Macro Definitions
------------------------------------------------------------------------------*/
#ifdef PRJ_BUILD
#define CMD_DELAY_TIME 0
#else
#define CMD_DELAY_TIME 5
#endif/* # PRJ_BUILD */
#define DLY_CPU_CYCLE(x) \
{ \
int i; \
for (i = 0; i < x; i++); \
}
/* EL/BACKLIGHT port = CS6--D7--LCD_AK */
#define LCD_EL_ON() outputcs6pn(8,1)
#define LCD_EL_OFF() outputcs6pn(8,0)
/* RST Port = CS6--D6--LCD_RST */
#define LCD_RESET_ON() outputcs6pn(9,1)
#define LCD_RESET_OFF() outputcs6pn(9,0)
#define LCD_A0 24
#define A0_BASE_ADRS (1 << (31 - LCD_A0))
/* boot启动阶段需要延时,否则显示错乱,应用启动后不需要延时可正常显示 */
#define LCD_DATA_OUT(data) \
do { \
(*(volatile unsigned char *)(CS5_BASE_ADRS + A0_BASE_ADRS)) = data; \
DLY_CPU_CYCLE(5); \
}while(0)
#define LCD_CMD_OUT(data) \
do { \
(*(volatile unsigned char *)CS5_BASE_ADRS) = data; \
DLY_CPU_CYCLE(5); \
}while(0)
/* S60753 cmd */
#define LCD_EXT_DISABLE 0x30 /*Extension instruction disable*/
#define LCD_EXT_ENABLE 0x31 /*Extension instruction enable*/
#define LCD_SLEEP_IN 0x95
#define LCD_SLEEP_OUT 0x94
#define LCD_INTERNAL_OSC_ON 0xD1
#define LCD_POWER_CTRL 0x20
#define LCD_EC_CTRL 0x81
#define LCD_VOL_UP 0xD6
#define LCD_VOL_DOWN 0xD7
#define LCD_DISP_CTRL 0xCA
#define LCD_INVERSE_DISP 0xA7
#define LCD_COM_SCAN_DIR 0xBB
#define LCD_DATA_SCAN_DIR 0xBC
#define LCD_LINE_ADDR_SET 0x75
#define LCD_COLUMN_ADDR_SET 0x15
#define LCD_ANALOG_CIRCUIT_SET 0x32
#define LCD_SOFTWARE_INIT 0x34
#define LCD_DISP_ON 0xAF
#define LCD_DISP_OFF 0xAE
#define LCD_WRITE_DATA 0x5C
/*------------------------------------------------------------------------------
Section: Type Definitions
------------------------------------------------------------------------------*/
/* NONE */
/*------------------------------------------------------------------------------
Section: Globe Variable
------------------------------------------------------------------------------*/
static uchar layer0[MEM_SIZE];/* 虚拟显存0层 */
static uchar layer1[MEM_SIZE];/* 虚拟显存1层 */
static uchar* currentLayer = layer1;/* 当前层 */
static uchar currentLayerState = 0x11;/* 当前层状态
0x11: two layers are open,
0x01: only layer1 is open,
0x10: only layer2 is open,*/
static uchar compMode = 1;/* 两层之间的组合方式0: OR,1: Exclusive OR, 2: AND*/
static uchar lcd_light_defaule = 30;/* 默认lcd对比度 */
static int s_iLcdContrast = 30; /* LCD对比度镜像值 */
static uchar LCDLogo1[96*12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xFF, 0xFE, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x1F, 0xFF, 0xF0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xF8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFC, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x3F, 0xFF, 0xFE, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF9, 0x9F, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0xFF, 0xF9, 0xFB, 0xDF, 0x9F, 0xFF, 0x80, 0x00, 0x00,
0x00, 0x00, 0x01, 0xFF, 0xF9, 0xFF, 0xFF, 0x9F, 0xFF, 0x80, 0x00, 0x00,
0x00, 0x00, 0x03, 0xFF, 0xE0, 0x7F, 0xFE, 0x07, 0xFF, 0xC0, 0x00, 0x00,
0x00, 0x00, 0x03, 0xFF, 0xF0, 0xFF, 0xFF, 0x0F, 0xFF, 0xC0, 0x00, 0x00,
0x00, 0x00, 0x07, 0xFF, 0xF9, 0xFF, 0xFF, 0x9F, 0xFF, 0xE0, 0x00, 0x00,
0x00, 0x00, 0x07, 0xFF, 0xF0, 0xFF, 0xFF, 0x0F, 0xFF, 0xE0, 0x00, 0x00,
0x00, 0x00, 0x0F, 0xFF, 0xE6, 0x7F, 0xFE, 0x67, 0xFF, 0xF0, 0x00, 0x00,
0x00, 0x00, 0x0F, 0xFF, 0xEF, 0x7F, 0xFE, 0xF7, 0xFF, 0xF0, 0x00, 0x00,
0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x3F, 0xFF, 0xFB, 0xFE, 0x7F, 0xDF, 0xFF, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x3F, 0xFF, 0xFB, 0xFE, 0x7F, 0xDF, 0xFF, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0xFB, 0xDE, 0x7B, 0xDF, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0xF3, 0xDE, 0x7B, 0xCF, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0xF3, 0xDE, 0x7B, 0xCF, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0xE3, 0xDE, 0x7B, 0xC7, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0xE7, 0xDE, 0x7B, 0xC7, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0xC7, 0xDE, 0x7B, 0xE3, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0x8F, 0x9E, 0x79, 0xE1, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0x0F, 0x9E, 0x79, 0xE0, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x3F, 0xFE, 0x0F, 0x1E, 0x78, 0xF0, 0x7F, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x3F, 0xFE, 0x0F, 0x1E, 0x78, 0xF0, 0x7F, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x3F, 0xF8, 0x1F, 0x1E, 0x78, 0xF8, 0x1F, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x1F, 0xF0, 0x3E, 0x1E, 0x78, 0x78, 0x0F, 0xF8, 0x00, 0x00,
0x00, 0x00, 0x1F, 0xC0, 0x3E, 0x1C, 0x38, 0x7C, 0x03, 0xF8, 0x00, 0x00,
0x00, 0x00, 0x1F, 0x80, 0x7E, 0x3C, 0x3C, 0x7E, 0x01, 0xF8, 0x00, 0x00,
0x00, 0x00, 0x0E, 0x00, 0xFC, 0x3C, 0x3C, 0x3E, 0x00, 0x70, 0x00, 0x00,
0x00, 0x00, 0x0C, 0x00, 0xFC, 0x3C, 0x3C, 0x3F, 0x00, 0x30, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xF8, 0x3C, 0x3C, 0x1F, 0x80, 0x00, 0x3E, 0x00,
0x00, 0x00, 0x00, 0x07, 0xF8, 0x7C, 0x3E, 0x1F, 0xC0, 0x00, 0x41, 0x00,
0x00, 0x00, 0x00, 0x0F, 0xF0, 0x7C, 0x3E, 0x0F, 0xF0, 0x00, 0xBC, 0x80,
0x00, 0x00, 0x00, 0x1F, 0xF0, 0x7C, 0x3E, 0x0F, 0xF8, 0x01, 0x22, 0x40,
0x00, 0x00, 0x00, 0x7F, 0xE0, 0xFC, 0x3F, 0x07, 0xFF, 0x01, 0x22, 0x40,
0x00, 0x00, 0x00, 0xFF, 0xC0, 0xFC, 0x3F, 0x07, 0xFF, 0x01, 0x3C, 0x40,
0x00, 0x00, 0x00, 0xFF, 0xC0, 0xFC, 0x3F, 0x03, 0xFE, 0x01, 0x22, 0x40,
0x00, 0x00, 0x00, 0x7F, 0x81, 0xFC, 0x3F, 0x81, 0xFC, 0x01, 0x22, 0x40,
0x00, 0x00, 0x00, 0x3F, 0x01, 0xFC, 0x3F, 0x81, 0xF8, 0x01, 0x22, 0x40,
0x00, 0x00, 0x00, 0x1E, 0x03, 0xFC, 0x3F, 0xC0, 0xF0, 0x00, 0x80, 0x80,
0x00, 0x00, 0x00, 0x0C, 0x07, 0xFC, 0x3F, 0xE0, 0x60, 0x00, 0x41, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x3F, 0xE0, 0x00, 0x00, 0x3E, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x3F, 0xF8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x3F, 0xF8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18,
0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8,
0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8,
0x00, 0x00, 0x7F, 0xC3, 0x0C, 0x36, 0x06, 0xD8, 0x67, 0xF8, 0x03, 0x80,
0x1F, 0xFC, 0xFF, 0xC7, 0x8E, 0x37, 0x0E, 0xDC, 0x6F, 0xFC, 0x63, 0x80,
0x1F, 0xFC, 0xC0, 0x4F, 0x8F, 0x33, 0x9C, 0xDE, 0x6C, 0x0C, 0xFF, 0xFC,
0x00, 0x00, 0xC0, 0x0C, 0xCF, 0xB1, 0xF8, 0xDF, 0x6C, 0x00, 0xFF, 0xFC,
0x00, 0x00, 0xFF, 0x8C, 0xCF, 0xF0, 0xF0, 0xDF, 0xEC, 0x7C, 0xC3, 0x80,
0x00, 0x00, 0x7F, 0xD8, 0x6D, 0xF0, 0xF0, 0xDB, 0xEC, 0x7C, 0x3F, 0xF8,
0x00, 0x00, 0x00, 0xD8, 0x6C, 0xF1, 0xF8, 0xD9, 0xEC, 0x1C, 0x3F, 0xF8,
0x00, 0x00, 0x80, 0xDF, 0xEC, 0x73, 0x9C, 0xD8, 0xEC, 0x1C, 0x03, 0x80,
0x3F, 0xFE, 0xFF, 0xDF, 0xEC, 0x37, 0x0E, 0xD8, 0x6F, 0xFC, 0x7F, 0xFC,
0x3F, 0xFE, 0xFF, 0xD8, 0x6C, 0x36, 0x06, 0xD8, 0x67, 0xEC, 0x7F, 0xFC,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
/*------------------------------------------------------------------------------
Section: Local Function Prototypes
------------------------------------------------------------------------------*/
static void __LCDPowerOn(void);
static void __LCDInit(void);
static void __LCDReset(void);
static void __LCDCommand( uchar cmd);
static void __LCDParam( uchar data);
/*------------------------------------------------------------------------------
Section: Function Definitions
------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------
Section: Local Function Definitions
------------------------------------------------------------------------------*/
static void __LCDPowerOn(void)
{
LCD_RESET_ON();
udelay(1000);
LCD_RESET_OFF();
udelay(1000);
LCD_RESET_ON();
udelay(1000);
}
static void __LCDInit(void)
{
/* 清除显存内容,使之为空白 */
memset(layer0, 0, MEM_SIZE);
memset(layer1, 0, MEM_SIZE);
__LCDCommand(LCD_EXT_DISABLE);
__LCDCommand(LCD_SLEEP_OUT);
__LCDCommand(LCD_INTERNAL_OSC_ON);
__LCDCommand(LCD_POWER_CTRL);
__LCDParam(0x08); /* Booster must be on first */
udelay(100);
__LCDCommand(LCD_POWER_CTRL);
__LCDParam(0x0B); /* Booster regulator, Follower on */
udelay(100);
__LCDCommand(LCD_EC_CTRL);
__LCDParam(0x36); /* Vop = 16V 00xxxxxx*/
__LCDParam(0x04); /* Vop = 16V 00000xxx*/
__LCDCommand(LCD_DISP_CTRL);
__LCDParam(0);
__LCDParam(0x27); /* Numbers of display lines (N / 4 -1)*/
__LCDParam(0);
__LCDCommand(LCD_INVERSE_DISP);
__LCDCommand(LCD_COM_SCAN_DIR);
__LCDParam(0x02);
__LCDCommand(LCD_DATA_SCAN_DIR);
__LCDParam(0x02);
__LCDParam(0x01);
__LCDParam(0x02);
__LCDCommand(LCD_LINE_ADDR_SET);
__LCDParam(0x00);
__LCDParam(0x9F);
__LCDCommand(LCD_COLUMN_ADDR_SET);
__LCDParam(0x10);
__LCDParam(0x45);
__LCDCommand(LCD_EXT_ENABLE);
__LCDCommand(LCD_ANALOG_CIRCUIT_SET);
__LCDParam(0x00);
__LCDParam(0x00);
__LCDParam(0x01);
__LCDCommand(LCD_EXT_ENABLE);
__LCDCommand(LCD_SOFTWARE_INIT);
#if 0
/* Read EEPROM */
__LCDCommand(0x30);
__LCDCommand(0x07);
__LCDParam(0x19);
__LCDCommand(0x31);
__LCDCommand(0xCD);
__LCDParam(0x00);
taskDelay(240);
__LCDCommand(0xFD);
taskDelay(240);
__LCDCommand(0xCC);
__LCDCommand(0x30);
/* Read complete */
#endif
udelay(200);
__LCDCommand(LCD_EXT_DISABLE);
__LCDCommand(LCD_DISP_ON);
}
/*-----------复位LCD模块-------*/
static void __LCDReset(void)
{
LCD_RESET_ON();
udelay(1000);
LCD_RESET_OFF();
udelay(5000);
LCD_RESET_ON();
}
/*----------- 写LCD控制命令 ----------*/
static void __LCDCommand( uchar cmd)
{
LCD_CMD_OUT(cmd);
}
/*----------- 写LCD控制参数 ----------*/
static void __LCDParam( uchar data)
{
LCD_DATA_OUT(data);
}
/*------------------------------------------------------------------------------
Section: Unit Test
------------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -