| LPCOpen Platform v1.03 LPCOpen Platform for NXP LPC Microcontrollers

- Main Page
- Modules
- Data Structures
- Files
- Related Pages

- File List
- Globals

All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
lcd_001.c
Go to the documentation of this file.
1 /*
2 * @brief LCD controller Registers and control functions
3 *
4 * @note
5 * Copyright(C) NXP Semiconductors, 2012
6 * All rights reserved.
7 *
8 * @par
9 * Software that is described herein is for illustrative purposes only
10 * which provides customers with programming information regarding the
11 * LPC products. This software is supplied "AS IS" without any warranties of
12 * any kind, and NXP Semiconductors and its licensor disclaim any and
13 * all warranties, express or implied, including all implied warranties of
14 * merchantability, fitness for a particular purpose and non-infringement of
15 * intellectual property rights. NXP Semiconductors assumes no responsibility
16 * or liability for the use of the software, conveys no license or rights under any
17 * patent, copyright, mask work right, or any other intellectual property rights in
18 * or to any products. NXP Semiconductors reserves the right to make changes
19 * in the software without notification. NXP Semiconductors also makes no
20 * representation or warranty that such application will be suitable for the
21 * specified use without further testing or modification.
22 *
23 * @par
24 * Permission to use, copy, modify, and distribute this software and its
25 * documentation is hereby granted, under NXP Semiconductors' and its
26 * licensor's relevant copyrights in the software, without fee, provided that it
27 * is used in conjunction with NXP Semiconductors microcontrollers. This
28 * copyright, permission, and disclaimer notice must appear in all copies of
29 * this code.
30 */
31
32 #include "lcd_001.h"
33
34 /*****************************************************************************
35 * Private types/enumerations/variables
36 ****************************************************************************/
37
38 /*****************************************************************************
39 * Public types/enumerations/variables
40 ****************************************************************************/
41
42 /*****************************************************************************
43 * Private functions
44 ****************************************************************************/
45
46 /*****************************************************************************
47 * Public functions
48 ****************************************************************************/
49
50 /* Initialize the LCD controller */
51 void IP_LCD_Init(IP_LCD_001_T *pLCD, LCD_Config_T *LCD_ConfigStruct)
52 {
53 uint32_t i, regValue, *pPal;
54 uint32_t pcd;
55
56 /* disable the display */
57 pLCD->CTRL &= ~CLCDC_LCDCTRL_ENABLE;
58
59 /* Setting LCD_TIMH register */
60 regValue = ( ((((LCD_ConfigStruct->PPL / 16) - 1) & 0x3F) << 2)
61 | (( (LCD_ConfigStruct->HSW - 1) & 0xFF) << 8)
62 | (( (LCD_ConfigStruct->HFP - 1) & 0xFF) << 16)
63 | (( (LCD_ConfigStruct->HBP - 1) & 0xFF) << 24) );
64 pLCD->TIMH = regValue;
65
66 /* Setting LCD_TIMV register */
67 regValue = ((((LCD_ConfigStruct->LPP - 1) & 0x3FF) << 0)
68 | (((LCD_ConfigStruct->VSW - 1) & 0x03F) << 10)
69 | (((LCD_ConfigStruct->VFP - 1) & 0x0FF) << 16)
70 | (((LCD_ConfigStruct->VBP - 1) & 0x0FF) << 24) );
71 pLCD->TIMV = regValue;
72
73 /* Generate the clock and signal polarity control word */
74 regValue = 0;
75 regValue = (((LCD_ConfigStruct->ACB - 1) & 0x1F) << 6);
76 regValue |= (LCD_ConfigStruct->IOE & 1) << 14;
77 regValue |= (LCD_ConfigStruct->IPC & 1) << 13;
78 regValue |= (LCD_ConfigStruct->IHS & 1) << 12;
79 regValue |= (LCD_ConfigStruct->IVS & 1) << 11;
80
81 /* Compute clocks per line based on panel type */
82 switch (LCD_ConfigStruct->LCD) {
83 case LCD_MONO_4:
84 regValue |= ((((LCD_ConfigStruct->PPL / 4) - 1) & 0x3FF) << 16);
85 break;
86
87 case LCD_MONO_8:
88 regValue |= ((((LCD_ConfigStruct->PPL / 8) - 1) & 0x3FF) << 16);
89 break;
90
91 case LCD_CSTN:
92 regValue |= (((((LCD_ConfigStruct->PPL * 3) / 8) - 1) & 0x3FF) << 16);
93 break;
94
95 case LCD_TFT:
96 default:
97 regValue |= /*1<<26 |*/ (((LCD_ConfigStruct->PPL - 1) & 0x3FF) << 16);
98 }
99
100 /* panel clock divisor */
101 pcd = 5;// LCD_ConfigStruct->pcd; // TODO: should be calculated from LCDDCLK
102 pcd &= 0x3FF;
103 regValue |= ((pcd >> 5) << 27) | ((pcd) & 0x1F);
104 pLCD->POL = regValue;
105
106 /* disable interrupts */
107 pLCD->INTMSK = 0;
108
109 /* set bits per pixel */
110 regValue = LCD_ConfigStruct->BPP << 1;
111
112 /* set color format RGB */
113 regValue |= LCD_ConfigStruct->color_format << 8;
114 regValue |= LCD_ConfigStruct->LCD << 4;
115 if (LCD_ConfigStruct->Dual == 1) {
116 regValue |= 1 << 7;
117 }
118 pLCD->CTRL = regValue;
119
120 /* clear palette */
121 pPal = (uint32_t *) (&(pLCD->PAL));
122 for (i = 0; i < 128; i++) {
123 *pPal = 0;
124 pPal++;
125 }
126 }