Device to measure angle and get IMU measurements.

Dependencies:   mbed commands BLE_API nRF51822

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?

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