Marek Trojan / _8_CONV

Dependencies:   mbed-src

Fork of _8_CONV_1_SLAVE by Marek Trojan

Revision:
0:ab0f6f4ef7ac
Child:
1:455088a984b0
diff -r 000000000000 -r ab0f6f4ef7ac main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Dec 01 22:15:52 2015 +0000
@@ -0,0 +1,69 @@
+// Conv1 Slave
+#include "main.h"
+
+int main() {
+    init();
+    while (1) {}
+}
+
+void i2cStart(void){
+    SDA_interrupt.disable_irq();
+    char addr = (char)slave.read();
+    if (addr == (char)SLAVE_ADDR) {
+        count = 0;
+        char uart_rec;
+        device.putc(DATA_TO_WRITE_CHAR);
+        device.putc(addr);
+        while(!SDA_state) {
+            buffer = (char)slave.read();
+            for(int y = 0; y < 1024; y++){} //some delay required for signal establishment
+            if(SDA_state) break;
+            device.putc(DATA_TO_WRITE_CHAR);
+            device.putc(buffer); 
+            
+            while(1) { // waiting until confirmation char is received from converter 2
+                if(device.readable()) {
+                    uart_rec = device.getc();
+                    if(uart_rec == UART_CONFIRMATION_CHAR || uart_rec == UART_NON_CONFIRMATION_CHAR)
+                        break;
+                }
+            }
+            if (uart_rec == UART_NON_CONFIRMATION_CHAR)
+                break;
+        }     
+        slave.stop();
+        device.putc(END_OF_TRANSMISSION);
+    } 
+    else if (addr == (char)(SLAVE_ADDR | 0x01)){
+        char uart_rec2;
+        device.putc(DATA_TO_WRITE_CHAR);
+        device.putc(addr);
+        while(1){
+            device.putc(DATA_TO_READ_CHAR);
+            while(1) { // waiting for data byte from conv2
+                if(device.readable()) {
+                    if (device.getc() == UART_CHAR_INCOMING){
+                        uart_rec2 = device.getc(); 
+                        break;
+                    }
+                }
+            } 
+            if(!slave.write(uart_rec2))
+                break;           
+        }
+        slave.stop();
+        
+    }
+    else {
+        //pc.printf("Unknown address: %x\n\r",addr);
+        slave.stop();
+    }
+    SDA_interrupt.enable_irq();
+}
+
+void init(void){
+    SDA_interrupt.fall(&i2cStart);
+    slave.frequency(100000);
+    device.baud(921600);
+    slave.address(SLAVE_ADDR);
+}
\ No newline at end of file