SLAA548A october   2012  – august 2023 CC430F5123 , CC430F5125 , CC430F5133 , CC430F5135 , CC430F5137 , CC430F5143 , CC430F5145 , CC430F5147 , CC430F6125 , CC430F6126 , CC430F6127 , CC430F6135 , CC430F6137 , CC430F6147 , MSP430AFE221 , MSP430AFE222 , MSP430AFE223 , MSP430AFE231 , MSP430AFE232 , MSP430AFE233 , MSP430AFE251 , MSP430AFE252 , MSP430AFE253 , MSP430BT5190 , MSP430F1101A , MSP430F1111A , MSP430F1121A , MSP430F1122 , MSP430F1132 , MSP430F122 , MSP430F1222 , MSP430F123 , MSP430F1232 , MSP430F133 , MSP430F135 , MSP430F147 , MSP430F1471 , MSP430F148 , MSP430F1481 , MSP430F149 , MSP430F1491 , MSP430F155 , MSP430F156 , MSP430F157 , MSP430F1610 , MSP430F1611 , MSP430F1612 , MSP430F167 , MSP430F168 , MSP430F169 , MSP430F2001 , MSP430F2002 , MSP430F2003 , MSP430F2011 , MSP430F2012 , MSP430F2013 , MSP430F2013-EP , MSP430F2101 , MSP430F2111 , MSP430F2112 , MSP430F2121 , MSP430F2122 , MSP430F2131 , MSP430F2132 , MSP430F2232 , MSP430F2234 , MSP430F2252 , MSP430F2254 , MSP430F2272 , MSP430F2274 , MSP430F233 , MSP430F2330 , MSP430F235 , MSP430F2350 , MSP430F2370 , MSP430F2410 , MSP430F2416 , MSP430F2417 , MSP430F2418 , MSP430F2419 , MSP430F247 , MSP430F2471 , MSP430F248 , MSP430F2481 , MSP430F249 , MSP430F2491 , MSP430F2616 , MSP430F2617 , MSP430F2618 , MSP430F2619 , MSP430F412 , MSP430F413 , MSP430F4132 , MSP430F415 , MSP430F4152 , MSP430F417 , MSP430F423 , MSP430F423A , MSP430F425 , MSP430F4250 , MSP430F425A , MSP430F4260 , MSP430F427 , MSP430F4270 , MSP430F427A , MSP430F435 , MSP430F4351 , MSP430F436 , MSP430F4361 , MSP430F437 , MSP430F4371 , MSP430F438 , MSP430F439 , MSP430F447 , MSP430F448 , MSP430F4481 , MSP430F449 , MSP430F4491 , MSP430F4616 , MSP430F46161 , MSP430F4617 , MSP430F46171 , MSP430F4618 , MSP430F46181 , MSP430F4619 , MSP430F46191 , MSP430F47126 , MSP430F47127 , MSP430F47163 , MSP430F47166 , MSP430F47167 , MSP430F47173 , MSP430F47176 , MSP430F47177 , MSP430F47183 , MSP430F47186 , MSP430F47187 , MSP430F47193 , MSP430F47196 , MSP430F47197 , MSP430F477 , MSP430F478 , MSP430F4783 , MSP430F4784 , MSP430F479 , MSP430F4793 , MSP430F4794 , MSP430F5212 , MSP430F5214 , MSP430F5217 , MSP430F5219 , MSP430F5222 , MSP430F5224 , MSP430F5229 , MSP430F5232 , MSP430F5234 , MSP430F5237 , MSP430F5239 , MSP430F5242 , MSP430F5244 , MSP430F5247 , MSP430F5249 , MSP430F5252 , MSP430F5253 , MSP430F5254 , MSP430F5255 , MSP430F5256 , MSP430F5257 , MSP430F5258 , MSP430F5259 , MSP430F5304 , MSP430F5308 , MSP430F5309 , MSP430F5310 , MSP430F5324 , MSP430F5325 , MSP430F5326 , MSP430F5327 , MSP430F5328 , MSP430F5329 , MSP430F5333 , MSP430F5335 , MSP430F5336 , MSP430F5338 , MSP430F5340 , MSP430F5341 , MSP430F5342 , MSP430F5418 , MSP430F5418A , MSP430F5419 , MSP430F5419A , MSP430F5435 , MSP430F5435A , MSP430F5436 , MSP430F5436A , MSP430F5437 , MSP430F5437A , MSP430F5438 , MSP430F5438A , MSP430F5500 , MSP430F5501 , MSP430F5502 , MSP430F5503 , MSP430F5504 , MSP430F5505 , MSP430F5506 , MSP430F5507 , MSP430F5508 , MSP430F5509 , MSP430F5510 , MSP430F5630 , MSP430F5631 , MSP430F5632 , MSP430F5633 , MSP430F5634 , MSP430F5635 , MSP430F5636 , MSP430F5637 , MSP430F5638 , MSP430F6433 , MSP430F6435 , MSP430F6436 , MSP430F6438 , MSP430F6630 , MSP430F6631 , MSP430F6632 , MSP430F6633 , MSP430F6634 , MSP430F6635 , MSP430F6636 , MSP430F6637 , MSP430F6638 , MSP430F6659 , MSP430F6779 , MSP430FE423 , MSP430FE4232 , MSP430FE423A , MSP430FE4242 , MSP430FE425 , MSP430FE4252 , MSP430FE425A , MSP430FE427 , MSP430FE4272 , MSP430FE427A , MSP430FG4250 , MSP430FG4260 , MSP430FG4270 , MSP430FG4616 , MSP430FG4617 , MSP430FG4618 , MSP430FG4619 , MSP430FG477 , MSP430FG478 , MSP430FG479 , MSP430FR5720 , MSP430FR5721 , MSP430FR5722 , MSP430FR5723 , MSP430FR5724 , MSP430FR5725 , MSP430FR5726 , MSP430FR5727 , MSP430FR5728 , MSP430FR5729 , MSP430FR5730 , MSP430FR5731 , MSP430FR5732 , MSP430FR5733 , MSP430FR5734 , MSP430FR5735 , MSP430FR5736 , MSP430FR5737 , MSP430FR5738 , MSP430FR5739 , MSP430FW423 , MSP430FW425 , MSP430FW427 , MSP430FW428 , MSP430FW429 , MSP430G2001 , MSP430G2101 , MSP430G2102 , MSP430G2111 , MSP430G2112 , MSP430G2121 , MSP430G2131 , MSP430G2132 , MSP430G2152 , MSP430G2153 , MSP430G2201 , MSP430G2202 , MSP430G2203 , MSP430G2211 , MSP430G2212 , MSP430G2213 , MSP430G2221 , MSP430G2231 , MSP430G2232 , MSP430G2233 , MSP430G2252 , MSP430G2253 , MSP430G2302 , MSP430G2303 , MSP430G2312 , MSP430G2313 , MSP430G2332 , MSP430G2333 , MSP430G2352 , MSP430G2353 , MSP430G2402 , MSP430G2403 , MSP430G2412 , MSP430G2413 , MSP430G2432 , MSP430G2433 , MSP430G2452 , MSP430G2453 , MSP430G2513 , MSP430G2533 , MSP430G2553 , MSP430G2955 , MSP430L092

 

  1.   1
  2.   Design Considerations When Using MSP430 Graphics Library
  3.   Trademarks
  4. 1Introduction to the MSP430 Graphics Library
  5. 2System Overview
  6. 3Hardware Implementation - LCD Bus Type
    1. 3.1 Parallel Bus
    2. 3.2 SPI Bus
  7. 4Software Implementation- LCD Display Driver Layer
    1. 4.1 Driver Layer Components
    2. 4.2 Creating New LCD Driver Files
    3. 4.3 Optimizing the LCD Display Driver Layer for Speed
      1. 4.3.1 Utilizing LCD Controller Features
      2. 4.3.2 Coding Optimizations
    4. 4.4 Images in the MSP430 Graphics Library
      1. 4.4.1 Image Format
      2. 4.4.2 Image Conversion
      3. 4.4.3 MSP430 Image Reformer
      4. 4.4.4 Palette Conversion
      5. 4.4.5 Compression Types
        1. 4.4.5.1 Compressing Images With 16 Colors or Less
        2. 4.4.5.2 Compressing 256 Color Images
        3. 4.4.5.3 Choosing a Compression Type
  8. 5Design Example
    1. 5.1 Hardware Implementation
    2. 5.2 Bus Comparison
    3. 5.3 Software Implementation
  9. 6References
  10. 7Revision History

