summaryrefslogtreecommitdiff
path: root/bsp/mb9bf500r/lcd.h
blob: 8c0462d6e3ba5946746341f4b861c51f617f7cd4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
/*
 * File      : lcd.h
 * This file is part of RT-Thread RTOS
 * COPYRIGHT (C) 2006, RT-Thread Develop Team
 *
 * The license and distribution terms for this file may be
 * found in the file LICENSE in this distribution or at
 * http://www.rt-thread.org/license/LICENSE
 *
 * Change Logs:
 * Date           Author       Notes
 * 2008-03-29     Yi.Qiu
 * 2011-06-13     lgnq         modified for FM3 easy kit
 */
#ifndef __LCD_H__
#define __LCD_H__

#include <rtthread.h>
#include "mb9bf506r.h"

/********* LCD Hardward Interface *************
LCD_CS		PORT1.7
LCD_CD		PORT1.6
LCD_WR		PORT1.5
LCD_RD		PORT1.4
LCD_SCK		PORT1.3
LCD_MOSI	PORT1.2
LCD_C86		PORT1.1
LCD_PS		PORT1.0
LCD_DATA[0..7]		PORT5.[0..7]
***********************************************/
#define LCD_CS					(1UL << 7)
#define LCD_CS_DDR				(FM3_GPIO->DDR1)
#define LCD_CS_PFR				(FM3_GPIO->PFR1)
#define LCD_CS_PDOR				(FM3_GPIO->PDOR1)

#define LCD_CD					(1UL << 6)
#define LCD_CD_DDR				(FM3_GPIO->DDR1)
#define LCD_CD_PFR				(FM3_GPIO->PFR1)
#define LCD_CD_PDOR				(FM3_GPIO->PDOR1)

#define LCD_PS					(1UL << 0)
#define LCD_PS_DDR				(FM3_GPIO->DDR1)
#define LCD_PS_PFR				(FM3_GPIO->PFR1)
#define LCD_PS_PDOR				(FM3_GPIO->PDOR1)

#define LCD_CLK					(1UL << 6)
#define LCD_CLK_DDR				(FM3_GPIO->DDR5)
#define LCD_CLK_PFR				(FM3_GPIO->PFR5)
#define LCD_CLK_PDOR			(FM3_GPIO->PDOR5)

#define LCD_DATA				(1UL << 7)
#define LCD_DATA_DDR			(FM3_GPIO->DDR5)
#define LCD_DATA_PFR			(FM3_GPIO->PFR5)
#define LCD_DATA_PDOR			(FM3_GPIO->PDOR5)

/* LCD driver for ZYMG12864C3 */
#define LCD_WIDTH				128
#define LCD_HEIGHT				64

// Driver the LCD with Parallel or serial interface and the command/data control pin is gpio
#define LCD_CS_HIGH()			LCD_CS_PDOR  |=  LCD_CS
#define LCD_CS_LOW()			LCD_CS_PDOR  &= ~LCD_CS

#define LCD_CD_HIGH()			LCD_CD_PDOR |=  LCD_CD
#define LCD_CD_LOW()			LCD_CD_PDOR &= ~LCD_CD

#define LCD_PS_HIGH()			LCD_PS_PDOR |=  LCD_PS
#define LCD_PS_LOW()			LCD_PS_PDOR &= ~LCD_PS

#define LCD_CLK_HIGH()			LCD_CLK_PDOR |=  LCD_CLK
#define LCD_CLK_LOW()			LCD_CLK_PDOR &= ~LCD_CLK

#define LCD_DATA_HIGH()			LCD_DATA_PDOR |=  LCD_DATA
#define LCD_DATA_LOW()			LCD_DATA_PDOR &= ~LCD_DATA

// define the arrtibute of ZYMG12864(LCM)
#define GUI_LCM_XMAX 			128		// defined the lcd's line-number is 128 
#define GUI_LCM_YMAX 			64		// defined the lcd's column-number is 64
#define GUI_LCM_PAGE			8		// defined the lcd's page-number is 8(GUI_LCM_YMAX/8)

/* set LCD command */
#define DISPLAY_ON				0xAF	// A0,RD,WR:010
#define DISPLAY_OFF				0xAE	// A0,RD,WR:010

#define SET_START_LINE_0		0x40	// A0,RD,WR:010; line0~line63
#define SET_PAGE_ADDR_0			0xB0	// A0,RD,WR:010; addr0~addr8
#define SET_COLH_ADDR_0			0x10	// A0,RD,WR:010; 
#define SET_COLL_ADDR_0			0x00	// A0,RD,WR:010; addr0~addr131

#define READ_STATUS				0x-0	// A0,RD,WR:001; BUSY | ADC | ON/OFF |  RESET | 0 0 0 0
#define STATUS_BUSY				0x80
#define STATUS_ADC_REVERSE		0x40	// column address 131-n : SEG n, else column address n : SEG n
#define STATUS_DISPLAY_OFF		0x20
#define STATUS_RESET			0x80

#define WRITE_DATA				0x--	// A0,RD,WR:110
#define READ_DATE				0x--	// A0,RD,WR:101; spi mode is unavailable

