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
DOGS102.h@5:e66152f036d9, 2016-10-17 (annotated)
- 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?
User | Revision | Line number | New 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 |