HT1621(TS119-5, TS174 )Library
HT1621.cpp@0:2377890cc77a, 2016-09-10 (annotated)
- Committer:
- og
- Date:
- Sat Sep 10 09:55:39 2016 +0000
- Revision:
- 0:2377890cc77a
HT1621(TS119-5, TS174) demo
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
og | 0:2377890cc77a | 1 | #include "HT1621.h" |
og | 0:2377890cc77a | 2 | |
og | 0:2377890cc77a | 3 | #define ADDR_MAX 128 |
og | 0:2377890cc77a | 4 | |
og | 0:2377890cc77a | 5 | #define TAKE_CS() _cs = 0 |
og | 0:2377890cc77a | 6 | #define RELEASE_CS() _cs = 1 |
og | 0:2377890cc77a | 7 | |
og | 0:2377890cc77a | 8 | HT1621::HT1621( |
og | 0:2377890cc77a | 9 | PinName data, PinName wr, PinName rd, PinName cs |
og | 0:2377890cc77a | 10 | ): |
og | 0:2377890cc77a | 11 | _data(data), _wr(wr), _rd(rd), _cs(cs) |
og | 0:2377890cc77a | 12 | { |
og | 0:2377890cc77a | 13 | _data.output(); |
og | 0:2377890cc77a | 14 | _data = 1; |
og | 0:2377890cc77a | 15 | _wr = 1; |
og | 0:2377890cc77a | 16 | _rd = 1; |
og | 0:2377890cc77a | 17 | _cs = 1; |
og | 0:2377890cc77a | 18 | sendCommand(SYS_DIS); |
og | 0:2377890cc77a | 19 | wait_ms(500); |
og | 0:2377890cc77a | 20 | //if (! testMem()) |
og | 0:2377890cc77a | 21 | // return false; |
og | 0:2377890cc77a | 22 | |
og | 0:2377890cc77a | 23 | memset(0, 0, ADDR_MAX); |
og | 0:2377890cc77a | 24 | sendCommand(SYS_EN); |
og | 0:2377890cc77a | 25 | sendCommand(LCD_ON); |
og | 0:2377890cc77a | 26 | } |
og | 0:2377890cc77a | 27 | |
og | 0:2377890cc77a | 28 | |
og | 0:2377890cc77a | 29 | inline bool HT1621::testMem() |
og | 0:2377890cc77a | 30 | { |
og | 0:2377890cc77a | 31 | uint8_t test = 10; |
og | 0:2377890cc77a | 32 | writeMem(0x5a, test); |
og | 0:2377890cc77a | 33 | if (readMem(0x5a) != test) |
og | 0:2377890cc77a | 34 | return false; |
og | 0:2377890cc77a | 35 | return true; |
og | 0:2377890cc77a | 36 | } |
og | 0:2377890cc77a | 37 | |
og | 0:2377890cc77a | 38 | |
og | 0:2377890cc77a | 39 | void HT1621::writeBits(uint8_t data, uint8_t cnt) |
og | 0:2377890cc77a | 40 | { |
og | 0:2377890cc77a | 41 | while (cnt) { |
og | 0:2377890cc77a | 42 | _wr = 0; |
og | 0:2377890cc77a | 43 | uint8_t bitval = (data & (1 << (cnt - 1))) ? 1 : 0; |
og | 0:2377890cc77a | 44 | _data = bitval; |
og | 0:2377890cc77a | 45 | //wait_ms(1); |
og | 0:2377890cc77a | 46 | _wr = 1; |
og | 0:2377890cc77a | 47 | cnt--; |
og | 0:2377890cc77a | 48 | } |
og | 0:2377890cc77a | 49 | } |
og | 0:2377890cc77a | 50 | |
og | 0:2377890cc77a | 51 | uint8_t HT1621::readBits(uint8_t cnt) |
og | 0:2377890cc77a | 52 | { |
og | 0:2377890cc77a | 53 | uint8_t data = 0; |
og | 0:2377890cc77a | 54 | _data.input(); |
og | 0:2377890cc77a | 55 | while (cnt) { |
og | 0:2377890cc77a | 56 | _rd = 0; |
og | 0:2377890cc77a | 57 | data += _data << (cnt - 1); |
og | 0:2377890cc77a | 58 | //wait_ms(1); |
og | 0:2377890cc77a | 59 | _rd= 1; |
og | 0:2377890cc77a | 60 | cnt--; |
og | 0:2377890cc77a | 61 | } |
og | 0:2377890cc77a | 62 | _data.output(); |
og | 0:2377890cc77a | 63 | return data; |
og | 0:2377890cc77a | 64 | } |
og | 0:2377890cc77a | 65 | |
og | 0:2377890cc77a | 66 | #define COMMAND_MODE 0b100 |
og | 0:2377890cc77a | 67 | void HT1621::sendCommand(uint8_t cmd, bool first /*= true*/, bool last /*= true*/) |
og | 0:2377890cc77a | 68 | { |
og | 0:2377890cc77a | 69 | if (first) { |
og | 0:2377890cc77a | 70 | TAKE_CS(); |
og | 0:2377890cc77a | 71 | writeBits(COMMAND_MODE, 3); |
og | 0:2377890cc77a | 72 | } |
og | 0:2377890cc77a | 73 | writeBits(cmd, 8); |
og | 0:2377890cc77a | 74 | writeBits(0, 1); //Last bit - don't care |
og | 0:2377890cc77a | 75 | if (last) |
og | 0:2377890cc77a | 76 | RELEASE_CS(); |
og | 0:2377890cc77a | 77 | } |
og | 0:2377890cc77a | 78 | |
og | 0:2377890cc77a | 79 | #define WRITE_MODE 0b101 |
og | 0:2377890cc77a | 80 | void HT1621::writeMem(uint8_t address, uint8_t data) |
og | 0:2377890cc77a | 81 | { |
og | 0:2377890cc77a | 82 | TAKE_CS(); |
og | 0:2377890cc77a | 83 | writeBits(WRITE_MODE, 3); |
og | 0:2377890cc77a | 84 | writeBits(address, 6); |
og | 0:2377890cc77a | 85 | writeBits(data, 4); |
og | 0:2377890cc77a | 86 | RELEASE_CS(); |
og | 0:2377890cc77a | 87 | } |
og | 0:2377890cc77a | 88 | |
og | 0:2377890cc77a | 89 | void HT1621::memset(uint8_t address, uint8_t data, uint8_t cnt) |
og | 0:2377890cc77a | 90 | { |
og | 0:2377890cc77a | 91 | TAKE_CS(); |
og | 0:2377890cc77a | 92 | writeBits(WRITE_MODE, 3); |
og | 0:2377890cc77a | 93 | writeBits(address, 6); |
og | 0:2377890cc77a | 94 | for (uint8_t i = 0; i < cnt; i++) |
og | 0:2377890cc77a | 95 | writeBits(data, 4); |
og | 0:2377890cc77a | 96 | RELEASE_CS(); |
og | 0:2377890cc77a | 97 | } |
og | 0:2377890cc77a | 98 | |
og | 0:2377890cc77a | 99 | //Write up to 256 values starting from address |
og | 0:2377890cc77a | 100 | //Note: Data is 8-bit aligned. This is not vary efficient |
og | 0:2377890cc77a | 101 | void HT1621::write(uint8_t address, uint8_t *data, uint8_t cnt) |
og | 0:2377890cc77a | 102 | { |
og | 0:2377890cc77a | 103 | TAKE_CS(); |
og | 0:2377890cc77a | 104 | writeBits(WRITE_MODE, 3); |
og | 0:2377890cc77a | 105 | writeBits(address, 6); |
og | 0:2377890cc77a | 106 | for (uint8_t i = 0; i < cnt; i++) |
og | 0:2377890cc77a | 107 | writeBits(data[i], 4); |
og | 0:2377890cc77a | 108 | RELEASE_CS(); |
og | 0:2377890cc77a | 109 | } |
og | 0:2377890cc77a | 110 | |
og | 0:2377890cc77a | 111 | #define READ_MODE 0b110 |
og | 0:2377890cc77a | 112 | uint8_t HT1621::readMem(uint8_t address) |
og | 0:2377890cc77a | 113 | { |
og | 0:2377890cc77a | 114 | uint8_t data; |
og | 0:2377890cc77a | 115 | TAKE_CS(); |
og | 0:2377890cc77a | 116 | writeBits(READ_MODE, 3); |
og | 0:2377890cc77a | 117 | writeBits(address, 6); |
og | 0:2377890cc77a | 118 | data = readBits(4); |
og | 0:2377890cc77a | 119 | RELEASE_CS(); |
og | 0:2377890cc77a | 120 | return data; |
og | 0:2377890cc77a | 121 | } |
og | 0:2377890cc77a | 122 | |
og | 0:2377890cc77a | 123 | #define READ_MODE 0b110 |
og | 0:2377890cc77a | 124 | void HT1621::read(uint8_t address, uint8_t *data, uint8_t cnt) |
og | 0:2377890cc77a | 125 | { |
og | 0:2377890cc77a | 126 | TAKE_CS(); |
og | 0:2377890cc77a | 127 | writeBits(READ_MODE, 3); |
og | 0:2377890cc77a | 128 | writeBits(address, 6); |
og | 0:2377890cc77a | 129 | for (uint8_t i = 0; i < cnt; i++) |
og | 0:2377890cc77a | 130 | data[i] = readBits(4); |
og | 0:2377890cc77a | 131 | RELEASE_CS(); |
og | 0:2377890cc77a | 132 | } |