#define SET_ADC_NORMAL			0xA0	// A0,RD,WR:010
#define SET_ADC_REVERSE			0xA1	// A0,RD,WR:010
#define DISPLAY_NORMAL			0xA6	// A0,RD,WR:010
#define DISPLAY_REVERSE			0xA7	// A0,RD,WR:010; reverse color
#define DISPLAY_ALL_ON			0xA5	// A0,RD,WR:010
#define DISPLAY_ALL_NORMAL		0xA4	// A0,RD,WR:010

/*************************************************************
*	bias:	1/65duty | 1/49duty | 1/33duty | 1/55duty | 1/53duty *
*	---------------|----------|----------|----------|--------- *
*	A2: 	1/9 bias | 1/8 bias | 1/6 bias | 1/8 bias | 1/8 bias *
*	A3:		1/7 bias | 1/6 bias | 1/5 bias | 1/6 bias | 1/6 bias *
**************************************************************/

#define SET_LCD_BIAS_7    		0xA3	// A0,RD,WR:010
#define SET_LCD_BIAS_9    		0xA2	// A0,RD,WR:010

#define RMW_MODE_ENABLE   		0xE0	// A0,RD,WR:010; the column address locked when read command operating
#define RMW_MODE_END		  	0xEE	// A0,RD,WR:010; returns to the column address when RMW was entered.
#define RESET_LCD         		0xE2	// A0,RD,WR:010


/**************************************************************************************
*	Com Scan Dir:	|	1/65duty 		| 1/49duty 		| 1/33duty 		| 1/55duty 		| 1/53duty		*
*	--------------|-------------|-------------|-------------|------------------------ 	*
*	C0: 	Normal	|	COM0:COM63	|	COM0:COM47	|	COM0:COM31	|	COM0:COM53	|	COM0:COM51	*
*	C8:		Reverse	|	COM63:COM0	|	COM47:COM0	|	COM31:COM0	|	COM53:COM0	|	COM51:COM0	*
***************************************************************************************/

#define COM_SCAN_DIR_NORMAL		0xC0	// A0,RD,WR:010
#define COM_SCAN_DIR_REVERSE	0xC8	// A0,RD,WR:010

// 0 0 1 0 1 | Booster On | Regulator On | Follower On
#define POWER_BOOSTER_ON		0x2C	// A0,RD,WR:010
#define POWER_REGULATOR_ON		0x2E	// A0,RD,WR:010
#define POWER_FOLLOWER_ON		0x2F	// A0,RD,WR:010

#define SET_RESISTOR_RATIO		0x20	// A0,RD,WR:010; 20~27:small~large

#define SET_ELECVOL_MODE		0x81	// A0,RD,WR:010; double byte command
#define SET_ELECVOL_REG			0x20	// A0,RD,WR:010; the electronic volume(64 voltage levels:00~3F) function is not used.

#define SLEEP_MODE_ENABLE		0xAC	// A0,RD,WR:010; double byte command, preceding command
#define SLEEP_MODE_DISABLE		0xAD	// A0,RD,WR:010; preceding command
#define SLEEP_MODE_DELIVER		0x00	// A0,RD,WR:010; following command

#define BOOST_RATIO_SET			0xF8	// A0,RD,WR:010; double byte command, preceding command
#define BOOST_RATIO_234			0x00	// A0,RD,WR:010; following command
#define BOOST_RATIO_5			0x01	// A0,RD,WR:010; following command
#define BOOST_RATIO_6			0x03	// A0,RD,WR:010; following command

#define COMMAND_NOP				0xE3	// A0,RD,WR:010
#define COMMAND_IC_TEST			0xFC	// A0,RD,WR:010; don't use

#define RT_DEVICE_CTRL_LCD_GET_WIDTH			0
#define RT_DEVICE_CTRL_LCD_GET_HEIGHT			1
#define RT_DEVICE_CTRL_LCD_GET_BPP			 	2
#define RT_DEVICE_CTRL_LCD_GET_FRAMEBUFFER		3
#define RT_DEVICE_CTRL_LCD_POWER_ON     		4
#define RT_DEVICE_CTRL_LCD_POWER_OFF     		5
#define RT_DEVICE_CTRL_LCD_CLEAR_SCR     		6
#define RT_DEVICE_CTRL_LCD_FILL_ALL     		7
#define RT_DEVICE_CTRL_LCD_UPDATE_POINT    		8
#define RT_DEVICE_CTRL_LCD_DISPLAY_ON    		9
#define RT_DEVICE_CTRL_LCD_DISPLAY_OFF    		10
#define RT_DEVICE_CTRL_LCD_PUT_STRING    		11

enum 
{
	ADC_MSG,
	KEY_MSG,
	CPU_MSG,
	MAX_MSG,
};

struct lcd_msg
{
	rt_uint8_t	type;
	rt_uint16_t	adc_value;
	rt_uint8_t	key;
	rt_uint16_t	major;
	rt_uint16_t	minor;
};

extern rt_uint32_t x;
extern rt_uint32_t y;

void rt_hw_lcd_init(void);

#endif