summaryrefslogtreecommitdiff
path: root/bsp/fujitsu/mb9x/mb9bf500r/lcd.h
blob: e0fa9efdc388bfecc3792749709fcdc782a0fdc2 (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
/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * 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