Utilizing LCD Controller Features

To fully optimize the LCD display driver layer, a good understanding of the different options and features of the LCD controller is required. This step is especially important when interfacing the MSP430 to more complex graphic LCDs. The efficiency of the LCD display driver has a direct impact on the draw speeds of every graphics primitive in the MSP430 Graphics Library. Eliminating even a single instruction can have a significant impact on drawing speed because the LCD driver layer functions are called for every pixel drawn.

An effective technique in optimizing the LCD driver layer is to take advantage of auto incrementing features of the LCD controller. Not every LCD controller has this functionality, but it is very common.

With the auto increment feature of the LCD controller enabled, the microcontroller can simply stream data rather than resetting the pixel location before each data write. This sounds like a small change but it has a substantial impact on the draw speed of functions that take advantage of it.

Looking at a simplified example illustrates how important the auto increment feature is. When drawing a horizontal line, a simple option would be to sit in a loop and repeatedly call the draw pixel function. This method works, but the draw pixel function requires setting the cursor location followed by the pixel data write to the LCD. This implementation is displayed on the left side below. Alternatively, the auto increment feature can be used and the cursor location is set only once, as it is automatically incremented by the LCD controller following a pixel data write. This implementation is displayed on the right side below.

DrawHorizLine(x1, x2, y, color)               DrawHorizLineOptimized(x1, x2, y, color)
{                                             {
   While(x1++ <= x2)                             SetCursorLocation(x1, y);
   {                                             While(x1++ <= x2)
      SetCursorLocation(x1, y);                  {
      WriteDataToLCD(color);                        WriteDataToLCD(color);
   }                                             }
}                                             }

For this example, it is assumed that SetCursorLocation() requires 20 clock cycles and WriteDataToLCD() requires 5 clock cycles.

Total clock cycles = (x2 – x1 + 1) * 25Total clock cycles = 20 + (x2 – x1 + 1) * 5

Neglecting the small overhead of the initial SetCursorLocation(), the right side is five times as fast as the left side. With a small and simple change, all horizontal lines now draw at five times the speed. Although this is a simplified example, it illustrates realistic gains that can be made by taking advantage of the auto increment feature of the LCD controller. This feature should be used throughout the LCD display driver whenever possible.

The auto increment feature is a great optimizing tool, but many LCDs have other built in features to take advantage of. Additional features include clearing the screen, flipping the pixel polarity, turning the screen orientation, and many more. These features are built into some LCD controllers because their common use provides functionality that would otherwise need to be written into the application or driver layer, thus consuming more cycles per pixel and slowing drawing times.