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.
main.cpp@3:01b322df3731, 2014-10-13 (annotated)
- Committer:
- dwini
- Date:
- Mon Oct 13 14:50:01 2014 +0000
- Revision:
- 3:01b322df3731
- Parent:
- 2:49bb6ee1191c
- Child:
- 4:f537311ddc53
Add memory print
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| dwini | 0:e24b497adfce | 1 | #include "mbed.h" |
| dwini | 0:e24b497adfce | 2 | |
| dwini | 1:e8ff4ff5a726 | 3 | DigitalOut aLED(LED1); |
| dwini | 0:e24b497adfce | 4 | Serial pc(USBTX, USBRX); // tx, rx |
| dwini | 0:e24b497adfce | 5 | I2CSlave slave(p28, p27); |
| dwini | 0:e24b497adfce | 6 | |
| dwini | 1:e8ff4ff5a726 | 7 | const int SLAVE_ADDRESS = 0x84; |
| dwini | 0:e24b497adfce | 8 | const int MEMORY_SIZE = 16; |
| dwini | 2:49bb6ee1191c | 9 | const int I2C_FREQUENCY = 100000; |
| dwini | 2:49bb6ee1191c | 10 | const int I2C_BUFFER_SIZE = 10; |
| dwini | 2:49bb6ee1191c | 11 | |
| dwini | 3:01b322df3731 | 12 | enum COMMAND { PUSH, PULL, CLEAR, PRINT }; |
| dwini | 0:e24b497adfce | 13 | |
| dwini | 0:e24b497adfce | 14 | int memory[MEMORY_SIZE]; |
| dwini | 0:e24b497adfce | 15 | |
| dwini | 2:49bb6ee1191c | 16 | /* |
| dwini | 2:49bb6ee1191c | 17 | * Set all memory locations to 0x55 |
| dwini | 2:49bb6ee1191c | 18 | */ |
| dwini | 0:e24b497adfce | 19 | void initializeMemory(void) |
| dwini | 0:e24b497adfce | 20 | { |
| dwini | 0:e24b497adfce | 21 | for (int i = 0; i < MEMORY_SIZE; i++) { |
| dwini | 3:01b322df3731 | 22 | memory[i] = -1; |
| dwini | 3:01b322df3731 | 23 | } |
| dwini | 3:01b322df3731 | 24 | } |
| dwini | 3:01b322df3731 | 25 | |
| dwini | 3:01b322df3731 | 26 | /* |
| dwini | 3:01b322df3731 | 27 | * Print current memory content |
| dwini | 3:01b322df3731 | 28 | */ |
| dwini | 3:01b322df3731 | 29 | void printMemory(void) |
| dwini | 3:01b322df3731 | 30 | { |
| dwini | 3:01b322df3731 | 31 | for (int i = 0; i < MEMORY_SIZE; i++) { |
| dwini | 3:01b322df3731 | 32 | pc.printf("%d@0x%x\r\n", memory[i], i); |
| dwini | 0:e24b497adfce | 33 | } |
| dwini | 0:e24b497adfce | 34 | } |
| dwini | 0:e24b497adfce | 35 | |
| dwini | 0:e24b497adfce | 36 | int main() { |
| dwini | 0:e24b497adfce | 37 | pc.baud(115200); |
| dwini | 0:e24b497adfce | 38 | pc.printf("Size of integer is %d bytes\r\n", sizeof(int)); |
| dwini | 0:e24b497adfce | 39 | pc.printf("Size of memory buffer is %d elements\r\n", MEMORY_SIZE); |
| dwini | 2:49bb6ee1191c | 40 | |
| dwini | 2:49bb6ee1191c | 41 | // Alive LED |
| dwini | 2:49bb6ee1191c | 42 | int cAlive = 0; |
| dwini | 2:49bb6ee1191c | 43 | |
| dwini | 2:49bb6ee1191c | 44 | // Configure I2C |
| dwini | 2:49bb6ee1191c | 45 | slave.frequency(I2C_FREQUENCY); |
| dwini | 2:49bb6ee1191c | 46 | pc.printf("Slave is working @ %dHz\r\n", I2C_FREQUENCY); |
| dwini | 2:49bb6ee1191c | 47 | slave.address(SLAVE_ADDRESS); |
| dwini | 2:49bb6ee1191c | 48 | pc.printf("Slave is working @ SLAVE_ADDRESS = 0x%x\r\n", SLAVE_ADDRESS); |
| dwini | 0:e24b497adfce | 49 | |
| dwini | 0:e24b497adfce | 50 | // Make sure memory buffer is zeroed |
| dwini | 0:e24b497adfce | 51 | initializeMemory(); |
| dwini | 3:01b322df3731 | 52 | printMemory(); |
| dwini | 0:e24b497adfce | 53 | |
| dwini | 2:49bb6ee1191c | 54 | // I2C buffer |
| dwini | 2:49bb6ee1191c | 55 | char buffer[I2C_BUFFER_SIZE]; |
| dwini | 0:e24b497adfce | 56 | |
| dwini | 0:e24b497adfce | 57 | while (1) { |
| dwini | 0:e24b497adfce | 58 | int i = slave.receive(); |
| dwini | 0:e24b497adfce | 59 | switch (i) { |
| dwini | 2:49bb6ee1191c | 60 | /*case I2CSlave::ReadAddressed: |
| dwini | 0:e24b497adfce | 61 | pc.printf("Slave received command: %d [ReadAddressed]\r\n", i); |
| dwini | 0:e24b497adfce | 62 | |
| dwini | 0:e24b497adfce | 63 | if (slave.write(msg, strlen(msg) + 1) == 0) { |
| dwini | 0:e24b497adfce | 64 | printf("Sending %s to master\r\n", msg); |
| dwini | 0:e24b497adfce | 65 | } |
| dwini | 2:49bb6ee1191c | 66 | break;*/ |
| dwini | 0:e24b497adfce | 67 | |
| dwini | 0:e24b497adfce | 68 | case I2CSlave::WriteAddressed: |
| dwini | 2:49bb6ee1191c | 69 | |
| dwini | 2:49bb6ee1191c | 70 | if (!slave.read(buffer, I2C_BUFFER_SIZE)) { |
| dwini | 2:49bb6ee1191c | 71 | // Check command byte |
| dwini | 2:49bb6ee1191c | 72 | switch (buffer[0]) { |
| dwini | 2:49bb6ee1191c | 73 | case PUSH: |
| dwini | 2:49bb6ee1191c | 74 | pc.printf("Storing %d@%d\r\n", *((int*)(&(buffer[2]))), buffer[1]); |
| dwini | 2:49bb6ee1191c | 75 | if (buffer[1] < MEMORY_SIZE) { |
| dwini | 2:49bb6ee1191c | 76 | memory[buffer[1]] = *((int*)(&(buffer[2]))); |
| dwini | 2:49bb6ee1191c | 77 | } else { |
| dwini | 2:49bb6ee1191c | 78 | pc.printf("Address out of boundary\r\n"); |
| dwini | 2:49bb6ee1191c | 79 | } |
| dwini | 2:49bb6ee1191c | 80 | break; |
| dwini | 2:49bb6ee1191c | 81 | |
| dwini | 3:01b322df3731 | 82 | case PRINT: |
| dwini | 3:01b322df3731 | 83 | printMemory(); |
| dwini | 3:01b322df3731 | 84 | break; |
| dwini | 3:01b322df3731 | 85 | |
| dwini | 2:49bb6ee1191c | 86 | default: |
| dwini | 2:49bb6ee1191c | 87 | pc.printf("Unknown command byte\r\n"); |
| dwini | 2:49bb6ee1191c | 88 | } |
| dwini | 2:49bb6ee1191c | 89 | } else { |
| dwini | 2:49bb6ee1191c | 90 | pc.printf("Received WriteAddressed] without data\r\n"); |
| dwini | 0:e24b497adfce | 91 | } |
| dwini | 0:e24b497adfce | 92 | break; |
| dwini | 0:e24b497adfce | 93 | } |
| dwini | 2:49bb6ee1191c | 94 | |
| dwini | 2:49bb6ee1191c | 95 | // Clear buffer |
| dwini | 2:49bb6ee1191c | 96 | for (int i = 0; i < I2C_BUFFER_SIZE; i++) { |
| dwini | 2:49bb6ee1191c | 97 | buffer[i] = 0; |
| dwini | 2:49bb6ee1191c | 98 | } |
| dwini | 0:e24b497adfce | 99 | |
| dwini | 1:e8ff4ff5a726 | 100 | // Alive LED |
| dwini | 1:e8ff4ff5a726 | 101 | cAlive = (cAlive + 1) % 100000; |
| dwini | 1:e8ff4ff5a726 | 102 | if (!cAlive) { |
| dwini | 1:e8ff4ff5a726 | 103 | aLED = !aLED; |
| dwini | 1:e8ff4ff5a726 | 104 | } |
| dwini | 0:e24b497adfce | 105 | } |
| dwini | 0:e24b497adfce | 106 | } |