Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of I2CSlave by
Revision 4:d1d5a02cc721, committed 2015-03-25
- Comitter:
- bridadan
- Date:
- Wed Mar 25 19:53:10 2015 +0000
- Parent:
- 3:1bb80997f316
- Commit message:
- Initial 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 1bb80997f316 -r d1d5a02cc721 main.cpp --- a/main.cpp Thu Aug 29 15:01:15 2013 +0000 +++ b/main.cpp Wed Mar 25 19:53:10 2015 +0000 @@ -1,41 +1,33 @@ -/*Program Example 7.6: I2C Slave, when called transfers switch state to mbed acting as Master, and -displays state of Master’ s switches on its leds. -*/ +// 24LC256 I2C EEPROM mock device +// Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/20001203U.pdf + #include <mbed.h> -I2CSlave slave(p28, p27); //Configure I2C slave -DigitalOut red_led(LED1); //red led -DigitalOut green_led(LED2); //green led -DigitalIn switch_ip1(p5); -DigitalIn switch_ip2(p6); -char switch_word ; //word we will send -char recd_val; //value received from master + +#define BUFF_SIZE 10 + +I2CSlave slave(p28, p27); int main() { - slave.address(0x52); - while (1) { - //set up switch_word from switches that are pressed - switch_word=0xa0; //set up a recognizable output pattern - if (switch_ip1==1) - switch_word=switch_word|0x01; - if (switch_ip2==1) - switch_word=switch_word|0x02; - slave.write(switch_word); //load up word to send - //test for I2C, and act accordingly - int i = slave.receive(); - if (i == 3){ //slave is addressed, Master will write - recd_val= slave.read(); - //now set leds according to received word - red_led=0; //preset both to 0 - green_led=0; - recd_val=recd_val&0x03; //AND out unwanted bits - if (recd_val==1) - red_led=1; - if (recd_val==2) - green_led=1; - if (recd_val==3){ - red_led=1; - green_led=1; - } - } + char buf[BUFF_SIZE]; // Only up to 10 bytes (8 bytes max sequential write) + slave.frequency(400000); + slave.address(0xA0); + + printf("Starting on address 0xA0\r\n"); + + while (1) { + int i = slave.receive(); + switch (i) { + case I2CSlave::ReadAddressed: + slave.write(buf + 2, 8); // buf[0 - 1] are just the address bytes (ignoring them) + break; + + case I2CSlave::WriteGeneral: + slave.read(buf, BUFF_SIZE); + break; + + case I2CSlave::WriteAddressed: + slave.read(buf, BUFF_SIZE); + break; } + } } \ No newline at end of file
diff -r 1bb80997f316 -r d1d5a02cc721 mbed.bld --- a/mbed.bld Thu Aug 29 15:01:15 2013 +0000 +++ b/mbed.bld Wed Mar 25 19:53:10 2015 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/9c8f0e3462fb \ No newline at end of file +http://mbed.org/users/mbed_official/code/mbed/builds/7e07b6fb45cf \ No newline at end of file