HT1621(TS119-5, TS174 )Library

Dependents:   Demo_HT1621

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?

UserRevisionLine numberNew 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 }