16 #ifdef __MSP430_HAS_LCD_B__
26 const LCD_B_initParam LCD_B_INIT_PARAM = {
27 LCD_B_CLOCKSOURCE_ACLK,
29 LCD_B_CLOCKPRESCALAR_1,
31 LCD_B_SEGMENTS_DISABLED
34 static void setLCDFunction(uint16_t baseAddress, uint8_t index, uint16_t value)
38 HWREG16(baseAddress + OFS_LCDBPCTL0) |= value;
41 HWREG16(baseAddress + OFS_LCDBPCTL1) |= value;
44 HWREG16(baseAddress + OFS_LCDBPCTL2) |= value;
47 HWREG16(baseAddress + OFS_LCDBPCTL3) |= value;
53 void LCD_B_init(uint16_t baseAddress, LCD_B_initParam *initParams)
55 HWREG16(baseAddress + OFS_LCDBCTL0) &= ~LCDON;
56 HWREG16(baseAddress + OFS_LCDBCTL0) &= ~(LCDMX0 | LCDMX1 | LCDSSEL | LCDSON
59 HWREG16(baseAddress + OFS_LCDBCTL0) |= initParams->muxRate;
60 HWREG16(baseAddress + OFS_LCDBCTL0) |= initParams->clockSource;
61 HWREG16(baseAddress + OFS_LCDBCTL0) |= initParams->segments;
62 HWREG16(baseAddress + OFS_LCDBCTL0) |= initParams->clockDivider;
63 HWREG16(baseAddress + OFS_LCDBCTL0) |= initParams->clockPrescalar;
66 void LCD_B_on(uint16_t baseAddress)
68 HWREG16(baseAddress + OFS_LCDBCTL0) |= LCDON;
71 void LCD_B_off(uint16_t baseAddress)
73 HWREG16(baseAddress + OFS_LCDBCTL0) &= ~LCDON;
76 void LCD_B_clearInterrupt(uint16_t baseAddress, uint16_t mask)
78 HWREG8(baseAddress + OFS_LCDBCTL1_L) &= ~(mask>>8);
81 uint16_t LCD_B_getInterruptStatus(uint16_t baseAddress, uint16_t mask)
83 return (
HWREG8(baseAddress + OFS_LCDBCTL1_L) & (mask>>8));
86 void LCD_B_enableInterrupt (uint16_t baseAddress, uint16_t mask)
88 HWREG16(baseAddress + OFS_LCDBCTL1) |= mask;
91 void LCD_B_disableInterrupt (uint16_t baseAddress, uint16_t mask)
93 HWREG16(baseAddress + OFS_LCDBCTL1) &= ~mask;
96 void LCD_B_clearAllMemory(uint16_t baseAddress)
98 HWREG16(baseAddress + OFS_LCDBMEMCTL) |= LCDCLRM;
101 void LCD_B_clearAllBlinkingMemory(uint16_t baseAddress)
103 HWREG16(baseAddress + OFS_LCDBMEMCTL) |= LCDCLRBM;
106 void LCD_B_selectDisplayMemory(uint16_t baseAddress, uint16_t displayMemory)
108 HWREG16(baseAddress + OFS_LCDBMEMCTL) &= ~LCDDISP;
109 HWREG16(baseAddress + OFS_LCDBMEMCTL) |= displayMemory;
112 void LCD_B_setBlinkingControl (uint16_t baseAddress,
113 uint8_t clockDivider,
114 uint8_t clockPrescalar,
117 HWREG16(baseAddress + OFS_LCDBBLKCTL) &= ~(LCDBLKDIV0 | LCDBLKDIV1 | LCDBLKDIV2
118 | LCDBLKPRE0 | LCDBLKPRE1 | LCDBLKPRE2 | LCDBLKMOD0 | LCDBLKMOD1);
120 HWREG16(baseAddress + OFS_LCDBBLKCTL) |= clockDivider | clockPrescalar | mode;
123 void LCD_B_enableChargePump(uint16_t baseAddress)
125 HWREG16(baseAddress + OFS_LCDBCTL0) &= ~LCDON;
126 HWREG16(baseAddress + OFS_LCDBVCTL) |= LCDCPEN;
129 void LCD_B_disableChargePump(uint16_t baseAddress)
131 HWREG16(baseAddress + OFS_LCDBCTL0) &= ~LCDON;
132 HWREG16(baseAddress + OFS_LCDBVCTL) &= ~LCDCPEN;
135 void LCD_B_selectBias(uint16_t baseAddress, uint16_t bias)
137 HWREG16(baseAddress + OFS_LCDBCTL0) &= ~LCDON;
138 HWREG16(baseAddress + OFS_LCDBVCTL) &= ~LCD2B;
140 HWREG16(baseAddress + OFS_LCDBVCTL) |= bias;
143 void LCD_B_selectChargePumpReference(uint16_t baseAddress, uint16_t reference)
145 HWREG16(baseAddress + OFS_LCDBCTL0) &= ~LCDON;
146 HWREG16(baseAddress + OFS_LCDBVCTL) &= ~VLCDREF_3;
148 HWREG16(baseAddress + OFS_LCDBVCTL) |= reference;
151 void LCD_B_setVLCDSource(uint16_t baseAddress,
153 uint16_t v2v3v4Source,
156 HWREG16(baseAddress + OFS_LCDBCTL0) &= ~LCDON;
157 HWREG16(baseAddress + OFS_LCDBVCTL) &= ~VLCDEXT;
158 HWREG16(baseAddress + OFS_LCDBVCTL) &= ~LCDREXT;
159 HWREG16(baseAddress + OFS_LCDBVCTL) &= ~LCDEXTBIAS;
160 HWREG16(baseAddress + OFS_LCDBVCTL) &= ~R03EXT;
162 HWREG16(baseAddress + OFS_LCDBVCTL) |= vlcdSource;
163 HWREG16(baseAddress + OFS_LCDBVCTL) |= v2v3v4Source;
164 HWREG16(baseAddress + OFS_LCDBVCTL) |= v5Source;
167 void LCD_B_setVLCDVoltage(uint16_t baseAddress,
170 HWREG16(baseAddress + OFS_LCDBCTL0) &= ~LCDON;
171 HWREG16(baseAddress + OFS_LCDBVCTL) &= ~VLCD_15;
173 HWREG16(baseAddress + OFS_LCDBVCTL) |= voltage;
176 void LCD_B_setPinAsLCDFunction (uint16_t baseAddress, uint8_t pin)
178 HWREG16(baseAddress + OFS_LCDBCTL0) &= ~LCDON;
180 uint8_t idx = pin>>4;
181 uint16_t val = 1<<(pin & 0xF);
183 setLCDFunction(baseAddress, idx, val);
187 void LCD_B_setPinAsPortFunction (uint16_t baseAddress, uint8_t pin)
189 HWREG16(baseAddress + OFS_LCDBCTL0) &= ~LCDON;
191 uint8_t idx = pin>>4;
192 uint16_t val = 1<<(pin & 0xF);
196 HWREG16(baseAddress + OFS_LCDBPCTL0) &= ~val;
199 HWREG16(baseAddress + OFS_LCDBPCTL1) &= ~val;
202 HWREG16(baseAddress + OFS_LCDBPCTL2) &= ~val;
205 HWREG16(baseAddress + OFS_LCDBPCTL3) &= ~val;
212 void LCD_B_setPinAsLCDFunctionEx(uint16_t baseAddress,
216 uint8_t startIdx = startPin>>4;
217 uint8_t endIdx = endPin>>4;
218 uint8_t startPos = startPin & 0xF;
219 uint8_t endPos = endPin & 0xF;
223 HWREG16(baseAddress + OFS_LCDBCTL0) &= ~LCDON;
225 if (startIdx == endIdx) {
226 val = (0xFFFF>>(15-endPos)) & (0xFFFF<<startPos);
228 setLCDFunction(baseAddress, startIdx, val);
232 val = 0xFFFF>>(15-endPos);
233 setLCDFunction(baseAddress, endIdx, val);
235 for (
i=endIdx-1;
i>startIdx;
i--) {
236 setLCDFunction(baseAddress,
i, 0xFFFF);
239 val = 0xFFFF<<startPos;
240 setLCDFunction(baseAddress, startIdx, val);
244 void LCD_B_setMemory(uint16_t baseAddress, uint8_t memory, uint8_t mask)
246 HWREG8(baseAddress + OFS_LCDM1 + memory) = mask;
249 void LCD_B_updateMemory(uint16_t baseAddress, uint8_t memory, uint8_t mask)
251 HWREG8(baseAddress + OFS_LCDM1 + memory) |= mask;
254 void LCD_B_toggleMemory(uint16_t baseAddress, uint8_t memory, uint8_t mask)
256 HWREG8(baseAddress + OFS_LCDM1 + memory) ^= mask;
259 void LCD_B_clearMemory(uint16_t baseAddress, uint8_t memory, uint8_t mask)
261 HWREG8(baseAddress + OFS_LCDM1 + memory) &= ~mask;
264 void LCD_B_setBlinkingMemory(uint16_t baseAddress, uint8_t memory, uint8_t mask)
266 HWREG8(baseAddress + OFS_LCDBM1 + memory) = mask;
269 void LCD_B_updateBlinkingMemory(uint16_t baseAddress, uint8_t memory, uint8_t mask)
271 HWREG8(baseAddress + OFS_LCDBM1 + memory) |= mask;
274 void LCD_B_toggleBlinkingMemory(uint16_t baseAddress, uint8_t memory, uint8_t mask)
276 HWREG8(baseAddress + OFS_LCDBM1 + memory) ^= mask;
279 void LCD_B_clearBlinkingMemory(uint16_t baseAddress, uint8_t memory, uint8_t mask)
281 HWREG8(baseAddress + OFS_LCDBM1 + memory) &= ~mask;
284 void LCD_B_configureChargePump(uint16_t baseAddress, uint16_t autoDisabled)
286 HWREG16(baseAddress + OFS_LCDBCPCTL) &= ~(LCDCPDIS7 | LCDCPDIS6 | LCDCPDIS5
287 | LCDCPDIS4 | LCDCPDIS3 | LCDCPDIS2 | LCDCPDIS1 | LCDCPDIS0);
289 HWREG16(baseAddress + OFS_LCDBCPCTL) |= autoDisabled;