Added HangmanGame class, but does not work yet
Dependencies: SDFileSystem app epson mbed msp430 pl tests
pmic-tps65185.cpp@0:fa7450a43b99, 2017-12-04 (annotated)
- Committer:
- group-FlexBook
- Date:
- Mon Dec 04 09:32:20 2017 +0000
- Revision:
- 0:fa7450a43b99
Initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
group-FlexBook | 0:fa7450a43b99 | 1 | /* |
group-FlexBook | 0:fa7450a43b99 | 2 | Plastic Logic EPD project on MSP430 |
group-FlexBook | 0:fa7450a43b99 | 3 | |
group-FlexBook | 0:fa7450a43b99 | 4 | Copyright (C) 2013, 2014 Plastic Logic Limited |
group-FlexBook | 0:fa7450a43b99 | 5 | |
group-FlexBook | 0:fa7450a43b99 | 6 | This program is free software: you can redistribute it and/or modify |
group-FlexBook | 0:fa7450a43b99 | 7 | it under the terms of the GNU General Public License as published by |
group-FlexBook | 0:fa7450a43b99 | 8 | the Free Software Foundation, either version 3 of the License, or |
group-FlexBook | 0:fa7450a43b99 | 9 | (at your option) any later version. |
group-FlexBook | 0:fa7450a43b99 | 10 | |
group-FlexBook | 0:fa7450a43b99 | 11 | This program is distributed in the hope that it will be useful, |
group-FlexBook | 0:fa7450a43b99 | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
group-FlexBook | 0:fa7450a43b99 | 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
group-FlexBook | 0:fa7450a43b99 | 14 | GNU General Public License for more details. |
group-FlexBook | 0:fa7450a43b99 | 15 | |
group-FlexBook | 0:fa7450a43b99 | 16 | You should have received a copy of the GNU General Public License |
group-FlexBook | 0:fa7450a43b99 | 17 | along with this program. If not, see <http://www.gnu.org/licenses/>. |
group-FlexBook | 0:fa7450a43b99 | 18 | */ |
group-FlexBook | 0:fa7450a43b99 | 19 | /* |
group-FlexBook | 0:fa7450a43b99 | 20 | * pmic-tps65185.c -- Driver for TI TPS65185 PMIC |
group-FlexBook | 0:fa7450a43b99 | 21 | * |
group-FlexBook | 0:fa7450a43b99 | 22 | * Authors: |
group-FlexBook | 0:fa7450a43b99 | 23 | * Nick Terry <nick.terry@plasticlogic.com> |
group-FlexBook | 0:fa7450a43b99 | 24 | * Guillaume Tucker <guillaume.tucker@plasticlogic.com> |
group-FlexBook | 0:fa7450a43b99 | 25 | * |
group-FlexBook | 0:fa7450a43b99 | 26 | */ |
group-FlexBook | 0:fa7450a43b99 | 27 | |
group-FlexBook | 0:fa7450a43b99 | 28 | #include <stdlib.h> |
group-FlexBook | 0:fa7450a43b99 | 29 | #include "assert.h" |
group-FlexBook | 0:fa7450a43b99 | 30 | #include "pmic-tps65185.h" |
group-FlexBook | 0:fa7450a43b99 | 31 | #include "vcom.h" |
group-FlexBook | 0:fa7450a43b99 | 32 | |
group-FlexBook | 0:fa7450a43b99 | 33 | #define lOG printf |
group-FlexBook | 0:fa7450a43b99 | 34 | |
group-FlexBook | 0:fa7450a43b99 | 35 | #define LOG_TAG "tps65185" |
group-FlexBook | 0:fa7450a43b99 | 36 | #include "utils.h" |
group-FlexBook | 0:fa7450a43b99 | 37 | |
group-FlexBook | 0:fa7450a43b99 | 38 | /* Set to 1 to dump registers */ |
group-FlexBook | 0:fa7450a43b99 | 39 | #define DO_REG_DUMP 0 |
group-FlexBook | 0:fa7450a43b99 | 40 | |
group-FlexBook | 0:fa7450a43b99 | 41 | #define HVPMIC_DAC_MAX ((1 << 9)-1) |
group-FlexBook | 0:fa7450a43b99 | 42 | #define HVPMIC_DAC_MIN 0 |
group-FlexBook | 0:fa7450a43b99 | 43 | #define HVPMIC_TEMP_DEFAULT 20 |
group-FlexBook | 0:fa7450a43b99 | 44 | #define HVPMIC_VERSION 0x65 |
group-FlexBook | 0:fa7450a43b99 | 45 | |
group-FlexBook | 0:fa7450a43b99 | 46 | #if 0 |
group-FlexBook | 0:fa7450a43b99 | 47 | #define MV_DIV 33 // Each DAC step is 33mV |
group-FlexBook | 0:fa7450a43b99 | 48 | #endif |
group-FlexBook | 0:fa7450a43b99 | 49 | |
group-FlexBook | 0:fa7450a43b99 | 50 | enum tps65185_register { |
group-FlexBook | 0:fa7450a43b99 | 51 | HVPMIC_REG_TMST_VALUE = 0x00, |
group-FlexBook | 0:fa7450a43b99 | 52 | HVPMIC_REG_ENABLE = 0x01, |
group-FlexBook | 0:fa7450a43b99 | 53 | HVPMIC_REG_VADJ = 0x02, |
group-FlexBook | 0:fa7450a43b99 | 54 | HVPMIC_REG_VCOM1 = 0x03, |
group-FlexBook | 0:fa7450a43b99 | 55 | HVPMIC_REG_VCOM2 = 0x04, |
group-FlexBook | 0:fa7450a43b99 | 56 | HVPMIC_REG_INT_EN1 = 0x05, |
group-FlexBook | 0:fa7450a43b99 | 57 | HVPMIC_REG_INT_EN2 = 0x06, |
group-FlexBook | 0:fa7450a43b99 | 58 | HVPMIC_REG_INT1 = 0x07, |
group-FlexBook | 0:fa7450a43b99 | 59 | HVPMIC_REG_INT2 = 0x08, |
group-FlexBook | 0:fa7450a43b99 | 60 | HVPMIC_REG_UPSEQ0 = 0x09, |
group-FlexBook | 0:fa7450a43b99 | 61 | HVPMIC_REG_UPSEQ1 = 0x0A, |
group-FlexBook | 0:fa7450a43b99 | 62 | HVPMIC_REG_DWNSEQ0 = 0x0B, |
group-FlexBook | 0:fa7450a43b99 | 63 | HVPMIC_REG_DWNSEQ1 = 0x0C, |
group-FlexBook | 0:fa7450a43b99 | 64 | HVPMIC_REG_TMST1 = 0x0D, |
group-FlexBook | 0:fa7450a43b99 | 65 | HVPMIC_REG_TMST2 = 0x0E, |
group-FlexBook | 0:fa7450a43b99 | 66 | HVPMIC_REG_PG_STAT = 0x0F, |
group-FlexBook | 0:fa7450a43b99 | 67 | HVPMIC_REG_REV_ID = 0x10, |
group-FlexBook | 0:fa7450a43b99 | 68 | HVPMIC_REG_MAX |
group-FlexBook | 0:fa7450a43b99 | 69 | }; |
group-FlexBook | 0:fa7450a43b99 | 70 | |
group-FlexBook | 0:fa7450a43b99 | 71 | union tps65185_version { |
group-FlexBook | 0:fa7450a43b99 | 72 | struct { |
group-FlexBook | 0:fa7450a43b99 | 73 | char version:4; |
group-FlexBook | 0:fa7450a43b99 | 74 | char minor:2; |
group-FlexBook | 0:fa7450a43b99 | 75 | char major:2; |
group-FlexBook | 0:fa7450a43b99 | 76 | } v; |
group-FlexBook | 0:fa7450a43b99 | 77 | uint8_t byte; |
group-FlexBook | 0:fa7450a43b99 | 78 | }; |
group-FlexBook | 0:fa7450a43b99 | 79 | |
group-FlexBook | 0:fa7450a43b99 | 80 | struct pmic_data { |
group-FlexBook | 0:fa7450a43b99 | 81 | uint8_t reg; |
group-FlexBook | 0:fa7450a43b99 | 82 | uint8_t data; |
group-FlexBook | 0:fa7450a43b99 | 83 | }; |
group-FlexBook | 0:fa7450a43b99 | 84 | |
group-FlexBook | 0:fa7450a43b99 | 85 | static const struct pmic_data init_data[] = { |
group-FlexBook | 0:fa7450a43b99 | 86 | { HVPMIC_REG_ENABLE, 0x00 }, |
group-FlexBook | 0:fa7450a43b99 | 87 | { HVPMIC_REG_VADJ, 0x03 }, |
group-FlexBook | 0:fa7450a43b99 | 88 | { HVPMIC_REG_VCOM1, 0x00 }, |
group-FlexBook | 0:fa7450a43b99 | 89 | { HVPMIC_REG_VCOM2, 0x00 }, |
group-FlexBook | 0:fa7450a43b99 | 90 | { HVPMIC_REG_INT_EN1, 0x00 }, |
group-FlexBook | 0:fa7450a43b99 | 91 | { HVPMIC_REG_INT_EN2, 0x00 }, |
group-FlexBook | 0:fa7450a43b99 | 92 | { HVPMIC_REG_UPSEQ0, 0x78 }, |
group-FlexBook | 0:fa7450a43b99 | 93 | { HVPMIC_REG_UPSEQ1, 0x00 }, |
group-FlexBook | 0:fa7450a43b99 | 94 | { HVPMIC_REG_DWNSEQ0, 0x00 }, |
group-FlexBook | 0:fa7450a43b99 | 95 | { HVPMIC_REG_DWNSEQ1, 0x00 }, |
group-FlexBook | 0:fa7450a43b99 | 96 | { HVPMIC_REG_TMST1, 0x00 }, |
group-FlexBook | 0:fa7450a43b99 | 97 | { HVPMIC_REG_TMST2, 0x78 } |
group-FlexBook | 0:fa7450a43b99 | 98 | }; |
group-FlexBook | 0:fa7450a43b99 | 99 | |
group-FlexBook | 0:fa7450a43b99 | 100 | int pl_i2c_reg_read_8(I2C &i2c, uint8_t i2c_addr, uint8_t reg, uint8_t *data) |
group-FlexBook | 0:fa7450a43b99 | 101 | { |
group-FlexBook | 0:fa7450a43b99 | 102 | if (i2c.write(i2c_addr << 1, (char *) ®, 1, true)) |
group-FlexBook | 0:fa7450a43b99 | 103 | { |
group-FlexBook | 0:fa7450a43b99 | 104 | unsigned int log_addr = i2c_addr; |
group-FlexBook | 0:fa7450a43b99 | 105 | unsigned int log_reg = reg; |
group-FlexBook | 0:fa7450a43b99 | 106 | |
group-FlexBook | 0:fa7450a43b99 | 107 | LOG("error writing I2C address %x register %x in pl_i2c_reg_read_8", log_addr, log_reg); |
group-FlexBook | 0:fa7450a43b99 | 108 | i2c.stop(); |
group-FlexBook | 0:fa7450a43b99 | 109 | return -1; |
group-FlexBook | 0:fa7450a43b99 | 110 | } |
group-FlexBook | 0:fa7450a43b99 | 111 | |
group-FlexBook | 0:fa7450a43b99 | 112 | return i2c.read(i2c_addr << 1, (char *) data, 1); |
group-FlexBook | 0:fa7450a43b99 | 113 | } |
group-FlexBook | 0:fa7450a43b99 | 114 | |
group-FlexBook | 0:fa7450a43b99 | 115 | /* Note: reading some registers will modify the status of the device */ |
group-FlexBook | 0:fa7450a43b99 | 116 | void reg_dump(struct tps65185_info *p) |
group-FlexBook | 0:fa7450a43b99 | 117 | { |
group-FlexBook | 0:fa7450a43b99 | 118 | uint8_t data; |
group-FlexBook | 0:fa7450a43b99 | 119 | uint8_t reg; |
group-FlexBook | 0:fa7450a43b99 | 120 | |
group-FlexBook | 0:fa7450a43b99 | 121 | for (reg = HVPMIC_REG_TMST_VALUE; reg < HVPMIC_REG_MAX; reg++) { |
group-FlexBook | 0:fa7450a43b99 | 122 | if (!pl_i2c_reg_read_8(*p->i2c, p->i2c_addr, reg, &data)) |
group-FlexBook | 0:fa7450a43b99 | 123 | LOG("reg[0x%02X] = 0x%02X", reg, data); |
group-FlexBook | 0:fa7450a43b99 | 124 | } |
group-FlexBook | 0:fa7450a43b99 | 125 | } |
group-FlexBook | 0:fa7450a43b99 | 126 | |
group-FlexBook | 0:fa7450a43b99 | 127 | int pl_i2c_reg_write_8(I2C &i2c, uint8_t i2c_addr, uint8_t reg, |
group-FlexBook | 0:fa7450a43b99 | 128 | uint8_t data) |
group-FlexBook | 0:fa7450a43b99 | 129 | { |
group-FlexBook | 0:fa7450a43b99 | 130 | const uint8_t w_data[2] = { reg, data }; |
group-FlexBook | 0:fa7450a43b99 | 131 | |
group-FlexBook | 0:fa7450a43b99 | 132 | int status = i2c.write(i2c_addr << 1, (char *) w_data, sizeof(w_data)); |
group-FlexBook | 0:fa7450a43b99 | 133 | if(status) |
group-FlexBook | 0:fa7450a43b99 | 134 | { |
group-FlexBook | 0:fa7450a43b99 | 135 | unsigned int log_addr = i2c_addr; |
group-FlexBook | 0:fa7450a43b99 | 136 | unsigned int log_reg = reg; |
group-FlexBook | 0:fa7450a43b99 | 137 | |
group-FlexBook | 0:fa7450a43b99 | 138 | LOG("error writing I2C address %x register %x in pl_i2c_reg_write_8", log_addr, log_reg); |
group-FlexBook | 0:fa7450a43b99 | 139 | return -1; |
group-FlexBook | 0:fa7450a43b99 | 140 | } |
group-FlexBook | 0:fa7450a43b99 | 141 | return status; |
group-FlexBook | 0:fa7450a43b99 | 142 | } |
group-FlexBook | 0:fa7450a43b99 | 143 | |
group-FlexBook | 0:fa7450a43b99 | 144 | int tps65185_init(struct tps65185_info *p, I2C &i2c, |
group-FlexBook | 0:fa7450a43b99 | 145 | uint8_t i2c_addr, const struct vcom_cal *cal) |
group-FlexBook | 0:fa7450a43b99 | 146 | { |
group-FlexBook | 0:fa7450a43b99 | 147 | union tps65185_version ver; |
group-FlexBook | 0:fa7450a43b99 | 148 | int i; |
group-FlexBook | 0:fa7450a43b99 | 149 | |
group-FlexBook | 0:fa7450a43b99 | 150 | p->i2c = &i2c; |
group-FlexBook | 0:fa7450a43b99 | 151 | p->i2c_addr = i2c_addr; |
group-FlexBook | 0:fa7450a43b99 | 152 | p->cal = cal; /* Cal may be NULL if not being used */ |
group-FlexBook | 0:fa7450a43b99 | 153 | |
group-FlexBook | 0:fa7450a43b99 | 154 | if (pl_i2c_reg_read_8(i2c, i2c_addr, HVPMIC_REG_REV_ID, &ver.byte)) |
group-FlexBook | 0:fa7450a43b99 | 155 | return -1; |
group-FlexBook | 0:fa7450a43b99 | 156 | |
group-FlexBook | 0:fa7450a43b99 | 157 | LOG("Version: %d.%d.%d", ver.v.major, ver.v.minor, ver.v.version); |
group-FlexBook | 0:fa7450a43b99 | 158 | |
group-FlexBook | 0:fa7450a43b99 | 159 | if (ver.byte != HVPMIC_VERSION) { |
group-FlexBook | 0:fa7450a43b99 | 160 | LOG("Wrong version: 0x%02X instead of 0x%02X", |
group-FlexBook | 0:fa7450a43b99 | 161 | ver.byte, HVPMIC_VERSION); |
group-FlexBook | 0:fa7450a43b99 | 162 | return -1; |
group-FlexBook | 0:fa7450a43b99 | 163 | } |
group-FlexBook | 0:fa7450a43b99 | 164 | |
group-FlexBook | 0:fa7450a43b99 | 165 | for (i = 0; i < ARRAY_SIZE(init_data); i++) { |
group-FlexBook | 0:fa7450a43b99 | 166 | if (pl_i2c_reg_write_8(i2c, i2c_addr, init_data[i].reg, init_data[i].data)) |
group-FlexBook | 0:fa7450a43b99 | 167 | return -1; |
group-FlexBook | 0:fa7450a43b99 | 168 | } |
group-FlexBook | 0:fa7450a43b99 | 169 | |
group-FlexBook | 0:fa7450a43b99 | 170 | return 0; |
group-FlexBook | 0:fa7450a43b99 | 171 | } |
group-FlexBook | 0:fa7450a43b99 | 172 | |
group-FlexBook | 0:fa7450a43b99 | 173 | /* program the internal VCOM Dac to give us the required voltage */ |
group-FlexBook | 0:fa7450a43b99 | 174 | int tps65185_set_vcom_voltage(struct tps65185_info *p, int mv) |
group-FlexBook | 0:fa7450a43b99 | 175 | { |
group-FlexBook | 0:fa7450a43b99 | 176 | int dac_value; |
group-FlexBook | 0:fa7450a43b99 | 177 | uint8_t v1; |
group-FlexBook | 0:fa7450a43b99 | 178 | uint8_t v2; |
group-FlexBook | 0:fa7450a43b99 | 179 | |
group-FlexBook | 0:fa7450a43b99 | 180 | assert(p != NULL); |
group-FlexBook | 0:fa7450a43b99 | 181 | |
group-FlexBook | 0:fa7450a43b99 | 182 | dac_value = vcom_calculate(p->cal, mv); |
group-FlexBook | 0:fa7450a43b99 | 183 | |
group-FlexBook | 0:fa7450a43b99 | 184 | if (dac_value < HVPMIC_DAC_MIN) |
group-FlexBook | 0:fa7450a43b99 | 185 | dac_value = HVPMIC_DAC_MIN; |
group-FlexBook | 0:fa7450a43b99 | 186 | else if (dac_value > HVPMIC_DAC_MAX) |
group-FlexBook | 0:fa7450a43b99 | 187 | dac_value = HVPMIC_DAC_MAX; |
group-FlexBook | 0:fa7450a43b99 | 188 | |
group-FlexBook | 0:fa7450a43b99 | 189 | v1 = dac_value & 0x00FF; |
group-FlexBook | 0:fa7450a43b99 | 190 | v2 = ((dac_value >> 8) & 0x0001); |
group-FlexBook | 0:fa7450a43b99 | 191 | |
group-FlexBook | 0:fa7450a43b99 | 192 | if (pl_i2c_reg_write_8(*p->i2c, p->i2c_addr, HVPMIC_REG_VCOM1, v1)) |
group-FlexBook | 0:fa7450a43b99 | 193 | return -1; |
group-FlexBook | 0:fa7450a43b99 | 194 | |
group-FlexBook | 0:fa7450a43b99 | 195 | return pl_i2c_reg_write_8(*p->i2c, p->i2c_addr, HVPMIC_REG_VCOM2, v2); |
group-FlexBook | 0:fa7450a43b99 | 196 | } |