Class Module for EA DOGS102 Graphic LCD display SPI Interface

Dependents:   mDotEVBM2X MTDOT-EVB-LinkCheck-AL MTDOT-EVBDemo-DRH MTDOT_BOX_EVB_LCD_Helloworld ... more

Committer:
Leon Lindenfelser
Date:
Mon Oct 17 08:43:06 2016 -0500
Revision:
5:e66152f036d9
Parent:
0:f40dbeaefe69
Remove disable and enable of irqs around SPI accesses. Mbed5 takes care of peripheral access protection.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
falingtrea 0:f40dbeaefe69 1 /**
falingtrea 0:f40dbeaefe69 2 * @file DOGS102.h
falingtrea 0:f40dbeaefe69 3 * @brief Device driver - DOGS102 102x64 pixel Graphic LCD display W/RTOS support
falingtrea 0:f40dbeaefe69 4 * @author Tim Barr
falingtrea 0:f40dbeaefe69 5 * @version 1.0
falingtrea 0:f40dbeaefe69 6 * @see http://www.lcd-module.com/eng/pdf/grafik/dogs102-6e.pdf
falingtrea 0:f40dbeaefe69 7 * @see http://www.lcd-module.com/eng/pdf/zubehoer/uc1701.pdf
falingtrea 0:f40dbeaefe69 8 *
falingtrea 0:f40dbeaefe69 9 * Copyright (c) 2015
falingtrea 0:f40dbeaefe69 10 *
falingtrea 0:f40dbeaefe69 11 * Licensed under the Apache License, Version 2.0 (the "License");
falingtrea 0:f40dbeaefe69 12 * you may not use this file except in compliance with the License.
falingtrea 0:f40dbeaefe69 13 * You may obtain a copy of the License at
falingtrea 0:f40dbeaefe69 14 *
falingtrea 0:f40dbeaefe69 15 * http://www.apache.org/licenses/LICENSE-2.0
falingtrea 0:f40dbeaefe69 16 *
falingtrea 0:f40dbeaefe69 17 * Unless required by applicable law or agreed to in writing, software
falingtrea 0:f40dbeaefe69 18 * distributed under the License is distributed on an "AS IS" BASIS,
falingtrea 0:f40dbeaefe69 19 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
falingtrea 0:f40dbeaefe69 20 * See the License for the specific language governing permissions and
falingtrea 0:f40dbeaefe69 21 * limitations under the License.
falingtrea 0:f40dbeaefe69 22 *
falingtrea 0:f40dbeaefe69 23 */
falingtrea 0:f40dbeaefe69 24
falingtrea 0:f40dbeaefe69 25 #ifndef DOGS102_H
falingtrea 0:f40dbeaefe69 26 #define DOGS102_H
falingtrea 0:f40dbeaefe69 27
falingtrea 0:f40dbeaefe69 28 #include "mbed.h"
falingtrea 0:f40dbeaefe69 29
falingtrea 0:f40dbeaefe69 30 /** Using the Multitech MTDOT-EVB
falingtrea 0:f40dbeaefe69 31 *
falingtrea 0:f40dbeaefe69 32 * Example:
falingtrea 0:f40dbeaefe69 33 * @code
falingtrea 0:f40dbeaefe69 34 * #include "mbed.h"
falingtrea 0:f40dbeaefe69 35 * #include "DOGS102.h"
falingtrea 0:f40dbeaefe69 36 *
falingtrea 0:f40dbeaefe69 37
falingtrea 0:f40dbeaefe69 38 *
falingtrea 0:f40dbeaefe69 39 * int main()
falingtrea 0:f40dbeaefe69 40 * {
falingtrea 0:f40dbeaefe69 41
falingtrea 0:f40dbeaefe69 42 * }
falingtrea 0:f40dbeaefe69 43 * @endcode
falingtrea 0:f40dbeaefe69 44 */
falingtrea 0:f40dbeaefe69 45
falingtrea 0:f40dbeaefe69 46 /**
falingtrea 0:f40dbeaefe69 47 * @class DOGS102
falingtrea 0:f40dbeaefe69 48 * @brief API abstraction for the DOGS102 Liquid Crystal Graphics Display
falingtrea 0:f40dbeaefe69 49 * initial version will be polling only. Interrupt service will
falingtrea 0:f40dbeaefe69 50 * be added at a later point
falingtrea 0:f40dbeaefe69 51 */
falingtrea 0:f40dbeaefe69 52 #define LCDWIDTH 102
falingtrea 0:f40dbeaefe69 53 #define LCDHEIGHT 64
falingtrea 0:f40dbeaefe69 54 #define LCDPAGES 8 // LCDHEIGHT/8
falingtrea 0:f40dbeaefe69 55 /*
falingtrea 0:f40dbeaefe69 56
falingtrea 0:f40dbeaefe69 57 Each page is 8 lines, one byte per column
falingtrea 0:f40dbeaefe69 58
falingtrea 0:f40dbeaefe69 59 Col0
falingtrea 0:f40dbeaefe69 60 +---+--
falingtrea 0:f40dbeaefe69 61 | 0 |
falingtrea 0:f40dbeaefe69 62 Page 0 | 1 |
falingtrea 0:f40dbeaefe69 63 | 2 |
falingtrea 0:f40dbeaefe69 64 | 3 |
falingtrea 0:f40dbeaefe69 65 | 4 |
falingtrea 0:f40dbeaefe69 66 | 5 |
falingtrea 0:f40dbeaefe69 67 | 6 |
falingtrea 0:f40dbeaefe69 68 | 7 |
falingtrea 0:f40dbeaefe69 69 +---+--
falingtrea 0:f40dbeaefe69 70 */
falingtrea 0:f40dbeaefe69 71
falingtrea 0:f40dbeaefe69 72 class DOGS102
falingtrea 0:f40dbeaefe69 73 {
falingtrea 0:f40dbeaefe69 74 public:
falingtrea 0:f40dbeaefe69 75
falingtrea 0:f40dbeaefe69 76 /**
falingtrea 0:f40dbeaefe69 77 * @enum DATAMASKS
falingtrea 0:f40dbeaefe69 78 * @brief collection of data masks for commands
falingtrea 0:f40dbeaefe69 79 */
falingtrea 0:f40dbeaefe69 80
falingtrea 0:f40dbeaefe69 81 enum DATAMASKS
falingtrea 0:f40dbeaefe69 82 {
falingtrea 0:f40dbeaefe69 83 LSBMASK = 0x01,
falingtrea 0:f40dbeaefe69 84 WAMASK = 0x03,
falingtrea 0:f40dbeaefe69 85 PCMASK = 0x07,
falingtrea 0:f40dbeaefe69 86 LC1MASK = 0x08,
falingtrea 0:f40dbeaefe69 87 COLMASK = 0x0F,
falingtrea 0:f40dbeaefe69 88 SLMASK = 0x3F,
falingtrea 0:f40dbeaefe69 89 TCMASK = 0x80
falingtrea 0:f40dbeaefe69 90 };
falingtrea 0:f40dbeaefe69 91
falingtrea 0:f40dbeaefe69 92 /**
falingtrea 0:f40dbeaefe69 93 * @enum COMMANDS
falingtrea 0:f40dbeaefe69 94 * @brief The device command register map
falingtrea 0:f40dbeaefe69 95 */
falingtrea 0:f40dbeaefe69 96
falingtrea 0:f40dbeaefe69 97 enum COMMANDs
falingtrea 0:f40dbeaefe69 98 {
falingtrea 0:f40dbeaefe69 99 SETCOLADDRLSB = 0x00, // use COLMASK for data
falingtrea 0:f40dbeaefe69 100 SETCOLADDRMSB = 0x10, // use COLMASK for data
falingtrea 0:f40dbeaefe69 101 SETPWRCTRL = 0x28, // use PCMASK for data
falingtrea 0:f40dbeaefe69 102 SETSCROLLLINE = 0X40, // use SLMASK for data
falingtrea 0:f40dbeaefe69 103 SETPGADDR = 0xB0, // use COLMASK for data
falingtrea 0:f40dbeaefe69 104 SETVLCDRESRATIO = 0x20, // use PCMASK for data
falingtrea 0:f40dbeaefe69 105 SETELECVOL = 0x81, // double byte command use SLMASK for data
falingtrea 0:f40dbeaefe69 106 SETALLPIXELON = 0xA4, // use LSBMASK for data
falingtrea 0:f40dbeaefe69 107 SETINVDISP = 0xA6, // use LSBMASK for data
falingtrea 0:f40dbeaefe69 108 SETDISPEN = 0xAE, // use LSBMASK for data
falingtrea 0:f40dbeaefe69 109 SETSEGDIR = 0xA0, // use LSBMASK for data
falingtrea 0:f40dbeaefe69 110 SETCOMDIR = 0xC0, // use LC1MASK for data
falingtrea 0:f40dbeaefe69 111 SOFTRESET = 0xE2, // no data mask needed
falingtrea 0:f40dbeaefe69 112 SETLCDBIAS = 0xA2, // use LSBMASK for data
falingtrea 0:f40dbeaefe69 113 SETAPROGCTRL = 0xFA // Double byte command use WAMASK and TCMASK for data
falingtrea 0:f40dbeaefe69 114 };
falingtrea 0:f40dbeaefe69 115
falingtrea 0:f40dbeaefe69 116 /** Create the DOGS102 object
falingtrea 0:f40dbeaefe69 117 * @param spi - A defined SPI object
falingtrea 0:f40dbeaefe69 118 * @param spi_cs - a defined DigitalOut connected to CS pin of LCD
falingtrea 0:f40dbeaefe69 119 * @param cmnd_data - a defined Digitalout connected to Command/Data pin of LCD
falingtrea 0:f40dbeaefe69 120 */
falingtrea 0:f40dbeaefe69 121 DOGS102(SPI &spi, DigitalOut &spi_cs, DigitalOut &cmnd_data );
falingtrea 0:f40dbeaefe69 122
falingtrea 0:f40dbeaefe69 123 /** Clears the buffer memory
falingtrea 0:f40dbeaefe69 124 * This commands clears the display buffer if Update flag is set
falingtrea 0:f40dbeaefe69 125 * it clears the display directly if Update flagis cleared
falingtrea 0:f40dbeaefe69 126 */
falingtrea 0:f40dbeaefe69 127 void clearBuffer(void);
falingtrea 0:f40dbeaefe69 128
falingtrea 0:f40dbeaefe69 129 /*
falingtrea 0:f40dbeaefe69 130 * Writes text to display using specified font table
falingtrea 0:f40dbeaefe69 131 * @column - bit column where write starts
falingtrea 0:f40dbeaefe69 132 * @page - Page that write starts (0-7 valid) A page is 8 pixels vertical on display.
falingtrea 0:f40dbeaefe69 133 * @*font_address - address pointer to font table to use
falingtrea 0:f40dbeaefe69 134 * @*str - pointer to string array to display
falingtrea 0:f40dbeaefe69 135 * @size - size of data in str
falingtrea 0:f40dbeaefe69 136 */
falingtrea 0:f40dbeaefe69 137 void writeText(uint8_t column, uint8_t page, const uint8_t *font_address, const char *str, const uint8_t size);
falingtrea 0:f40dbeaefe69 138
falingtrea 0:f40dbeaefe69 139 /*
falingtrea 0:f40dbeaefe69 140 *Writes text to display using specified font table
falingtrea 0:f40dbeaefe69 141 * @column - bit column where write starts
falingtrea 0:f40dbeaefe69 142 * @page - Page that write starts (0-7 valid). A page is 8 pixels vertical on display.
falingtrea 0:f40dbeaefe69 143 * @*bm_address - pointer to uint8_t array with bitmap data to display
falingtrea 0:f40dbeaefe69 144 */
falingtrea 0:f40dbeaefe69 145 void writeBitmap(uint8_t column, uint8_t page, const uint8_t *bm_address);
falingtrea 0:f40dbeaefe69 146
falingtrea 0:f40dbeaefe69 147 /*
falingtrea 0:f40dbeaefe69 148 * Allows LCD buffer to be update without changing LCD
falingtrea 0:f40dbeaefe69 149 * Each call increments the Update semaphore and required a matching endUpdate
falingtrea 0:f40dbeaefe69 150 */
falingtrea 0:f40dbeaefe69 151 void startUpdate(void);
falingtrea 0:f40dbeaefe69 152
falingtrea 0:f40dbeaefe69 153 /*
falingtrea 0:f40dbeaefe69 154 * Enables direct updates to LCD and sends buffer to LCD
falingtrea 0:f40dbeaefe69 155 * Each call decrements the Update semephore. If the Update semaphore is cleared,
falingtrea 0:f40dbeaefe69 156 * the LCD is updated.
falingtrea 0:f40dbeaefe69 157 */
falingtrea 0:f40dbeaefe69 158 void endUpdate(void);
falingtrea 0:f40dbeaefe69 159
falingtrea 0:f40dbeaefe69 160 /** Gets state of update semaphore
falingtrea 0:f40dbeaefe69 161 * @return update semaphore flag state 0 = direct update of LCD >0 is update LCD buffer only
falingtrea 0:f40dbeaefe69 162 */
falingtrea 0:f40dbeaefe69 163 uint8_t getUpdateState(void);
falingtrea 0:f40dbeaefe69 164
falingtrea 0:f40dbeaefe69 165
falingtrea 0:f40dbeaefe69 166 private:
falingtrea 0:f40dbeaefe69 167
falingtrea 0:f40dbeaefe69 168 SPI *_spi;
falingtrea 0:f40dbeaefe69 169 DigitalOut *_lcd_cs;
falingtrea 0:f40dbeaefe69 170 DigitalOut *_cmnd_data;
falingtrea 0:f40dbeaefe69 171 uint8_t _lcdbuffer[LCDWIDTH*LCDPAGES];
falingtrea 0:f40dbeaefe69 172 uint8_t _update_flag;
falingtrea 0:f40dbeaefe69 173
falingtrea 0:f40dbeaefe69 174 uint8_t init(void);
falingtrea 0:f40dbeaefe69 175
falingtrea 0:f40dbeaefe69 176 void sendBuffer(const uint8_t* buffer);
falingtrea 0:f40dbeaefe69 177
falingtrea 0:f40dbeaefe69 178 /** Write to a command register
falingtrea 0:f40dbeaefe69 179 * @param reg - The register to be written
falingtrea 0:f40dbeaefe69 180 * @param data - pointer to char data buffer
falingtrea 0:f40dbeaefe69 181 * @param count - size of char data buffer, default 1 if not defined
falingtrea 0:f40dbeaefe69 182 */
falingtrea 0:f40dbeaefe69 183 uint8_t writeCommand(uint8_t const reg, uint8_t const data = 0) const;
falingtrea 0:f40dbeaefe69 184
falingtrea 0:f40dbeaefe69 185 /** Write data to LCD screen buffer (exposed for debugging reasons)
falingtrea 0:f40dbeaefe69 186 * @param count - Size of the char data buffer
falingtrea 0:f40dbeaefe69 187 * @param data - pointer to char data buffer
falingtrea 0:f40dbeaefe69 188 * @return The status
falingtrea 0:f40dbeaefe69 189 */
falingtrea 0:f40dbeaefe69 190 void writeData(const uint8_t* data, uint8_t count) const;
falingtrea 0:f40dbeaefe69 191
falingtrea 0:f40dbeaefe69 192 /** Sets the cursor location
falingtrea 0:f40dbeaefe69 193 * @param xcur - x-cursor location in pixels. value is clipped if outside display size
falingtrea 0:f40dbeaefe69 194 * @param ycur - y-cursor location in pixels. value is clipped if outside display size
falingtrea 0:f40dbeaefe69 195 * @return - modulus of page that data needs to be shifted
falingtrea 0:f40dbeaefe69 196 */
falingtrea 0:f40dbeaefe69 197 uint8_t setCursor(uint8_t xcur, uint8_t ycur);
falingtrea 0:f40dbeaefe69 198
falingtrea 0:f40dbeaefe69 199 };
falingtrea 0:f40dbeaefe69 200
falingtrea 0:f40dbeaefe69 201 #endif