Norimasa Okamoto
/
emuMMA8653
MMA8653 emulator for BBC micro:bit
Revision 0:157b6cf33ee8, committed 2016-05-07
- Comitter:
- va009039
- Date:
- Sat May 07 08:30:38 2016 +0000
- Commit message:
- first commit
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 157b6cf33ee8 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat May 07 08:30:38 2016 +0000 @@ -0,0 +1,87 @@ +// MMA8653 emulator for BBC micro:bit +#include "mbed.h" +#include "mbed_assert.h" + +#if defined(TARGET_KL25Z) + PinName const SDA = PTE25; + PinName const SCL = PTE24; + PinName const INT1 = PTA14; +#elif defined(TARGET_KL46Z) + PinName const SDA = PTE25; + PinName const SCL = PTE24; + PinName const INT1 = PTC5; +#elif defined(TARGET_K20D50M) + PinName const SDA = PTB1; + PinName const SCL = PTB0; + PinName const INT1 = PTC6; +#else + #error TARGET NOT DEFINED +#endif + +RawSerial pc(USBTX, USBRX); +DigitalOut led2(LED2); + +I2CSlave mma8653(I2C_SDA, I2C_SCL); +DigitalOut mma8653_int1(D13, 0); + +I2C mma8451(SDA, SCL); +DigitalIn mma8451_int1(INT1); + +#define MMA8653_DEFAULT_ADDR 0x3A + +#define MMA8653_OUT_X_MSB 0x01 +#define MMA8653_XYZ_DATA_CFG 0x0E +#define MMA8653_CTRL_REG1 0x2A +#define MMA8653_CTRL_REG2 0x2B +#define MMA8653_CTRL_REG3 0x2C +#define MMA8653_CTRL_REG4 0x2D +#define MMA8653_CTRL_REG5 0x2E + + int main() { + pc.baud(115200); + pc.printf("%s\n", __FILE__); + + char data[6]; + bool config = true; + bool sampleMMA8451 = false; + mma8653.address(MMA8653_DEFAULT_ADDR); + for(;;) { + switch (mma8653.receive()) { + case I2CSlave::WriteAddressed: + char buf[2]; + if (config) { + mma8653.read(buf, 2); + mma8451.write(MMA8653_DEFAULT_ADDR, buf, 2); + pc.printf(">> %02x %02x\n", buf[0], buf[1]); + if (buf[0] == MMA8653_CTRL_REG1 && buf[1] != 0x00) { + config = false; + mma8653_int1 = 1; + sampleMMA8451 = true; + } + } else { + mma8653.read(buf, 1); + pc.printf(">> %02x\n", buf[0]); + MBED_ASSERT(buf[0] == MMA8653_OUT_X_MSB); + } + break; + case I2CSlave::ReadAddressed: + mma8653.write(data, 6); + led2 = !led2; + mma8653_int1 = 1; + sampleMMA8451 = true; + pc.printf("<< %02x %02x %02x %02x %02x %02x\n", data[0], data[1], data[2], data[3], data[4], data[5]); + MBED_ASSERT(config == false); + break; + } + if (sampleMMA8451 && mma8451_int1 == 0) { + static const char reg[1] = {MMA8653_OUT_X_MSB}; + mma8451.write(MMA8653_DEFAULT_ADDR, reg, 1, true); + mma8451.read(MMA8653_DEFAULT_ADDR, data, sizeof(data)); +#if 0 + data[1] &= 0xc0; data[3] &= 0xc0; data[5] &= 0xc0; // 14bit to 10bit +#endif + sampleMMA8451 = false; + mma8653_int1 = 0; + } + } +}
diff -r 000000000000 -r 157b6cf33ee8 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sat May 07 08:30:38 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/aae6fcc7d9bb \ No newline at end of file