NXP
/
rt1050_emwin_gui_demo
RT1050 GUI demo using emWin library
Embed:
(wiki syntax)
Show/hide line numbers
GUIDRV_Lin_Opt_24.h
00001 /********************************************************************* 00002 * SEGGER Microcontroller GmbH & Co. KG * 00003 * Solutions for real time microcontroller applications * 00004 ********************************************************************** 00005 * * 00006 * (c) 1996 - 2016 SEGGER Microcontroller GmbH & Co. KG * 00007 * * 00008 * Internet: www.segger.com Support: support@segger.com * 00009 * * 00010 ********************************************************************** 00011 00012 ** emWin V5.38 - Graphical user interface for embedded applications ** 00013 All Intellectual Property rights in the Software belongs to SEGGER. 00014 emWin is protected by international copyright laws. Knowledge of the 00015 source code may not be used to write a similar product. This file may 00016 only be used in accordance with the following terms: 00017 00018 The software has been licensed to NXP Semiconductors USA, Inc. whose 00019 registered office is situated at 411 E. Plumeria Drive, San Jose, 00020 CA 95134, USA solely for the purposes of creating libraries for 00021 NXPs M0, M3/M4 and ARM7/9 processor-based devices, sublicensed and 00022 distributed under the terms and conditions of the NXP End User License 00023 Agreement. 00024 Full source code is available at: www.segger.com 00025 00026 We appreciate your understanding and fairness. 00027 ---------------------------------------------------------------------- 00028 Licensing information 00029 00030 Licensor: SEGGER Microcontroller Systems LLC 00031 Licensed to: NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA 00032 Licensed SEGGER software: emWin 00033 License number: GUI-00186 00034 License model: emWin License Agreement, dated August 20th 2011 00035 Licensed product: - 00036 Licensed platform: NXP's ARM 7/9, Cortex-M0,M3,M4 00037 Licensed number of seats: - 00038 ---------------------------------------------------------------------- 00039 File : GUIDRV_Lin_Opt_24.h 00040 Purpose : Optimized routines, included by GUIDRV_Lin_..._24.c 00041 ---------------------------END-OF-HEADER------------------------------ 00042 */ 00043 00044 /********************************************************************* 00045 * 00046 * Static functions 00047 * 00048 ********************************************************************** 00049 */ 00050 /********************************************************************* 00051 * 00052 * _FillRectOpt24 00053 * 00054 * Purpose: 00055 * Optimized filling routine for 24 bpp 00056 */ 00057 static void _FillRectOpt24(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) { 00058 DRIVER_CONTEXT * pContext; 00059 U32 Off, Off0, OffLine; 00060 int RemPixels, NumLines, RemLines, RemItems, Odd; 00061 U32 Data, Data0, Data1, Data2; 00062 LCD_PIXELINDEX ColorIndex; 00063 00064 pContext = (DRIVER_CONTEXT *)pDevice->u.pContext; 00065 Off0 = XY2OFF32(pContext->vxSizePhys, x0, y0); 00066 RemPixels = x1 - x0 + 1; 00067 Odd = x0 & 3; 00068 NumLines = y1 - y0 + 1; 00069 OffLine = (pContext->vxSizePhys + pContext->vxSizePhys +pContext->vxSizePhys) >> 2; 00070 RemItems = 0; 00071 Off = 0; 00072 #if (LCD_ENDIAN_BIG == 0) 00073 if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR) { 00074 // 00075 // First triple DWORD 00076 // 00077 if (Odd) { 00078 for (RemLines = NumLines; RemLines; RemLines--) { 00079 RemItems = RemPixels; 00080 Off = Off0 + OffLine * (RemLines - 1); 00081 Data = READ_MEM32(pContext->VRAMAddr, Off); 00082 switch (Odd) { 00083 case 1: 00084 Data ^= 0xFF000000; 00085 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00086 Off++; 00087 Data = READ_MEM32(pContext->VRAMAddr, Off); 00088 Data ^= 0x0000FFFF; 00089 RemItems--; 00090 if (!RemItems) { 00091 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00092 break; 00093 } 00094 // 00095 // no break at this position required... 00096 // 00097 case 2: 00098 Data ^= 0xFFFF0000; 00099 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00100 Off++; 00101 Data = READ_MEM32(pContext->VRAMAddr, Off); 00102 Data ^= 0x000000FF; 00103 RemItems--; 00104 if (!RemItems) { 00105 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00106 break; 00107 } 00108 // 00109 // no break at this position required... 00110 // 00111 case 3: 00112 Data ^= 0xFFFFFF00; 00113 RemItems--; 00114 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00115 Off++; 00116 } 00117 } 00118 Off0 = Off; 00119 RemPixels -= (RemPixels - RemItems); 00120 } 00121 // 00122 // Complete triple DWORDS 00123 // 00124 if (RemPixels >= 4) { 00125 for (RemLines = NumLines; RemLines; RemLines--) { 00126 RemItems = RemPixels; 00127 Off = Off0 + OffLine * (RemLines - 1); 00128 do { 00129 Data = READ_MEM32(pContext->VRAMAddr, Off + 0); 00130 Data ^= 0xFFFFFFFF; 00131 WRITE_MEM32(pContext->VRAMAddr, Off + 0, Data); 00132 Data = READ_MEM32(pContext->VRAMAddr, Off + 1); 00133 Data ^= 0xFFFFFFFF; 00134 WRITE_MEM32(pContext->VRAMAddr, Off + 1, Data); 00135 Data = READ_MEM32(pContext->VRAMAddr, Off + 2); 00136 Data ^= 0xFFFFFFFF; 00137 WRITE_MEM32(pContext->VRAMAddr, Off + 2, Data); 00138 Off += 3; 00139 } while ((RemItems -= 4) >= 4); 00140 } 00141 Off0 = Off; 00142 RemPixels -= (RemPixels >> 2) << 2; 00143 } 00144 // 00145 // Last triple DWORD 00146 // 00147 if (RemPixels) { 00148 for (RemLines = NumLines; RemLines; RemLines--) { 00149 RemItems = RemPixels; 00150 Off = Off0 + OffLine * (RemLines - 1); 00151 Data = READ_MEM32(pContext->VRAMAddr, Off); 00152 Data ^= 0x00FFFFFF; 00153 RemItems--; 00154 if (!RemItems) { 00155 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00156 continue; 00157 } 00158 Data ^= 0xFF000000; 00159 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00160 Off++; 00161 Data = READ_MEM32(pContext->VRAMAddr, Off); 00162 Data ^= 0x0000FFFF; 00163 RemItems--; 00164 if (!RemItems) { 00165 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00166 continue; 00167 } 00168 Data ^= 0xFFFF0000; 00169 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00170 Off++; 00171 Data = READ_MEM32(pContext->VRAMAddr, Off); 00172 Data ^= 0x000000FF; 00173 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00174 } 00175 } 00176 } else { 00177 ColorIndex = LCD__GetColorIndex() & 0xFFFFFF; 00178 // 00179 // First triple DWORD 00180 // 00181 if (Odd) { 00182 for (RemLines = NumLines; RemLines; RemLines--) { 00183 RemItems = RemPixels; 00184 Off = Off0 + OffLine * (RemLines - 1); 00185 Data = READ_MEM32(pContext->VRAMAddr, Off); 00186 switch (Odd) { 00187 case 1: 00188 Data &= 0x00FFFFFF; 00189 Data |= ColorIndex << 24; 00190 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00191 Off++; 00192 Data = READ_MEM32(pContext->VRAMAddr, Off); 00193 Data &= 0xFFFF0000; 00194 Data |= ColorIndex >> 8; 00195 RemItems--; 00196 if (!RemItems) { 00197 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00198 break; 00199 } 00200 // 00201 // no break at this position required... 00202 // 00203 case 2: 00204 Data &= 0x0000FFFF; 00205 Data |= ColorIndex << 16; 00206 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00207 Off++; 00208 Data = READ_MEM32(pContext->VRAMAddr, Off); 00209 Data &= 0xFFFFFF00; 00210 Data |= ColorIndex >> 16; 00211 RemItems--; 00212 if (!RemItems) { 00213 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00214 break; 00215 } 00216 // 00217 // no break at this position required... 00218 // 00219 case 3: 00220 Data &= 0x000000FF; 00221 Data |= ColorIndex << 8; 00222 RemItems--; 00223 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00224 Off++; 00225 } 00226 } 00227 Off0 = Off; 00228 RemPixels -= (RemPixels - RemItems); 00229 } 00230 // 00231 // Complete triple DWORDS 00232 // 00233 if (RemPixels >= 4) { 00234 for (RemLines = NumLines; RemLines; RemLines--) { 00235 RemItems = RemPixels; 00236 Off = Off0 + OffLine * (RemLines - 1); 00237 Data0 = (ColorIndex ) | (ColorIndex << 24); 00238 Data1 = (ColorIndex >> 8) | (ColorIndex << 16); 00239 Data2 = (ColorIndex >> 16) | (ColorIndex << 8); 00240 do { 00241 WRITE_MEM32(pContext->VRAMAddr, Off + 0, Data0); 00242 WRITE_MEM32(pContext->VRAMAddr, Off + 1, Data1); 00243 WRITE_MEM32(pContext->VRAMAddr, Off + 2, Data2); 00244 Off += 3; 00245 } while ((RemItems -= 4) >= 4); 00246 } 00247 Off0 = Off; 00248 RemPixels -= (RemPixels >> 2) << 2; 00249 } 00250 // 00251 // Last triple DWORD 00252 // 00253 if (RemPixels) { 00254 for (RemLines = NumLines; RemLines; RemLines--) { 00255 RemItems = RemPixels; 00256 Off = Off0 + OffLine * (RemLines - 1); 00257 Data = READ_MEM32(pContext->VRAMAddr, Off); 00258 Data &= 0xFF000000; 00259 Data |= ColorIndex; 00260 RemItems--; 00261 if (!RemItems) { 00262 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00263 continue; 00264 } 00265 Data &= 0x00FFFFFF; 00266 Data |= ColorIndex << 24; 00267 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00268 Off++; 00269 Data = READ_MEM32(pContext->VRAMAddr, Off); 00270 Data &= 0xFFFF0000; 00271 Data |= ColorIndex >> 8; 00272 RemItems--; 00273 if (!RemItems) { 00274 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00275 continue; 00276 } 00277 Data &= 0x0000FFFF; 00278 Data |= ColorIndex << 16; 00279 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00280 Off++; 00281 Data = READ_MEM32(pContext->VRAMAddr, Off); 00282 Data &= 0xFFFFFF00; 00283 Data |= ColorIndex >> 16; 00284 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00285 } 00286 } 00287 } 00288 #else 00289 if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR) { 00290 // 00291 // First triple DWORD 00292 // 00293 if (Odd) { 00294 for (RemLines = NumLines; RemLines; RemLines--) { 00295 RemItems = RemPixels; 00296 Off = Off0 + OffLine * (RemLines - 1); 00297 Data = READ_MEM32(pContext->VRAMAddr, Off); 00298 switch (Odd) { 00299 case 1: 00300 Data ^= 0x000000FF; 00301 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00302 Off++; 00303 Data = READ_MEM32(pContext->VRAMAddr, Off); 00304 Data ^= 0xFFFF0000; 00305 RemItems--; 00306 if (!RemItems) { 00307 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00308 break; 00309 } 00310 // 00311 // no break at this position required... 00312 // 00313 case 2: 00314 Data ^= 0x0000FFFF; 00315 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00316 Off++; 00317 Data = READ_MEM32(pContext->VRAMAddr, Off); 00318 Data ^= 0xFF000000; 00319 RemItems--; 00320 if (!RemItems) { 00321 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00322 break; 00323 } 00324 // 00325 // no break at this position required... 00326 // 00327 case 3: 00328 Data ^= 0x00FFFFFF; 00329 RemItems--; 00330 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00331 Off++; 00332 } 00333 } 00334 Off0 = Off; 00335 RemPixels -= (RemPixels - RemItems); 00336 } 00337 // 00338 // Complete triple DWORDS 00339 // 00340 if (RemPixels >= 4) { 00341 for (RemLines = NumLines; RemLines; RemLines--) { 00342 RemItems = RemPixels; 00343 Off = Off0 + OffLine * (RemLines - 1); 00344 do { 00345 Data = READ_MEM32(pContext->VRAMAddr, Off + 0); 00346 Data ^= 0xFFFFFFFF; 00347 WRITE_MEM32(pContext->VRAMAddr, Off + 0, Data); 00348 Data = READ_MEM32(pContext->VRAMAddr, Off + 1); 00349 Data ^= 0xFFFFFFFF; 00350 WRITE_MEM32(pContext->VRAMAddr, Off + 1, Data); 00351 Data = READ_MEM32(pContext->VRAMAddr, Off + 2); 00352 Data ^= 0xFFFFFFFF; 00353 WRITE_MEM32(pContext->VRAMAddr, Off + 2, Data); 00354 Off += 3; 00355 } while ((RemItems -= 4) >= 4); 00356 } 00357 Off0 = Off; 00358 RemPixels -= (RemPixels >> 2) << 2; 00359 } 00360 // 00361 // Last triple DWORD 00362 // 00363 if (RemPixels) { 00364 for (RemLines = NumLines; RemLines; RemLines--) { 00365 RemItems = RemPixels; 00366 Off = Off0 + OffLine * (RemLines - 1); 00367 00368 Data = READ_MEM32(pContext->VRAMAddr, Off); 00369 Data ^= 0xFFFFFF00; 00370 RemItems--; 00371 if (!RemItems) { 00372 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00373 continue; 00374 } 00375 Data ^= 0x000000FF; 00376 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00377 Off++; 00378 Data = READ_MEM32(pContext->VRAMAddr, Off); 00379 Data ^= 0xFFFF0000; 00380 RemItems--; 00381 if (!RemItems) { 00382 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00383 continue; 00384 } 00385 Data ^= 0x0000FFFF; 00386 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00387 Off++; 00388 Data = READ_MEM32(pContext->VRAMAddr, Off); 00389 Data ^= 0xFF000000; 00390 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00391 } 00392 } 00393 } else { 00394 ColorIndex = LCD__GetColorIndex(); 00395 // 00396 // First triple DWORD 00397 // 00398 if (Odd) { 00399 for (RemLines = NumLines; RemLines; RemLines--) { 00400 RemItems = RemPixels; 00401 Off = Off0 + OffLine * (RemLines - 1); 00402 Data = READ_MEM32(pContext->VRAMAddr, Off); 00403 switch (Odd) { 00404 case 1: 00405 Data &= 0xFFFFFF00; 00406 Data |= ColorIndex >> 16; 00407 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00408 Off++; 00409 Data = READ_MEM32(pContext->VRAMAddr, Off); 00410 Data &= 0x0000FFFF; 00411 Data |= ColorIndex << 16; 00412 RemItems--; 00413 if (!RemItems) { 00414 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00415 break; 00416 } 00417 // 00418 // no break at this position required... 00419 // 00420 case 2: 00421 Data &= 0xFFFF0000; 00422 Data |= ColorIndex >> 8; 00423 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00424 Off++; 00425 Data = READ_MEM32(pContext->VRAMAddr, Off); 00426 Data &= 0x00FFFFFF; 00427 Data |= ColorIndex << 24; 00428 RemItems--; 00429 if (!RemItems) { 00430 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00431 break; 00432 } 00433 // 00434 // no break at this position required... 00435 // 00436 case 3: 00437 Data &= 0xFF000000; 00438 Data |= ColorIndex; 00439 RemItems--; 00440 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00441 Off++; 00442 } 00443 } 00444 Off0 = Off; 00445 RemPixels -= (RemPixels - RemItems); 00446 } 00447 // 00448 // Complete triple DWORDS 00449 // 00450 if (RemPixels >= 4) { 00451 for (RemLines = NumLines; RemLines; RemLines--) { 00452 RemItems = RemPixels; 00453 Off = Off0 + OffLine * (RemLines - 1); 00454 Data0 = (ColorIndex << 8) | (ColorIndex >> 16); 00455 Data1 = (ColorIndex << 16) | (ColorIndex >> 8); 00456 Data2 = (ColorIndex << 24) | (ColorIndex ); 00457 do { 00458 WRITE_MEM32(pContext->VRAMAddr, Off + 0, Data0); 00459 WRITE_MEM32(pContext->VRAMAddr, Off + 1, Data1); 00460 WRITE_MEM32(pContext->VRAMAddr, Off + 2, Data2); 00461 Off += 3; 00462 } while ((RemItems -= 4) >= 4); 00463 } 00464 Off0 = Off; 00465 RemPixels -= (RemPixels >> 2) << 2; 00466 } 00467 // 00468 // Last triple DWORD 00469 // 00470 if (RemPixels) { 00471 for (RemLines = NumLines; RemLines; RemLines--) { 00472 RemItems = RemPixels; 00473 Off = Off0 + OffLine * (RemLines - 1); 00474 00475 Data = READ_MEM32(pContext->VRAMAddr, Off); 00476 Data &= 0x000000FF; 00477 Data |= (ColorIndex << 8); 00478 RemItems--; 00479 if (!RemItems) { 00480 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00481 continue; 00482 } 00483 Data &= 0xFFFFFF00; 00484 Data |= ColorIndex >> 16; 00485 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00486 Off++; 00487 Data = READ_MEM32(pContext->VRAMAddr, Off); 00488 Data &= 0x0000FFFF; 00489 Data |= ColorIndex << 16; 00490 RemItems--; 00491 if (!RemItems) { 00492 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00493 continue; 00494 } 00495 Data &= 0xFFFF0000; 00496 Data |= ColorIndex >> 8; 00497 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00498 Off++; 00499 Data = READ_MEM32(pContext->VRAMAddr, Off); 00500 Data &= 0x00FFFFFF; 00501 Data |= ColorIndex << 24; 00502 WRITE_MEM32(pContext->VRAMAddr, Off, Data); 00503 } 00504 } 00505 } 00506 #endif 00507 } 00508 00509 /*************************** End of file ****************************/
Generated on Tue Jul 12 2022 19:43:36 by 1.7.2