diff options
author | Perry Hung <iperry@gmail.com> | 2011-02-28 18:16:03 -0500 |
---|---|---|
committer | Perry Hung <iperry@gmail.com> | 2011-02-28 18:16:03 -0500 |
commit | 1ba3d69c4a30c820edfd696d74346317379cc96a (patch) | |
tree | 1336d4ebf7c25973f37b4f15ff5b2eccfcc7783b /main.cpp | |
parent | 17aeb4e3dd9001ebe63a342c00b58cb7ac0e6231 (diff) | |
parent | f4cdcfa51096f73a49642c400681d91847137dfb (diff) | |
download | librambutan-1ba3d69c4a30c820edfd696d74346317379cc96a.tar.gz librambutan-1ba3d69c4a30c820edfd696d74346317379cc96a.zip |
i2c merge
Diffstat (limited to 'main.cpp')
-rw-r--r-- | main.cpp | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..0480b5d --- /dev/null +++ b/main.cpp @@ -0,0 +1,84 @@ +// Sample main.cpp file. Blinks the built-in LED, sends a message out +// USART2, and turns on PWM on pin 2. + +#include "wirish.h" +#include "i2c.h" + +static const uint8 slave_address = 0b1010001; + +#define NR_ELEMENTS 64 +uint8 buf0[NR_ELEMENTS + 2] = {0x0, 0x0}; +uint8 buf1[] = {0x0, 0x0}; +uint8 buf2[NR_ELEMENTS]; + +void setup() { + i2c_msg msgs[3]; + uint32 i; + + pinMode(BOARD_LED_PIN, OUTPUT); + + i2c_master_enable(I2C1, 0); + for (i = 0; i < sizeof buf0; i++) { + buf0[i + 2] = i & 0xFF; + } + +#if 0 + /* Write some bytes */ + msgs[0].addr = slave_address; + msgs[0].flags = 0; + msgs[0].length = sizeof buf0; + msgs[0].data = buf0; + + i2c_master_xfer(I2C1, msgs, 1); + delay(5); + return; +#endif + + msgs[1].addr = slave_address; + msgs[1].flags = 0; + msgs[1].length = sizeof buf1; + msgs[1].data = buf1; + + msgs[2].addr = slave_address; + msgs[2].flags = I2C_MSG_READ; + msgs[2].length = sizeof buf2; + msgs[2].data = buf2; + i2c_master_xfer(I2C1, msgs + 1, 2); +#if 0 + for (i = 0; i < 256; i++) { + /* Read it back */ + buf1[1] = i; + msgs[1].addr = slave_address; + msgs[1].flags = 0; + msgs[1].length = 2; + msgs[1].data = buf1; + + msgs[2].addr = slave_address; + msgs[2].flags = I2C_MSG_READ; + msgs[2].length = 1; + msgs[2].data = buf2; + i2c_master_xfer(I2C1, msgs + 1, 2); + delay(10); + } +#endif +} + +void loop() { + toggleLED(); + delay(100); +} + +// Force init to be called *first*, i.e. before static object allocation. +// Otherwise, statically allocated object that need libmaple may fail. +__attribute__(( constructor )) void premain() { + init(); +} + +int main(void) { + setup(); + + while (1) { + loop(); + } + return 0; +} |