Mercurial > public > ostc4
annotate Discovery/Src/display.c @ 661:87bee7cc77b3
Undo Rev. 660
author | heinrichs weikamp |
---|---|
date | Mon, 01 Nov 2021 12:39:34 +0100 |
parents | 5ca177d2df5d |
children | f7318457df4d |
rev | line source |
---|---|
38 | 1 |
2 #include "stm32f4xx_hal.h" /* for HAL_Delay() */ | |
3 #include "ostc.h" | |
4 #include "display.h" | |
5 | |
6 #define ENABLE_EXTENDED_COMMANDS 0xB9 | |
7 #define SET_POWER 0xB1 | |
8 #define SLEEP_OUT 0x11 | |
9 #define DISPLAY_INVERSION_OFF 0x20 | |
10 #define MEMORY_ACCESS_ONTROL 0x36 | |
11 #define INTERFACE_PIXEL_FORMAT 0x3A | |
12 #define SET_RGB_INTERFACE_RELATED 0xB3 | |
13 #define SET_DISPLAY_WAVEFORM 0xB4 | |
14 #define SET_PANEL 0xCC | |
15 #define SET_GAMMA_CURVE_RELATED 0xE0 | |
16 #define DISPLAY_ON 0x29 | |
17 #define DISPLAY_OFF 0x28 | |
18 #define SLEEP_IN 0x10 | |
19 | |
20 | |
21 static void Display_Error_Handler(void); | |
22 | |
23 void display_power_on__1_of_2__pre_RGB(void) | |
24 { | |
25 /* reset system */ | |
26 HAL_GPIO_WritePin(DISPLAY_CSB_GPIO_PORT,DISPLAY_CSB_PIN,GPIO_PIN_SET); // chip select | |
27 | |
28 HAL_GPIO_WritePin(DISPLAY_RESETB_GPIO_PORT,DISPLAY_RESETB_PIN,GPIO_PIN_RESET); | |
29 HAL_Delay(10); | |
30 HAL_GPIO_WritePin(DISPLAY_RESETB_GPIO_PORT,DISPLAY_RESETB_PIN,GPIO_PIN_SET); | |
31 HAL_Delay(10); | |
32 | |
33 /* RGB signals should be now for 2 frames or more (datasheet) */ | |
34 } | |
35 | |
36 | |
300
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
38
diff
changeset
|
37 static void send(uint8_t *pData, uint16_t inputlength) |
38 | 38 { |
39 HAL_GPIO_WritePin(DISPLAY_CSB_GPIO_PORT,DISPLAY_CSB_PIN,GPIO_PIN_RESET); // chip select | |
40 | |
41 if(HAL_SPI_Transmit(&hspiDisplay,(uint8_t*)pData, inputlength, 10000) != HAL_OK) | |
42 Display_Error_Handler(); | |
43 | |
44 while (HAL_SPI_GetState(&hspiDisplay) != HAL_SPI_STATE_READY) | |
45 { | |
46 } | |
47 HAL_GPIO_WritePin(DISPLAY_CSB_GPIO_PORT,DISPLAY_CSB_PIN,GPIO_PIN_SET); // chip select | |
48 } | |
49 | |
50 | |
300
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
38
diff
changeset
|
51 static uint16_t convert8to9to8(uint8_t *pInput, uint8_t *pOutput,uint16_t inputlength) |
38 | 52 { |
53 uint16_t outputlength; | |
54 uint8_t readbit = 0x80;//0b1000000; | |
55 uint8_t writebit = 0x40;//0b0100000; | |
56 uint16_t i,j,k; | |
57 | |
58 outputlength = ((inputlength+7)/8)*9; | |
59 | |
60 for(i=0;i<outputlength;i++) | |
61 pOutput[i] = 0; | |
62 | |
63 k = 0; | |
64 for(i=0;i<inputlength;i++) | |
65 { | |
66 if(i != 0) | |
67 { | |
68 pOutput[k] |= writebit; // 9. bit | |
69 writebit = writebit >> 1; | |
70 if(writebit == 0) | |
71 { | |
72 writebit = 0x80; | |
73 k++; | |
74 } | |
75 } | |
76 for(j=0;j<8;j++) | |
77 { | |
78 if((pInput[i] & readbit) != 0) | |
79 { | |
80 pOutput[k] |= writebit; | |
81 } | |
82 readbit = readbit >> 1; | |
83 if(readbit == 0) | |
84 readbit = 0x80; | |
85 writebit = writebit >> 1; | |
86 if(writebit == 0) | |
87 { | |
88 writebit = 0x80; | |
89 k++; | |
90 } | |
91 } | |
92 } | |
93 return outputlength; | |
94 } | |
95 | |
96 void display_power_on__2_of_2__post_RGB(void) | |
97 { | |
98 uint8_t aTxBuffer[32]; | |
99 uint8_t bTxBuffer[36]; | |
100 uint16_t i,length; | |
101 | |
102 for(i=0;i<32;i++) | |
103 aTxBuffer[i] = 0; | |
104 for(i=0;i<36;i++) | |
105 bTxBuffer[i] = 0; | |
106 | |
107 aTxBuffer[0] = ENABLE_EXTENDED_COMMANDS; | |
108 aTxBuffer[1] = 0xFF; | |
109 aTxBuffer[2] = 0x83; | |
110 aTxBuffer[3] = 0x63; | |
111 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,4); | |
112 send((uint8_t*)bTxBuffer, length); | |
113 | |
114 aTxBuffer[0] = SET_POWER; | |
115 aTxBuffer[1] = 0x81; | |
116 aTxBuffer[2] = 0x24; | |
117 aTxBuffer[3] = 0x04; | |
118 aTxBuffer[4] = 0x02; | |
119 aTxBuffer[5] = 0x02; | |
120 aTxBuffer[6] = 0x03; | |
121 aTxBuffer[7] = 0x10; | |
122 aTxBuffer[8] = 0x10; | |
123 aTxBuffer[9] = 0x34; | |
124 aTxBuffer[10] = 0x3C; | |
125 aTxBuffer[11] = 0x3F; | |
126 aTxBuffer[12] = 0x3F; | |
127 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,13); | |
128 send((uint8_t*)bTxBuffer, length); | |
129 | |
130 aTxBuffer[0] = SLEEP_OUT; | |
131 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,1); | |
132 send((uint8_t*)bTxBuffer, length); | |
133 HAL_Delay(5+1); | |
134 | |
135 aTxBuffer[0] = DISPLAY_INVERSION_OFF; | |
136 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,1); | |
137 send((uint8_t*)bTxBuffer, length); | |
138 | |
139 aTxBuffer[0] = MEMORY_ACCESS_ONTROL; | |
140 aTxBuffer[1] = 0x00; | |
141 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,2); | |
142 send((uint8_t*)bTxBuffer, length); | |
143 | |
144 aTxBuffer[0] = INTERFACE_PIXEL_FORMAT; | |
145 aTxBuffer[1] = 0x70; | |
146 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,2); | |
147 send((uint8_t*)bTxBuffer, length); | |
148 HAL_Delay(120+20); | |
149 | |
150 aTxBuffer[0] = SET_POWER; | |
151 aTxBuffer[1] = 0x78; | |
152 aTxBuffer[2] = 0x24; | |
153 aTxBuffer[3] = 0x04, | |
154 aTxBuffer[4] = 0x02; | |
155 aTxBuffer[5] = 0x02; | |
156 aTxBuffer[6] = 0x03; | |
157 aTxBuffer[7] = 0x10; | |
158 aTxBuffer[8] = 0x10; | |
159 aTxBuffer[9] = 0x34; | |
160 aTxBuffer[10] = 0x3C; | |
161 aTxBuffer[11] = 0x3F; | |
162 aTxBuffer[12] = 0x3F; | |
163 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,13); | |
164 send((uint8_t*)bTxBuffer, length); | |
165 | |
166 aTxBuffer[0] = SET_RGB_INTERFACE_RELATED; | |
167 aTxBuffer[1] = 0x01; | |
168 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,2); | |
169 send((uint8_t*)bTxBuffer, length); | |
170 | |
171 aTxBuffer[0] = SET_DISPLAY_WAVEFORM; | |
172 aTxBuffer[1] = 0x00; | |
173 aTxBuffer[2] = 0x08; | |
174 aTxBuffer[3] = 0x56; | |
175 aTxBuffer[4] = 0x07; | |
176 aTxBuffer[5] = 0x01; | |
177 aTxBuffer[6] = 0x01; | |
178 aTxBuffer[7] = 0x4D; | |
179 aTxBuffer[8] = 0x01; | |
180 aTxBuffer[9] = 0x42; | |
181 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,10); | |
182 send((uint8_t*)bTxBuffer, length); | |
183 | |
184 aTxBuffer[0] = SET_PANEL; | |
185 aTxBuffer[1] = 0x0B; | |
186 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,2); | |
187 send((uint8_t*)bTxBuffer, length); | |
188 | |
189 aTxBuffer[0] = SET_GAMMA_CURVE_RELATED; | |
190 aTxBuffer[1] = 0x01; | |
191 aTxBuffer[2] = 0x48; | |
192 aTxBuffer[3] = 0x4D; | |
193 aTxBuffer[4] = 0x4E; | |
194 aTxBuffer[5] = 0x58; | |
195 aTxBuffer[6] = 0xF6; | |
196 aTxBuffer[7] = 0x0B; | |
197 aTxBuffer[8] = 0x4E; | |
198 aTxBuffer[9] = 0x12; | |
199 aTxBuffer[10] = 0xD5; | |
200 aTxBuffer[11] = 0x15; | |
201 aTxBuffer[12] = 0x95; | |
202 aTxBuffer[13] = 0x55; | |
203 aTxBuffer[14] = 0x8E; | |
204 aTxBuffer[15] = 0x11; | |
205 aTxBuffer[16] = 0x01; | |
206 aTxBuffer[17] = 0x48; | |
207 aTxBuffer[18] = 0x4D; | |
208 aTxBuffer[19] = 0x55; | |
209 aTxBuffer[20] = 0x5F; | |
210 aTxBuffer[21] = 0xFD; | |
211 aTxBuffer[22] = 0x0A; | |
212 aTxBuffer[23] = 0x4E; | |
213 aTxBuffer[24] = 0x51; | |
214 aTxBuffer[25] = 0xD3; | |
215 aTxBuffer[26] = 0x17; | |
216 aTxBuffer[27] = 0x95; | |
217 aTxBuffer[28] = 0x96; | |
218 aTxBuffer[29] = 0x4E; | |
219 aTxBuffer[30] = 0x11; | |
220 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,31); | |
221 send((uint8_t*)bTxBuffer, length); | |
222 HAL_Delay(5+1); | |
223 | |
224 aTxBuffer[0] = DISPLAY_ON; | |
225 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,1); | |
226 send((uint8_t*)bTxBuffer, length); | |
227 } | |
228 | |
229 | |
230 static void Display_Error_Handler(void) | |
231 { | |
232 while(1) | |
233 { | |
234 } | |
235 } |