Device to measure angle and get IMU measurements.
Dependencies: mbed commands BLE_API nRF51822
Storage.cpp@4:2a5a08b14539, 2015-06-03 (annotated)
- Committer:
- dkester
- Date:
- Wed Jun 03 15:10:45 2015 +0000
- Revision:
- 4:2a5a08b14539
- Parent:
- 3:a3e1a06c486d
- Child:
- 5:46947b447701
Remove GonioTrainer class
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dkester | 0:1c5088dae6e1 | 1 | #include "Storage.h" |
dkester | 0:1c5088dae6e1 | 2 | |
dkester | 0:1c5088dae6e1 | 3 | SPI spi(p20, p22, p25); // mosi, miso, sclk |
dkester | 1:b44bd62c542f | 4 | DigitalOut cs(p14); |
dkester | 0:1c5088dae6e1 | 5 | |
dkester | 0:1c5088dae6e1 | 6 | Storage* Storage::instance = new Storage(); |
dkester | 0:1c5088dae6e1 | 7 | |
dkester | 0:1c5088dae6e1 | 8 | Storage::Storage() |
dkester | 0:1c5088dae6e1 | 9 | { |
dkester | 0:1c5088dae6e1 | 10 | cs = 1; |
dkester | 1:b44bd62c542f | 11 | spi.format(8,0); |
dkester | 4:2a5a08b14539 | 12 | spi.frequency(200000); |
dkester | 0:1c5088dae6e1 | 13 | } |
dkester | 0:1c5088dae6e1 | 14 | |
dkester | 0:1c5088dae6e1 | 15 | Storage* Storage::getInstance() |
dkester | 0:1c5088dae6e1 | 16 | { |
dkester | 0:1c5088dae6e1 | 17 | return instance; |
dkester | 0:1c5088dae6e1 | 18 | } |
dkester | 0:1c5088dae6e1 | 19 | |
dkester | 4:2a5a08b14539 | 20 | void Storage::setup() |
dkester | 4:2a5a08b14539 | 21 | { |
dkester | 4:2a5a08b14539 | 22 | } |
dkester | 4:2a5a08b14539 | 23 | |
dkester | 4:2a5a08b14539 | 24 | void Storage::endAction() |
dkester | 4:2a5a08b14539 | 25 | { |
dkester | 3:a3e1a06c486d | 26 | cs = 1; |
dkester | 4:2a5a08b14539 | 27 | } |
dkester | 4:2a5a08b14539 | 28 | |
dkester | 4:2a5a08b14539 | 29 | void Storage::setWRDI() |
dkester | 4:2a5a08b14539 | 30 | { |
dkester | 4:2a5a08b14539 | 31 | cs = 0; |
dkester | 4:2a5a08b14539 | 32 | spi.write(0x04); |
dkester | 4:2a5a08b14539 | 33 | cs = 1; |
dkester | 4:2a5a08b14539 | 34 | } |
dkester | 4:2a5a08b14539 | 35 | |
dkester | 4:2a5a08b14539 | 36 | void Storage::setWREN() |
dkester | 4:2a5a08b14539 | 37 | { |
dkester | 3:a3e1a06c486d | 38 | cs = 0; |
dkester | 3:a3e1a06c486d | 39 | spi.write(0x06); |
dkester | 3:a3e1a06c486d | 40 | cs = 1; |
dkester | 4:2a5a08b14539 | 41 | /* |
dkester | 4:2a5a08b14539 | 42 | wait(0.001); |
dkester | 4:2a5a08b14539 | 43 | |
dkester | 4:2a5a08b14539 | 44 | cs = 0; |
dkester | 4:2a5a08b14539 | 45 | spi.write(0x05); |
dkester | 4:2a5a08b14539 | 46 | |
dkester | 4:2a5a08b14539 | 47 | if(spi.write(0x00) & 0x2) { |
dkester | 4:2a5a08b14539 | 48 | cs = 1; |
dkester | 4:2a5a08b14539 | 49 | return true; |
dkester | 4:2a5a08b14539 | 50 | } else { |
dkester | 4:2a5a08b14539 | 51 | cs = 1; |
dkester | 4:2a5a08b14539 | 52 | return false; |
dkester | 4:2a5a08b14539 | 53 | } |
dkester | 4:2a5a08b14539 | 54 | */ |
dkester | 4:2a5a08b14539 | 55 | } |
dkester | 4:2a5a08b14539 | 56 | |
dkester | 4:2a5a08b14539 | 57 | //for debug |
dkester | 4:2a5a08b14539 | 58 | int8_t Storage::getSR1() |
dkester | 4:2a5a08b14539 | 59 | { |
dkester | 1:b44bd62c542f | 60 | cs = 0; |
dkester | 3:a3e1a06c486d | 61 | spi.write(0x05); |
dkester | 4:2a5a08b14539 | 62 | int8_t status = spi.write(0x00); |
dkester | 4:2a5a08b14539 | 63 | cs = 1; |
dkester | 4:2a5a08b14539 | 64 | return status; |
dkester | 4:2a5a08b14539 | 65 | } |
dkester | 4:2a5a08b14539 | 66 | |
dkester | 4:2a5a08b14539 | 67 | int8_t Storage::getSR2() |
dkester | 4:2a5a08b14539 | 68 | { |
dkester | 4:2a5a08b14539 | 69 | cs = 0; |
dkester | 4:2a5a08b14539 | 70 | spi.write(0x35); |
dkester | 4:2a5a08b14539 | 71 | int8_t status = spi.write(0x00); |
dkester | 4:2a5a08b14539 | 72 | cs = 1; |
dkester | 4:2a5a08b14539 | 73 | return status; |
dkester | 4:2a5a08b14539 | 74 | } |
dkester | 4:2a5a08b14539 | 75 | |
dkester | 4:2a5a08b14539 | 76 | void Storage::clearSR(){ |
dkester | 4:2a5a08b14539 | 77 | cs = 0; |
dkester | 4:2a5a08b14539 | 78 | spi.write(0x30); |
dkester | 4:2a5a08b14539 | 79 | cs = 1; |
dkester | 4:2a5a08b14539 | 80 | } |
dkester | 4:2a5a08b14539 | 81 | |
dkester | 4:2a5a08b14539 | 82 | bool Storage::isBusy() |
dkester | 4:2a5a08b14539 | 83 | { |
dkester | 4:2a5a08b14539 | 84 | cs = 0; |
dkester | 4:2a5a08b14539 | 85 | spi.write(0x05); |
dkester | 4:2a5a08b14539 | 86 | |
dkester | 4:2a5a08b14539 | 87 | if(spi.write(0x00) & 0x1) { |
dkester | 4:2a5a08b14539 | 88 | cs = 1; |
dkester | 3:a3e1a06c486d | 89 | return true; |
dkester | 3:a3e1a06c486d | 90 | } else { |
dkester | 4:2a5a08b14539 | 91 | cs = 1; |
dkester | 4:2a5a08b14539 | 92 | return false; |
dkester | 3:a3e1a06c486d | 93 | } |
dkester | 3:a3e1a06c486d | 94 | } |
dkester | 3:a3e1a06c486d | 95 | |
dkester | 4:2a5a08b14539 | 96 | void Storage::pageProgram(int32_t addr) |
dkester | 4:2a5a08b14539 | 97 | { |
dkester | 4:2a5a08b14539 | 98 | setWREN(); |
dkester | 3:a3e1a06c486d | 99 | cs = 0; |
dkester | 4:2a5a08b14539 | 100 | spi.write(0x12); |
dkester | 4:2a5a08b14539 | 101 | |
dkester | 4:2a5a08b14539 | 102 | char bytes[4]; |
dkester | 4:2a5a08b14539 | 103 | bytes[0] = (addr >> 24) & 0xff; |
dkester | 4:2a5a08b14539 | 104 | bytes[1] = (addr >> 16) & 0xff; |
dkester | 4:2a5a08b14539 | 105 | bytes[2] = (addr >> 8) & 0xff; |
dkester | 4:2a5a08b14539 | 106 | bytes[3] = addr & 0xff; |
dkester | 4:2a5a08b14539 | 107 | |
dkester | 4:2a5a08b14539 | 108 | spi.write(bytes[0]); |
dkester | 4:2a5a08b14539 | 109 | spi.write(bytes[1]); |
dkester | 4:2a5a08b14539 | 110 | spi.write(bytes[2]); |
dkester | 4:2a5a08b14539 | 111 | spi.write(bytes[3]); |
dkester | 4:2a5a08b14539 | 112 | /* |
dkester | 4:2a5a08b14539 | 113 | for(int i = 3; i >= 0; i--){ |
dkester | 4:2a5a08b14539 | 114 | spi.write((addr >> (8*i)) & 0xff); |
dkester | 3:a3e1a06c486d | 115 | } |
dkester | 4:2a5a08b14539 | 116 | */ |
dkester | 3:a3e1a06c486d | 117 | } |
dkester | 4:2a5a08b14539 | 118 | |
dkester | 4:2a5a08b14539 | 119 | void Storage::writeData(int8_t data) |
dkester | 4:2a5a08b14539 | 120 | { |
dkester | 3:a3e1a06c486d | 121 | spi.write(data); |
dkester | 4:2a5a08b14539 | 122 | } |
dkester | 4:2a5a08b14539 | 123 | |
dkester | 4:2a5a08b14539 | 124 | void Storage::read(int32_t addr) |
dkester | 4:2a5a08b14539 | 125 | { |
dkester | 3:a3e1a06c486d | 126 | cs = 0; |
dkester | 4:2a5a08b14539 | 127 | |
dkester | 3:a3e1a06c486d | 128 | spi.write(0x13); |
dkester | 4:2a5a08b14539 | 129 | |
dkester | 4:2a5a08b14539 | 130 | char bytes[4]; |
dkester | 4:2a5a08b14539 | 131 | bytes[0] = (addr >> 24) & 0xff; |
dkester | 4:2a5a08b14539 | 132 | bytes[1] = (addr >> 16) & 0xff; |
dkester | 4:2a5a08b14539 | 133 | bytes[2] = (addr >> 8) & 0xff; |
dkester | 4:2a5a08b14539 | 134 | bytes[3] = addr & 0xff; |
dkester | 4:2a5a08b14539 | 135 | |
dkester | 4:2a5a08b14539 | 136 | |
dkester | 4:2a5a08b14539 | 137 | spi.write(bytes[0]); |
dkester | 4:2a5a08b14539 | 138 | spi.write(bytes[1]); |
dkester | 4:2a5a08b14539 | 139 | spi.write(bytes[2]); |
dkester | 4:2a5a08b14539 | 140 | spi.write(bytes[3]); |
dkester | 4:2a5a08b14539 | 141 | |
dkester | 4:2a5a08b14539 | 142 | |
dkester | 4:2a5a08b14539 | 143 | //for(int i = 3; i >= 0; i--){ |
dkester | 4:2a5a08b14539 | 144 | // spi.write((addr >> (8*i)) & 0xff); |
dkester | 4:2a5a08b14539 | 145 | //} |
dkester | 4:2a5a08b14539 | 146 | } |
dkester | 4:2a5a08b14539 | 147 | |
dkester | 4:2a5a08b14539 | 148 | int8_t Storage::readData() |
dkester | 4:2a5a08b14539 | 149 | { |
dkester | 4:2a5a08b14539 | 150 | return spi.write(0x00); |
dkester | 4:2a5a08b14539 | 151 | } |
dkester | 4:2a5a08b14539 | 152 | |
dkester | 4:2a5a08b14539 | 153 | void Storage::bulkErase() |
dkester | 4:2a5a08b14539 | 154 | { |
dkester | 4:2a5a08b14539 | 155 | cs = 0; |
dkester | 4:2a5a08b14539 | 156 | spi.write(0x60); |
dkester | 4:2a5a08b14539 | 157 | wait(0.001); |
dkester | 4:2a5a08b14539 | 158 | cs = 1; |
dkester | 4:2a5a08b14539 | 159 | } |
dkester | 4:2a5a08b14539 | 160 | |
dkester | 4:2a5a08b14539 | 161 | void Storage::reset() |
dkester | 4:2a5a08b14539 | 162 | { |
dkester | 4:2a5a08b14539 | 163 | cs = 0; |
dkester | 4:2a5a08b14539 | 164 | spi.write(0xF0); |
dkester | 4:2a5a08b14539 | 165 | cs = 1; |
dkester | 4:2a5a08b14539 | 166 | } |
dkester | 4:2a5a08b14539 | 167 | |
dkester | 4:2a5a08b14539 | 168 | void Storage::sectorErase(int32_t addr) |
dkester | 4:2a5a08b14539 | 169 | { |
dkester | 4:2a5a08b14539 | 170 | setWREN(); |
dkester | 4:2a5a08b14539 | 171 | cs = 0; |
dkester | 4:2a5a08b14539 | 172 | spi.write(0xDC); |
dkester | 4:2a5a08b14539 | 173 | |
dkester | 4:2a5a08b14539 | 174 | char bytes[4]; |
dkester | 4:2a5a08b14539 | 175 | bytes[0] = (addr >> 24) & 0xff; |
dkester | 4:2a5a08b14539 | 176 | bytes[1] = (addr >> 16) & 0xff; |
dkester | 4:2a5a08b14539 | 177 | bytes[2] = (addr >> 8) & 0xff; |
dkester | 4:2a5a08b14539 | 178 | bytes[3] = addr & 0xff; |
dkester | 4:2a5a08b14539 | 179 | |
dkester | 4:2a5a08b14539 | 180 | spi.write(bytes[0]); |
dkester | 4:2a5a08b14539 | 181 | spi.write(bytes[1]); |
dkester | 4:2a5a08b14539 | 182 | spi.write(bytes[2]); |
dkester | 4:2a5a08b14539 | 183 | spi.write(bytes[3]); |
dkester | 0:1c5088dae6e1 | 184 | |
dkester | 4:2a5a08b14539 | 185 | cs = 1; |
dkester | 4:2a5a08b14539 | 186 | } |
dkester | 3:a3e1a06c486d | 187 |