EE445M RTOS
Taken at the University of Texas Spring 2015
lcd.c
Go to the documentation of this file.
1 //*****************************************************************************
2 //
3 // lcd.c - Defines and Macros for the LCD Controller module.
4 //
5 // Copyright (c) 2012-2014 Texas Instruments Incorporated. All rights reserved.
6 // Software License Agreement
7 //
8 // Redistribution and use in source and binary forms, with or without
9 // modification, are permitted provided that the following conditions
10 // are met:
11 //
12 // Redistributions of source code must retain the above copyright
13 // notice, this list of conditions and the following disclaimer.
14 //
15 // Redistributions in binary form must reproduce the above copyright
16 // notice, this list of conditions and the following disclaimer in the
17 // documentation and/or other materials provided with the
18 // distribution.
19 //
20 // Neither the name of Texas Instruments Incorporated nor the names of
21 // its contributors may be used to endorse or promote products derived
22 // from this software without specific prior written permission.
23 //
24 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 //
36 // This is part of revision 2.1.0.12573 of the Tiva Peripheral Driver Library.
37 //
38 //*****************************************************************************
39 
40 //*****************************************************************************
41 //
44 //
45 //*****************************************************************************
46 
47 #include <stdint.h>
48 #include <stdbool.h>
49 #include <stdint.h>
50 #include "inc/hw_memmap.h"
51 #include "inc/hw_types.h"
52 #include "inc/hw_ints.h"
53 #include "inc/hw_lcd.h"
54 #include "driverlib/interrupt.h"
55 #include "driverlib/sysctl.h"
56 #include "driverlib/lcd.h"
57 #include "driverlib/debug.h"
58 
59 //*****************************************************************************
60 //
61 // These are currently missing from hw_lcd.h and included here as a stopgap
62 // until the hardware header is updated.
63 //
64 //*****************************************************************************
65 #ifndef LCD_RASTRTIM0_MSBPPL_S
66 #define LCD_RASTRTIM0_MSBPPL_S 3
67 #endif
68 #ifndef LCD_RASTRTIM2_MSBLPP_S
69 #define LCD_RASTRTIM2_MSBLPP_S 26
70 #endif
71 
72 //*****************************************************************************
73 //
107 //
108 //*****************************************************************************
109 uint32_t
110 LCDModeSet(uint32_t ui32Base, uint8_t ui8Mode, uint32_t ui32PixClk,
111  uint32_t ui32SysClk)
112 {
113  uint32_t ui32Div;
114 
115  //
116  // Sanity check parameters.
117  //
118  ASSERT(ui32Base == LCD0_BASE);
119  ASSERT((ui8Mode & ~(LCD_MODE_RASTER | LCD_MODE_LIDD |
121 
122  //
123  // Enable clocks to the LCD controller submodules.
124  //
125  HWREG(ui32Base + LCD_O_CLKEN) = (LCD_CLKEN_DMA | LCD_CLKEN_CORE |
127 
128  //
129  // Determine the clock divider to use to get as close as possible to the
130  // desired pixel clock. Note that we set the division up so that we
131  // round the divisor up and ensure that the clock used is never faster
132  // than the requested rate.
133  //
134  ui32Div = (ui32SysClk + (ui32PixClk - 1)) / ui32PixClk;
135 
136  //
137  // Check that the calculated value is valid.
138  //
139  ASSERT(ui32Div);
140  ASSERT(ui32Div < 256);
141  ASSERT(!((ui8Mode & LCD_MODE_RASTER) && (ui32Div < 2)));
142 
143  //
144  // Write the LCDCTL register to set the mode.
145  //
146  HWREG(ui32Base + LCD_O_CTL) = (uint32_t)ui8Mode |
147  (ui32Div << LCD_CTL_CLKDIV_S);
148 
149  //
150  // Return the selected clock rate. Finding ui32Div set to 0 should not
151  // happen unless someone passed pathological arguments and builds without
152  // the ASSERTS, but we guard against it just in case.
153  //
154  return(ui32Div ? (ui32SysClk / ui32Div) : ui32SysClk);
155 }
156 
157 //*****************************************************************************
158 //
178 //
179 //*****************************************************************************
180 void
181 LCDClockReset(uint32_t ui32Base, uint32_t ui32Clocks)
182 {
183  //
184  // Sanity check parameters.
185  //
186  ASSERT(ui32Base == LCD0_BASE);
187  ASSERT(!(ui32Clocks & ~(LCD_CLOCK_MAIN | LCD_CLOCK_LIDD | LCD_CLOCK_DMA |
188  LCD_CLOCK_CORE)));
189 
190  //
191  // Reset the required LCD controller sub-module(s).
192  //
193  HWREG(LCD0_BASE + 0x70) = ui32Clocks;
194 
195  //
196  // Wait a while.
197  //
198  SysCtlDelay(10);
199 
200  //
201  // Remove software reset.
202  //
203  HWREG(LCD0_BASE + 0x70) = 0x00000000;
204 
205  //
206  // Wait a while.
207  //
208  SysCtlDelay(10);
209 }
210 
211 //*****************************************************************************
212 //
255 //
256 //*****************************************************************************
257 void
258 LCDIDDConfigSet(uint32_t ui32Base, uint32_t ui32Config)
259 {
260  //
261  // Sanity check parameters.
262  //
263  ASSERT(ui32Base == LCD0_BASE);
271 
272  //
273  // Write the LIDD Control Register.
274  //
275  HWREG(ui32Base + LCD_O_LIDDCTL) = ui32Config;
276 }
277 
278 //*****************************************************************************
279 //
298 //
299 //*****************************************************************************
300 void
301 LCDIDDTimingSet(uint32_t ui32Base, uint32_t ui32CS,
302  const tLCDIDDTiming *pTiming)
303 {
304  uint32_t ui32Val;
305 
306  //
307  // Sanity check parameters.
308  //
309  ASSERT(ui32Base == LCD0_BASE);
310  ASSERT((ui32CS == 0) || (ui32CS == 1));
311  ASSERT(pTiming);
312  ASSERT(pTiming->ui8WSSetup < 32);
313  ASSERT(pTiming->ui8WSDuration && (pTiming->ui8WSDuration < 64));
314  ASSERT(pTiming->ui8WSHold && (pTiming->ui8WSHold < 16));
315  ASSERT(pTiming->ui8RSSetup < 32);
316  ASSERT(pTiming->ui8RSDuration && (pTiming->ui8RSDuration < 64));
317  ASSERT(pTiming->ui8RSHold && (pTiming->ui8RSHold < 16));
318  ASSERT(pTiming->ui8DelayCycles && (pTiming->ui8DelayCycles < 5));
319 
320  //
321  // Convert the timings provided into a value ready for the register.
322  //
323  ui32Val =
324  (((uint32_t)(pTiming->ui8WSSetup) << LCD_LIDDCS0CFG_WRSU_S) |
325  ((uint32_t)(pTiming->ui8WSDuration) << LCD_LIDDCS0CFG_WRDUR_S) |
326  ((uint32_t)(pTiming->ui8WSHold) << LCD_LIDDCS0CFG_WRHOLD_S) |
327  ((uint32_t)(pTiming->ui8RSSetup) << LCD_LIDDCS0CFG_RDSU_S) |
328  ((uint32_t)(pTiming->ui8RSDuration) << LCD_LIDDCS0CFG_RDDUR_S) |
329  ((uint32_t)(pTiming->ui8RSHold) << LCD_LIDDCS0CFG_RDHOLD_S) |
330  ((uint32_t)(pTiming->ui8DelayCycles - 1) << LCD_LIDDCS0CFG_GAP_S));
331 
332  //
333  // Write the appropriate LCD LIDD CS configuration register.
334  //
335  if(!ui32CS)
336  {
337  HWREG(ui32Base + LCD_O_LIDDCS0CFG) = ui32Val;
338  }
339  else
340  {
341  HWREG(ui32Base + LCD_O_LIDDCS1CFG) = ui32Val;
342  }
343 }
344 
345 //*****************************************************************************
346 //
361 //
362 //*****************************************************************************
363 void
364 LCDIDDDMADisable(uint32_t ui32Base)
365 {
366  //
367  // Sanity check parameters.
368  //
369  ASSERT(ui32Base == LCD0_BASE);
370 
371  //
372  // Disable DMA.
373  //
374  HWREG(ui32Base + LCD_O_LIDDCTL) &= ~LCD_LIDDCTL_DMAEN;
375 }
376 
377 //*****************************************************************************
378 //
398 //
399 //*****************************************************************************
400 void
401 LCDIDDCommandWrite(uint32_t ui32Base, uint32_t ui32CS, uint16_t ui16Cmd)
402 {
403  uint32_t ui32Reg;
404 
405  //
406  // Sanity check parameters.
407  //
408  ASSERT(ui32Base == LCD0_BASE);
409  ASSERT((ui32CS == 0) || (ui32CS == 1));
410 
411  //
412  // Determine the register to write based on the CS value supplied.
413  //
414  ui32Reg = ui32CS ? LCD_O_LIDDCS1ADDR : LCD_O_LIDDCS0ADDR;
415 
416  //
417  // Write the command/address to the register.
418  //
419  HWREG(ui32Base + ui32Reg) = ui16Cmd;
420 }
421 
422 //*****************************************************************************
423 //
443 //
444 //*****************************************************************************
445 void
446 LCDIDDDataWrite(uint32_t ui32Base, uint32_t ui32CS, uint16_t ui16Data)
447 {
448  uint32_t ui32Reg;
449 
450  //
451  // Sanity check parameters.
452  //
453  ASSERT(ui32Base == LCD0_BASE);
454  ASSERT((ui32CS == 0) || (ui32CS == 1));
455 
456  //
457  // Determine the register to write based on the CS value supplied.
458  //
459  ui32Reg = ui32CS ? LCD_O_LIDDCS1DATA : LCD_O_LIDDCS0DATA;
460 
461  //
462  // Write the data value to the register.
463  //
464  HWREG(ui32Base + ui32Reg) = ui16Data;
465 }
466 
467 //*****************************************************************************
468 //
497 //
498 //*****************************************************************************
499 void
500 LCDIDDIndexedWrite(uint32_t ui32Base, uint32_t ui32CS, uint16_t ui16Addr,
501  uint16_t ui16Data)
502 {
503  uint32_t ui32Addr;
504 
505  //
506  // Sanity check parameters.
507  //
508  ASSERT(ui32Base == LCD0_BASE);
509  ASSERT((ui32CS == 0) || (ui32CS == 1));
510 
511  //
512  // Determine the address register to write.
513  //
514  ui32Addr = ui32CS ? LCD_O_LIDDCS1ADDR : LCD_O_LIDDCS0ADDR;
515 
516  //
517  // Write the address.
518  //
519  HWREG(ui32Base + ui32Addr) = ui16Addr;
520 
521  //
522  // Determine the data register to write.
523  //
524  ui32Addr = ui32CS ? LCD_O_LIDDCS1DATA : LCD_O_LIDDCS0DATA;
525 
526  //
527  // Write the data.
528  //
529  HWREG(ui32Base + ui32Addr) = ui16Data;
530 }
531 
532 //*****************************************************************************
533 //
555 //
556 //*****************************************************************************
557 uint16_t
558 LCDIDDStatusRead(uint32_t ui32Base, uint32_t ui32CS)
559 {
560  uint32_t ui32Reg;
561 
562  //
563  // Sanity check parameters.
564  //
565  ASSERT(ui32Base == LCD0_BASE);
566  ASSERT((ui32CS == 0) || (ui32CS == 1));
567 
568  //
569  // Determine the register to read based on the CS value supplied.
570  //
571  ui32Reg = ui32CS ? LCD_O_LIDDCS1ADDR : LCD_O_LIDDCS0ADDR;
572 
573  //
574  // Read the relevant status register.
575  //
576  return((uint16_t)HWREG(ui32Base + ui32Reg));
577 }
578 
579 //*****************************************************************************
580 //
600 //
601 //*****************************************************************************
602 uint16_t
603 LCDIDDDataRead(uint32_t ui32Base, uint32_t ui32CS)
604 {
605  uint32_t ui32Reg;
606 
607  //
608  // Sanity check parameters.
609  //
610  ASSERT(ui32Base == LCD0_BASE);
611  ASSERT((ui32CS == 0) || (ui32CS == 1));
612 
613  //
614  // Determine the register to read based on the CS value supplied.
615  //
616  ui32Reg = ui32CS ? LCD_O_LIDDCS1DATA : LCD_O_LIDDCS0DATA;
617 
618  //
619  // Read the relevant data register.
620  //
621  return((uint16_t)HWREG(ui32Base + ui32Reg));
622 }
623 
624 //*****************************************************************************
625 //
652 //
653 //*****************************************************************************
654 uint16_t
655 LCDIDDIndexedRead(uint32_t ui32Base, uint32_t ui32CS, uint16_t ui16Addr)
656 {
657  uint32_t ui32Addr;
658 
659  //
660  // Sanity check parameters.
661  //
662  ASSERT(ui32Base == LCD0_BASE);
663  ASSERT((ui32CS == 0) || (ui32CS == 1));
664 
665  //
666  // Determine the address register to write.
667  //
668  ui32Addr = ui32CS ? LCD_O_LIDDCS1ADDR : LCD_O_LIDDCS0ADDR;
669 
670  //
671  // Write the address.
672  //
673  HWREG(ui32Base + ui32Addr) = ui16Addr;
674 
675  //
676  // Determine the data register to read.
677  //
678  ui32Addr = ui32CS ? LCD_O_LIDDCS1DATA : LCD_O_LIDDCS0DATA;
679 
680  //
681  // Return the data read.
682  //
683  return((uint16_t)HWREG(ui32Base + ui32Addr));
684 }
685 
686 //*****************************************************************************
687 //
718 //
719 //*****************************************************************************
720 void
721 LCDIDDDMAWrite(uint32_t ui32Base, uint32_t ui32CS, const uint32_t *pui32Data,
722  uint32_t ui32Count)
723 {
724  //
725  // Sanity check parameters.
726  //
727  ASSERT(ui32Base == LCD0_BASE);
728  ASSERT((ui32CS == 0) || (ui32CS == 1));
729  ASSERT(!((uint32_t)pui32Data & 3));
730  ASSERT(!(ui32Count & 1));
731 
732  //
733  // Make sure DMA is disabled so that enabling it triggers this new
734  // transfer.
735  //
736  HWREG(ui32Base + LCD_O_LIDDCTL) &= ~LCD_LIDDCTL_DMAEN;
737 
738  //
739  // Set up the transfer. Note that the ceiling register must contain the
740  // address of the last word which contains data we want transfered and NOT
741  // the first location after the data we want written.
742  //
743  HWREG(ui32Base + LCD_O_DMABAFB0) = (uint32_t)pui32Data;
744  HWREG(ui32Base + LCD_O_DMACAFB0) = ((uint32_t)pui32Data +
745  (ui32Count * 2) - 4);
746 
747  //
748  // Tell the controller which CS to use for the DMA transaction.
749  //
750  if(!ui32CS)
751  {
752  //
753  // Use CS0.
754  //
755  HWREG(ui32Base + LCD_O_LIDDCTL) &= ~LCD_LIDDCTL_DMACS;
756  }
757  else
758  {
759  //
760  // Use CS1.
761  //
762  HWREG(ui32Base + LCD_O_LIDDCTL) |= LCD_LIDDCTL_DMACS;
763  }
764 
765  //
766  // Enable the DMA engine and start the transaction.
767  //
768  HWREG(ui32Base + LCD_O_LIDDCTL) |= LCD_LIDDCTL_DMAEN;
769 }
770 
771 //*****************************************************************************
772 //
843 //
844 //*****************************************************************************
845 void
846 LCDRasterConfigSet(uint32_t ui32Base, uint32_t ui32Config,
847  uint8_t ui8PalLoadDelay)
848 {
849  //
850  // Sanity check parameters.
851  //
852  ASSERT(ui32Base == LCD0_BASE);
853  ASSERT(!(ui32Config & ~(RASTER_FMT_ACTIVE_24BPP_PACKED |
867 
868  //
869  // Write the raster control register.
870  //
871  HWREG(ui32Base + LCD_O_RASTRCTL) = (ui32Config |
872  ((uint32_t)ui8PalLoadDelay <<
874 }
875 
876 //*****************************************************************************
877 //
891 //
892 //*****************************************************************************
893 void
894 LCDRasterTimingSet(uint32_t ui32Base, const tLCDRasterTiming *pTiming)
895 {
896  uint32_t ui32T0, ui32T1, ui32T2;
897 
898  //
899  // Sanity check parameters.
900  //
901  ASSERT(ui32Base == LCD0_BASE);
902  ASSERT(pTiming);
910  ASSERT(pTiming->ui16PanelWidth && (pTiming->ui16PanelWidth <= 2048) &&
911  ((pTiming->ui16PanelWidth % 16) == 0));
912  ASSERT(pTiming->ui16PanelHeight && (pTiming->ui16PanelHeight <= 2048));
913  ASSERT(pTiming->ui16HFrontPorch && (pTiming->ui16HFrontPorch <= 1024));
914  ASSERT(pTiming->ui16HBackPorch && (pTiming->ui16HBackPorch <= 1024));
915  ASSERT(pTiming->ui16HSyncWidth && (pTiming->ui16HSyncWidth <= 1024));
916  ASSERT(pTiming->ui8VSyncWidth && (pTiming->ui8VSyncWidth <= 64));
917 
918  //
919  // Construct the values we need for the three raster timing registers.
920  //
921  ui32T0 = ((uint32_t)((pTiming->ui16HBackPorch - 1) & 0xFF) <<
923  ((uint32_t)((pTiming->ui16HFrontPorch - 1) & 0xFF) <<
925  ((uint32_t)((pTiming->ui16HSyncWidth - 1) & 0x3F) <<
927  (((uint32_t)((pTiming->ui16PanelWidth - 1) & 0x3F0) >> 4) <<
929  (((uint32_t)((pTiming->ui16PanelWidth - 1) & 0x400) >> 10) <<
931  ui32T1 = ((uint32_t)pTiming->ui8VBackPorch << LCD_RASTRTIM1_VBP_S) |
932  ((uint32_t)pTiming->ui8VFrontPorch << LCD_RASTRTIM1_VFP_S) |
933  ((uint32_t)((pTiming->ui8VSyncWidth - 1) & 0x3F) <<
935  ((uint32_t)(pTiming->ui16PanelHeight - 1) & 0x3FF) <<
937  ui32T2 = pTiming->ui32Flags |
938  ((((pTiming->ui16HSyncWidth - 1) & 0x3C0) >> 6) <<
940  ((((pTiming->ui16PanelHeight - 1) & 0x400) >> 10) <<
942  ((((pTiming->ui16HBackPorch - 1) & 0x300) >> 8) <<
944  ((((pTiming->ui16HFrontPorch - 1) & 0x300) >> 8) <<
947 
948  //
949  // Write the timing registers, taking care to preserve any existing value
950  // in the AC Bias interrupt field of RASTRTIM2.
951  //
952  HWREG(ui32Base + LCD_O_RASTRTIM0) = ui32T0;
953  HWREG(ui32Base + LCD_O_RASTRTIM1) = ui32T1;
954  HWREG(ui32Base + LCD_O_RASTRTIM2) = (HWREG(ui32Base + LCD_O_RASTRTIM2) &
955  LCD_RASTRTIM2_ACBI_M) | ui32T2;
956 }
957 
958 //*****************************************************************************
959 //
971 //
972 //*****************************************************************************
973 void
974 LCDRasterACBiasIntCountSet(uint32_t ui32Base, uint8_t ui8Count)
975 {
976  uint32_t ui32Val;
977 
978  //
979  // Sanity check parameters.
980  //
981  ASSERT(ui32Base == LCD0_BASE);
982  ASSERT(ui8Count < 16);
983 
984  //
985  // Get the existing raster timing 2 register value and mask in the new
986  // AC Bias interrupt count.
987  //
988  ui32Val = HWREG(ui32Base + LCD_O_RASTRTIM2);
989  ui32Val &= ~LCD_RASTRTIM2_ACBI_M;
990  ui32Val |= ((ui8Count << LCD_RASTRTIM2_ACBI_S) & LCD_RASTRTIM2_ACBI_M);
991 
992  //
993  // Write the new value back to the register.
994  //
995  HWREG(ui32Base + LCD_O_RASTRTIM2) = ui32Val;
996 }
997 
998 //*****************************************************************************
999 //
1011 //
1012 //*****************************************************************************
1013 void
1014 LCDRasterEnable(uint32_t ui32Base)
1015 {
1016  //
1017  // Sanity check parameters.
1018  //
1019  ASSERT(ui32Base == LCD0_BASE);
1020 
1021  //
1022  // Reset the module prior to starting the raster. This is required to
1023  // ensure correct operation of the raster engine.
1024  //
1025  LCDClockReset(ui32Base, LCD_CLOCK_MAIN);
1026 
1027  //
1028  // Enable the raster engine.
1029  //
1030  HWREG(ui32Base + LCD_O_RASTRCTL) |= LCD_RASTRCTL_LCDEN;
1031 }
1032 
1033 //*****************************************************************************
1034 //
1044 //
1045 //*****************************************************************************
1046 bool
1047 LCDRasterEnabled(uint32_t ui32Base)
1048 {
1049  //
1050  // Sanity check parameters.
1051  //
1052  ASSERT(ui32Base == LCD0_BASE);
1053 
1054  //
1055  // Return the current raster engine status.
1056  //
1057  return((HWREG(ui32Base + LCD_O_RASTRCTL) & LCD_RASTRCTL_LCDEN) ?
1058  true : false);
1059 }
1060 
1061 //*****************************************************************************
1062 //
1076 //
1077 //*****************************************************************************
1078 void
1079 LCDRasterDisable(uint32_t ui32Base)
1080 {
1081  //
1082  // Sanity check parameters.
1083  //
1084  ASSERT(ui32Base == LCD0_BASE);
1085 
1086  //
1087  // Disable the raster engine.
1088  //
1089  HWREG(ui32Base + LCD_O_RASTRCTL) &= ~LCD_RASTRCTL_LCDEN;
1090 }
1091 
1092 //*****************************************************************************
1093 //
1131 //
1132 //*****************************************************************************
1133 void
1134 LCDRasterSubPanelConfigSet(uint32_t ui32Base, uint32_t ui32Flags,
1135  uint32_t ui32BottomLines, uint32_t ui32DefaultPixel)
1136 {
1137  //
1138  // Sanity check parameters.
1139  //
1140  ASSERT(ui32Base == LCD0_BASE);
1141  ASSERT((ui32Flags == LCD_SUBPANEL_AT_TOP) ||
1142  (ui32Flags == LCD_SUBPANEL_AT_BOTTOM));
1143  ASSERT(ui32BottomLines && (ui32BottomLines <= 2048));
1144 
1145  //
1146  // Adjust the line count into the 0-2047 range.
1147  //
1148  ui32BottomLines--;
1149 
1150  //
1151  // Set the first subpanel configuration register, taking care to leave the
1152  // subpanel enabled if it already was.
1153  //
1154  HWREG(ui32Base + LCD_O_RASTRSUBP1) = (HWREG(ui32Base + LCD_O_RASTRSUBP1) &
1155  LCD_RASTRSUBP1_SPEN) | ui32Flags |
1156  ((ui32DefaultPixel & 0xFFFF) <<
1158  ((ui32BottomLines <<
1161 
1162  //
1163  // Set the second subpanel configuration register.
1164  //
1165  HWREG(ui32Base + LCD_O_RASTRSUBP2) =
1166  ((ui32DefaultPixel >> 16) & LCD_RASTRSUBP2_DPDMSB_M) |
1167  (((ui32BottomLines >> LCD_RASTRSUBP1_LPPT_S) & 1) << 8);
1168 }
1169 
1170 //*****************************************************************************
1171 //
1187 //
1188 //*****************************************************************************
1189 void
1190 LCDRasterSubPanelEnable(uint32_t ui32Base)
1191 {
1192  //
1193  // Sanity check parameters.
1194  //
1195  ASSERT(ui32Base == LCD0_BASE);
1196 
1197  //
1198  // Enable the subpanel.
1199  //
1201 }
1202 
1203 //*****************************************************************************
1204 //
1216 //
1217 //*****************************************************************************
1218 void
1219 LCDRasterSubPanelDisable(uint32_t ui32Base)
1220 {
1221  //
1222  // Sanity check parameters.
1223  //
1224  ASSERT(ui32Base == LCD0_BASE);
1225 
1226  //
1227  // Disable the subpanel.
1228  //
1229  HWREG(ui32Base + LCD_O_RASTRSUBP1) &= ~LCD_RASTRSUBP1_SPEN;
1230 }
1231 
1232 //*****************************************************************************
1233 //
1290 //
1291 //*****************************************************************************
1292 void
1293 LCDDMAConfigSet(uint32_t ui32Base, uint32_t ui32Config)
1294 {
1295  //
1296  // Sanity check parameters.
1297  //
1298  ASSERT(ui32Base == LCD0_BASE);
1299  ASSERT(!(ui32Config & ~(LCD_DMACTL_FIFORDY_M | LCD_DMACTL_BURSTSZ_M |
1301  LCD_DMACTL_FMODE)));
1302 
1303  //
1304  // Write the DMA control register.
1305  //
1306  HWREG(ui32Base + LCD_O_DMACTL) = ui32Config;
1307 }
1308 
1309 //*****************************************************************************
1310 //
1364 //
1365 //*****************************************************************************
1366 void
1367 LCDRasterPaletteSet(uint32_t ui32Base, uint32_t ui32Type, uint32_t *pui32Addr,
1368  const uint32_t *pui32SrcColors, uint32_t ui32Start,
1369  uint32_t ui32Count)
1370 {
1371  uint16_t *pui16Pal;
1372  uint16_t *pui16Src;
1373  uint32_t ui32Loop;
1374 
1375  //
1376  // Sanity check parameters.
1377  //
1378  ASSERT(ui32Base == LCD0_BASE);
1379  ASSERT(ui32Start < 256);
1380  ASSERT((ui32Start + ui32Count) <= 256);
1381  ASSERT(pui32Addr);
1382  ASSERT((pui32SrcColors) || (ui32Count == 0));
1386 
1387  //
1388  // Get a pointer to the start of the palette.
1389  //
1390  pui16Pal = (uint16_t *)pui32Addr;
1391 
1392  //
1393  // Are we converting the palette color format?
1394  //
1395  if(ui32Type & LCD_PALETTE_SRC_24BIT)
1396  {
1397  //
1398  // Yes - loop through each of the supplied 24-bit colors converting
1399  // and storing each.
1400  //
1401  ui32Loop = 0;
1402  while(ui32Count)
1403  {
1404  pui16Pal[ui32Start + ui32Loop] =
1405  PAL_FROM_RGB(pui32SrcColors[ui32Loop]);
1406  ui32Loop++;
1407  ui32Count--;
1408  }
1409  }
1410  else
1411  {
1412  //
1413  // No - loop through the supplied 12-bit colors storing each.
1414  //
1415 
1416  pui16Src = (uint16_t *)pui32SrcColors;
1417  while(ui32Count)
1418  {
1419  pui16Pal[ui32Start] = pui16Src[ui32Start];
1420  ui32Start++;
1421  ui32Count--;
1422  }
1423  }
1424 
1425  //
1426  // Write the pixel type into the first palette entry.
1427  //
1428  pui16Pal[0] &= ~(LCD_PALETTE_TYPE_8BPP | LCD_PALETTE_TYPE_DIRECT);
1429  pui16Pal[0] |= (ui32Type & ~LCD_PALETTE_SRC_24BIT);
1430 }
1431 
1432 //*****************************************************************************
1433 //
1474 //*****************************************************************************
1475 void
1476 LCDRasterFrameBufferSet(uint32_t ui32Base, uint8_t ui8Buffer,
1477  uint32_t *pui32Addr, uint32_t ui32NumBytes)
1478 {
1479  //
1480  // Sanity check parameters.
1481  //
1482  ASSERT(ui32Base == LCD0_BASE);
1483  ASSERT(!((uint32_t)pui32Addr & 3));
1484  ASSERT(!(ui32NumBytes & 3));
1485  ASSERT(ui8Buffer < 2);
1486 
1487  //
1488  // Are we setting the values for frame buffer 0?
1489  //
1490  if(!ui8Buffer)
1491  {
1492  //
1493  // Yes - set the registers for frame buffer 0.
1494  //
1495  HWREG(ui32Base + LCD_O_DMABAFB0) = (uint32_t)pui32Addr;
1496  HWREG(ui32Base + LCD_O_DMACAFB0) = (uint32_t)pui32Addr +
1497  ui32NumBytes - 4;
1498  }
1499  else
1500  {
1501  //
1502  // No - set the registers for frame buffer 1.
1503  //
1504  HWREG(ui32Base + LCD_O_DMABAFB1) = (uint32_t)pui32Addr;
1505  HWREG(ui32Base + LCD_O_DMACAFB1) = (uint32_t)pui32Addr +
1506  ui32NumBytes - 4;
1507  }
1508 }
1509 
1510 //*****************************************************************************
1511 //
1541 //
1542 //*****************************************************************************
1543 void
1544 LCDIntEnable(uint32_t ui32Base, uint32_t ui32IntFlags)
1545 {
1546  ASSERT(ui32Base == LCD0_BASE);
1547  ASSERT(!(ui32IntFlags & ~(LCD_INT_DMA_DONE | LCD_INT_SYNC_LOST |
1551 
1552  //
1553  // Enable the interrupt sources by setting the appropriate bits in the
1554  // mask register.
1555  //
1556  HWREG(ui32Base + LCD_O_IM) = ui32IntFlags;
1557 }
1558 
1559 //*****************************************************************************
1560 //
1591 //
1592 //*****************************************************************************
1593 void
1594 LCDIntDisable(uint32_t ui32Base, uint32_t ui32IntFlags)
1595 {
1596  ASSERT(ui32Base == LCD0_BASE);
1597  ASSERT(!(ui32IntFlags & ~(LCD_INT_DMA_DONE | LCD_INT_SYNC_LOST |
1601 
1602  //
1603  // Disable the interrupt sources by clearing the appropriate bits in the
1604  // mask register.
1605  //
1606  HWREG(ui32Base + LCD_O_IENC) = ui32IntFlags;
1607 }
1608 
1609 //*****************************************************************************
1610 //
1640 //
1641 //*****************************************************************************
1642 uint32_t
1643 LCDIntStatus(uint32_t ui32Base, bool bMasked)
1644 {
1645  ASSERT(ui32Base == LCD0_BASE);
1646 
1647  //
1648  // Were we asked for the masked or raw interrupt status?
1649  //
1650  if(bMasked)
1651  {
1652  //
1653  // Return the masked interrupt status.
1654  //
1655  return(HWREG(ui32Base + LCD_O_MISCLR));
1656  }
1657  else
1658  {
1659  //
1660  // Return the raw interrupts status.
1661  //
1662  return(HWREG(ui32Base + LCD_O_RISSET));
1663  }
1664 }
1665 
1666 //*****************************************************************************
1667 //
1706 //
1707 //*****************************************************************************
1708 void
1709 LCDIntClear(uint32_t ui32Base, uint32_t ui32IntFlags)
1710 {
1711  ASSERT(ui32Base == LCD0_BASE);
1712  ASSERT(!(ui32IntFlags & ~(LCD_INT_DMA_DONE | LCD_INT_SYNC_LOST |
1716 
1717  //
1718  // Clear the requested interrupts.
1719  //
1720  HWREG(ui32Base + LCD_O_MISCLR) = ui32IntFlags;
1721 }
1722 
1723 //*****************************************************************************
1724 //
1741 //
1742 //*****************************************************************************
1743 void
1744 LCDIntRegister(uint32_t ui32Base, void (*pfnHandler)(void))
1745 {
1746  //
1747  // Check the arguments.
1748  //
1749  ASSERT(ui32Base == LCD0_BASE);
1750  ASSERT(pfnHandler);
1751 
1752  //
1753  // Register the interrupt handler.
1754  //
1755  IntRegister(INT_LCD0_TM4C129, pfnHandler);
1756 
1757  //
1758  // Enable the interrupt in the interrupt controller.
1759  //
1761 }
1762 
1763 //*****************************************************************************
1764 //
1779 //
1780 //*****************************************************************************
1781 void
1782 LCDIntUnregister(uint32_t ui32Base)
1783 {
1784  //
1785  // Check the arguments.
1786  //
1787  ASSERT(ui32Base == LCD0_BASE);
1788 
1789  //
1790  // Disable the interrupt in the interrupt controller.
1791  //
1793 
1794  //
1795  // Unregister the interrupt handler.
1796  //
1798 }
1799 
1800 //*****************************************************************************
1801 //
1802 // Close the Doxygen group.
1804 //
1805 //*****************************************************************************
#define LCD_RASTRTIM2_MSBHBP_S
Definition: hw_lcd.h:324
void LCDRasterSubPanelDisable(uint32_t ui32Base)
Definition: lcd.c:1219
#define RASTER_FMT_PASSIVE_MONO_4PIX
Definition: lcd.h:322
void LCDIDDDataWrite(uint32_t ui32Base, uint32_t ui32CS, uint16_t ui16Data)
Definition: lcd.c:446
void LCDIDDDMADisable(uint32_t ui32Base)
Definition: lcd.c:364
#define LCD_CLOCK_CORE
Definition: lcd.h:408
#define INT_LCD0_TM4C129
Definition: hw_ints.h:271
uint8_t ui8RSSetup
Definition: lcd.h:141
#define LCD_RASTRTIM1_VBP_S
Definition: hw_lcd.h:292
#define RASTER_LOAD_PALETTE_ONLY
Definition: lcd.h:337
#define LCD_PALETTE_TYPE_8BPP
Definition: lcd.h:396
#define RASTER_FMT_ACTIVE_PALETTIZED_12BIT
Definition: lcd.h:318
#define LCD_INT_PAL_LOAD
Definition: lcd.h:355
uint8_t ui8WSSetup
Definition: lcd.h:118
uint8_t ui8RSHold
Definition: lcd.h:156
#define LCD_CLOCK_LIDD
Definition: lcd.h:407
#define LCD_RASTRTIM0_MSBPPL_S
Definition: hw_lcd.h:280
#define LCD_O_RASTRTIM1
Definition: hw_lcd.h:62
#define LIDD_CONFIG_INVERT_WS_DIR
Definition: lcd.h:299
uint8_t ui8VBackPorch
Definition: lcd.h:249
uint8_t ui8WSDuration
Definition: lcd.h:125
#define LCD_RASTRTIM2_MSBHFP_S
Definition: hw_lcd.h:325
void LCDRasterPaletteSet(uint32_t ui32Base, uint32_t ui32Type, uint32_t *pui32Addr, const uint32_t *pui32SrcColors, uint32_t ui32Start, uint32_t ui32Count)
Definition: lcd.c:1367
uint32_t LCDModeSet(uint32_t ui32Base, uint8_t ui8Mode, uint32_t ui32PixClk, uint32_t ui32SysClk)
Definition: lcd.c:110
void LCDIntEnable(uint32_t ui32Base, uint32_t ui32IntFlags)
Definition: lcd.c:1544
void LCDIntDisable(uint32_t ui32Base, uint32_t ui32IntFlags)
Definition: lcd.c:1594
#define LCD_INT_UNDERFLOW
Definition: lcd.h:354
void LCDRasterFrameBufferSet(uint32_t ui32Base, uint8_t ui8Buffer, uint32_t *pui32Addr, uint32_t ui32NumBytes)
Definition: lcd.c:1476
#define LCD_CLKEN_LIDD
Definition: hw_lcd.h:556
#define LCD_O_LIDDCS0ADDR
Definition: hw_lcd.h:52
#define RASTER_TIMING_SYNCS_OPPOSITE_PIXCLK
Definition: lcd.h:172
#define HWREG(x)
Definition: hw_types.h:48
#define RASTER_TIMING_ACTIVE_LOW_PIXCLK
Definition: lcd.h:184
#define RASTER_FMT_PASSIVE_COLOR_12BIT
Definition: lcd.h:328
void LCDRasterSubPanelEnable(uint32_t ui32Base)
Definition: lcd.c:1190
#define LCD_RASTRSUBP1_SPEN
Definition: hw_lcd.h:333
#define LCD_RASTRTIM1_VSW_S
Definition: hw_lcd.h:294
#define LCD_O_RASTRTIM2
Definition: hw_lcd.h:63
#define LCD_PALETTE_TYPE_2BPP
Definition: lcd.h:394
uint8_t ui8WSHold
Definition: lcd.h:133
#define LCD_O_LIDDCS1DATA
Definition: hw_lcd.h:58
void LCDIDDDMAWrite(uint32_t ui32Base, uint32_t ui32CS, const uint32_t *pui32Data, uint32_t ui32Count)
Definition: lcd.c:721
#define LCD_O_DMABAFB1
Definition: hw_lcd.h:71
void LCDIDDTimingSet(uint32_t ui32Base, uint32_t ui32CS, const tLCDIDDTiming *pTiming)
Definition: lcd.c:301
uint16_t LCDIDDIndexedRead(uint32_t ui32Base, uint32_t ui32CS, uint16_t ui16Addr)
Definition: lcd.c:655
#define LCD_O_LIDDCS1CFG
Definition: hw_lcd.h:55
void LCDRasterSubPanelConfigSet(uint32_t ui32Base, uint32_t ui32Flags, uint32_t ui32BottomLines, uint32_t ui32DefaultPixel)
Definition: lcd.c:1134
#define LIDD_CONFIG_SYNC_MPU68
Definition: lcd.h:290
uint8_t ui8ACBiasLineCount
Definition: lcd.h:270
void LCDIDDIndexedWrite(uint32_t ui32Base, uint32_t ui32CS, uint16_t ui16Addr, uint16_t ui16Data)
Definition: lcd.c:500
#define ASSERT(expr)
Definition: debug.h:67
uint8_t ui8VFrontPorch
Definition: lcd.h:242
void LCDIntRegister(uint32_t ui32Base, void(*pfnHandler)(void))
Definition: lcd.c:1744
#define LCD_MODE_AUTO_UFLOW_RESTART
Definition: lcd.h:282
#define LCD_RASTRSUBP1_LPPT_S
Definition: hw_lcd.h:337
#define LCD_CLKEN_CORE
Definition: hw_lcd.h:557
void SysCtlDelay(uint32_t ui32Count)
#define LCD_O_LIDDCS0DATA
Definition: hw_lcd.h:53
#define LCD_O_RASTRCTL
Definition: hw_lcd.h:60
#define RASTER_TIMING_ACTIVE_LOW_VSYNC
Definition: lcd.h:192
uint8_t ui8DelayCycles
Definition: lcd.h:164
#define LCD_PALETTE_SRC_24BIT
Definition: lcd.h:398
#define LCD_O_DMACTL
Definition: hw_lcd.h:66
#define RASTER_READ_ORDER_REVERSED
Definition: lcd.h:339
#define LCD_O_DMACAFB1
Definition: hw_lcd.h:73
void LCDIDDConfigSet(uint32_t ui32Base, uint32_t ui32Config)
Definition: lcd.c:258
uint16_t ui16HFrontPorch
Definition: lcd.h:224
#define LCD_O_DMACAFB0
Definition: hw_lcd.h:69
#define LCD_RASTRTIM1_VFP_S
Definition: hw_lcd.h:293
#define LCD_RASTRSUBP1_DPDLSB_S
Definition: hw_lcd.h:338
#define LCD_LIDDCS0CFG_GAP_S
Definition: hw_lcd.h:161
#define LCD_LIDDCS0CFG_RDHOLD_S
Definition: hw_lcd.h:160
uint32_t ui32Flags
Definition: lcd.h:206
#define LCD_INT_EOF1
Definition: lcd.h:357
#define RASTER_TIMING_ACTIVE_LOW_OE
Definition: lcd.h:180
#define LCD_PALETTE_TYPE_4BPP
Definition: lcd.h:395
uint16_t ui16PanelWidth
Definition: lcd.h:212
#define RASTER_TIMING_SYNCS_ON_FALLING_PIXCLK
Definition: lcd.h:176
#define LCD_RASTRSUBP2_DPDMSB_M
Definition: hw_lcd.h:347
#define LCD_PALETTE_TYPE_DIRECT
Definition: lcd.h:397
#define LCD_MODE_LIDD
Definition: lcd.h:280
#define LCD_RASTRTIM1_LPP_S
Definition: hw_lcd.h:295
uint16_t LCDIDDStatusRead(uint32_t ui32Base, uint32_t ui32CS)
Definition: lcd.c:558
#define RASTER_TIMING_ACTIVE_LOW_HSYNC
Definition: lcd.h:188
#define RASTER_FMT_ACTIVE_24BPP_PACKED
Definition: lcd.h:314
#define LIDD_CONFIG_SYNC_MPU80
Definition: lcd.h:292
#define LCD_O_LIDDCS1ADDR
Definition: hw_lcd.h:56
uint8_t ui8VSyncWidth
Definition: lcd.h:262
#define LCD_RASTRCTL_REQDLY_S
Definition: hw_lcd.h:262
#define LCD_INT_AC_BIAS_CNT
Definition: lcd.h:353
#define LCD_RASTRTIM2_ACBI_M
Definition: hw_lcd.h:313
#define LCD_LIDDCS0CFG_WRSU_S
Definition: hw_lcd.h:155
void LCDRasterDisable(uint32_t ui32Base)
Definition: lcd.c:1079
#define LIDD_CONFIG_INVERT_RS_EN
Definition: lcd.h:297
#define LIDD_CONFIG_INVERT_ALE
Definition: lcd.h:296
#define RASTER_LOAD_DATA_ONLY
Definition: lcd.h:336
#define LCD_O_MISCLR
Definition: hw_lcd.h:79
#define LCD_INT_DMA_DONE
Definition: lcd.h:349
#define LCD_CLKEN_DMA
Definition: hw_lcd.h:555
void LCDIntUnregister(uint32_t ui32Base)
Definition: lcd.c:1782
#define RASTER_FMT_PASSIVE_PALETTIZED
Definition: lcd.h:326
#define LIDD_CONFIG_ASYNC_HITACHI
Definition: lcd.h:294
#define LCD_INT_RASTER_FRAME_DONE
Definition: lcd.h:350
#define LCD0_BASE
Definition: hw_memmap.h:144
#define LCD_DMACTL_BIGDEND
Definition: hw_lcd.h:372
#define RASTER_FMT_PASSIVE_MONO_8PIX
Definition: lcd.h:324
#define LCD_RASTRTIM2_ACBF_S
Definition: hw_lcd.h:323
#define LCD_RASTRTIM2_HSW_S
Definition: hw_lcd.h:320
#define LCD_O_LIDDCS0CFG
Definition: hw_lcd.h:51
#define RASTER_NIBBLE_MODE_ENABLED
Definition: lcd.h:334
#define LCD_RASTRTIM2_ACBI_S
Definition: hw_lcd.h:322
#define LIDD_CONFIG_ASYNC_MPU80
Definition: lcd.h:293
#define LCD_LIDDCTL_DMAEN
Definition: hw_lcd.h:112
#define LCD_RASTRTIM0_HFP_S
Definition: hw_lcd.h:277
#define LCD_LIDDCS0CFG_WRDUR_S
Definition: hw_lcd.h:156
#define LCD_LIDDCS0CFG_RDSU_S
Definition: hw_lcd.h:158
void LCDIntClear(uint32_t ui32Base, uint32_t ui32IntFlags)
Definition: lcd.c:1709
#define LIDD_CONFIG_INVERT_CS1
Definition: lcd.h:302
#define LCD_DMACTL_BURSTSZ_M
Definition: hw_lcd.h:363
#define LCD_O_RASTRTIM0
Definition: hw_lcd.h:61
#define LCD_MODE_RASTER
Definition: lcd.h:281
#define LIDD_CONFIG_INVERT_CS0
Definition: lcd.h:301
#define LCD_RASTRTIM0_HSW_S
Definition: hw_lcd.h:278
#define LCD_O_CLKEN
Definition: hw_lcd.h:82
#define LCD_RASTRCTL_LCDEN
Definition: hw_lcd.h:260
#define LCD_LIDDCS0CFG_WRHOLD_S
Definition: hw_lcd.h:157
void IntUnregister(uint32_t ui32Interrupt)
Definition: interrupt.c:381
uint16_t ui16HSyncWidth
Definition: lcd.h:236
#define RASTER_FMT_ACTIVE_PALETTIZED_16BIT
Definition: lcd.h:320
uint16_t ui16PanelHeight
Definition: lcd.h:218
#define LCD_LIDDCTL_DMACS
Definition: hw_lcd.h:110
#define LCD_O_DMABAFB0
Definition: hw_lcd.h:67
#define LCD_SUBPANEL_AT_TOP
Definition: lcd.h:415
#define LCD_O_IM
Definition: hw_lcd.h:80
#define LCD_DMACTL_FMODE
Definition: hw_lcd.h:373
#define LCD_O_CTL
Definition: hw_lcd.h:49
void LCDClockReset(uint32_t ui32Base, uint32_t ui32Clocks)
Definition: lcd.c:181
#define LCD_RASTRTIM2_MSBLPP_S
Definition: hw_lcd.h:321
uint32_t LCDIntStatus(uint32_t ui32Base, bool bMasked)
Definition: lcd.c:1643
#define LCD_CLOCK_DMA
Definition: lcd.h:406
#define RASTER_FMT_ACTIVE_24BPP_UNPACKED
Definition: lcd.h:316
#define LCD_O_RASTRSUBP1
Definition: hw_lcd.h:64
void LCDRasterTimingSet(uint32_t ui32Base, const tLCDRasterTiming *pTiming)
Definition: lcd.c:894
#define LIDD_CONFIG_ASYNC_MPU68
Definition: lcd.h:291
#define LCD_SUBPANEL_AT_BOTTOM
Definition: lcd.h:416
#define LCD_INT_EOF0
Definition: lcd.h:356
#define RASTER_TIMING_SYNCS_ON_RISING_PIXCLK
Definition: lcd.h:174
#define LCD_O_RISSET
Definition: hw_lcd.h:77
#define LCD_RASTRTIM0_PPL_S
Definition: hw_lcd.h:279
#define LCD_CLOCK_MAIN
Definition: lcd.h:405
void LCDDMAConfigSet(uint32_t ui32Base, uint32_t ui32Config)
Definition: lcd.c:1293
#define LCD_CTL_CLKDIV_S
Definition: hw_lcd.h:103
#define LCD_RASTRSUBP1_LPPT_M
Definition: hw_lcd.h:335
#define LCD_RASTRTIM0_HBP_S
Definition: hw_lcd.h:276
#define LCD_DMACTL_BYTESWAP
Definition: hw_lcd.h:369
bool LCDRasterEnabled(uint32_t ui32Base)
Definition: lcd.c:1047
#define LCD_DMACTL_FIFORDY_M
Definition: hw_lcd.h:355
#define PAL_FROM_RGB(ui32RGBColor)
Definition: lcd.h:68
uint16_t LCDIDDDataRead(uint32_t ui32Base, uint32_t ui32CS)
Definition: lcd.c:603
#define LCD_LIDDCS0CFG_RDDUR_S
Definition: hw_lcd.h:159
#define RASTER_ACTVID_DURING_BLANK
Definition: lcd.h:332
void LCDRasterConfigSet(uint32_t ui32Base, uint32_t ui32Config, uint8_t ui8PalLoadDelay)
Definition: lcd.c:846
#define LCD_O_IENC
Definition: hw_lcd.h:81
void LCDRasterACBiasIntCountSet(uint32_t ui32Base, uint8_t ui8Count)
Definition: lcd.c:974
void LCDIDDCommandWrite(uint32_t ui32Base, uint32_t ui32CS, uint16_t ui16Cmd)
Definition: lcd.c:401
void LCDRasterEnable(uint32_t ui32Base)
Definition: lcd.c:1014
uint8_t ui8RSDuration
Definition: lcd.h:148
uint16_t ui16HBackPorch
Definition: lcd.h:230
void IntDisable(uint32_t ui32Interrupt)
Definition: interrupt.c:684
void IntRegister(uint32_t ui32Interrupt, void(*pfnHandler)(void))
Definition: interrupt.c:309
#define LCD_INT_SYNC_LOST
Definition: lcd.h:352
void IntEnable(uint32_t ui32Interrupt)
Definition: interrupt.c:610
#define LCD_O_LIDDCTL
Definition: hw_lcd.h:50
#define LCD_O_RASTRSUBP2
Definition: hw_lcd.h:65
#define LCD_PALETTE_TYPE_1BPP
Definition: lcd.h:393
#define RASTER_FMT_PASSIVE_COLOR_16BIT
Definition: lcd.h:330