not workin

Dependencies:   mbed-rtos mbed

Fork of BAE_FRDM_INTEGRATION by green rosh

Files at this revision

API Documentation at this revision

Comitter:
sakthipriya
Date:
Tue Dec 16 11:37:09 2014 +0000
Parent:
8:667fbc82d634
Commit message:
i2c not workin new integ.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
slave.cpp Show annotated file Show diff for this revision Revisions of this file
slave.h Show annotated file Show diff for this revision Revisions of this file
diff -r 667fbc82d634 -r 6bcc165ee457 main.cpp
--- a/main.cpp	Mon Dec 15 05:58:23 2014 +0000
+++ b/main.cpp	Tue Dec 16 11:37:09 2014 +0000
@@ -220,6 +220,105 @@
     }    
 }
 */
+
+//------------------------------------------------------------------------------------------------------------------------------------------------
+//I2C SLAVE
+//------------------------------------------------------------------------------------------------------------------------------------------------
+typedef struct
+{
+    char data;          // To avoid dynamic memory allocation
+    int length;
+}i2c_data;
+
+Mail<i2c_data,16> i2c_data_receive;           
+Mail<i2c_data,16> i2c_data_send;   
+
+InterruptIn interrupt(D9);  
+InterruptIn master_reset(D11);                 
+DigitalOut data_ready(D10);    
+int reset =0;
+int i2c_status = 0;     
+
+
+
+void FUNC_INT()
+{
+  // char * data = new char;
+   //*data = 'a';
+   //printf("\nInterrupt from master detected\n");
+   reset =0;
+   ptr_t_i2c->signal_set(0x1);
+  // 
+   //delete data;
+}
+
+void FUNC_RESET()
+{
+    reset =1;
+}
+
+void ir2master()
+{
+        
+        char data = 'a';
+        //strcpy(data,"sakthi ");
+        //strcat(data,"priya");
+       /* 
+        strcpy(hk_data,Sensor.Temperature);                                                 //Sending to CDMS via I2C
+        strcat(hk_data,Sensor.Current); 
+        strcat(hk_data,Sensor.Voltage);
+        strcat(hk_data,sfaultpoll);
+        strcat(hk_data,sfaultir);
+        strcat(hk_data,spower_mode);
+        strcat(hk_data,ffp);*/
+        data_ready=0;
+        //data = pcslave.getc();
+        reset =0;
+        i2c_status=1;
+        i2c_data * i2c_data_s = i2c_data_send.alloc();
+        i2c_data_s->data = data;
+        i2c_data_s->length = 1;
+        i2c_data_send.put(i2c_data_s); 
+        data_ready=1;
+        //temp = i2c_status;
+}
+
+void T_I2C_BAE(void const * args)
+{
+    char data_send,data_receive;
+    //data_send = 'a';
+    while(1)
+    {
+        Thread::signal_wait(0x1);
+        printf("\ndetected interrupt\n");
+        if(i2c_status == 0 && reset==0)
+        {
+            
+            FUNC_I2C_WRITE2CDMS(&data_receive,1);
+            //printf("\n Data received from CDMS is %c\n",data_receive);
+            i2c_data * i2c_data_r = i2c_data_receive.alloc();
+            i2c_data_r->data = data_receive;
+            i2c_data_r->length = 1;
+            i2c_data_receive.put(i2c_data_r);
+        }
+        else if(i2c_status ==1 && reset ==1)
+        {
+            osEvent evt = i2c_data_send.get();
+            if (evt.status == osEventMail) 
+            {
+                i2c_data *i2c_data_s = (i2c_data*)evt.value.p;
+                //printf("\nData read from CDMS is %c\n",i2c_data_r->data);
+                data_send = i2c_data_s -> data;
+                FUNC_I2C_WRITE2CDMS(&data_send,1);
+                printf("\nData sent to CDMS is %c\n",data_send);
+                i2c_data_send.free(i2c_data_s);
+                i2c_status = 0;
+                //delete i2c_data_r;
+            }
+        }   
+    }
+}
+
 //------------------------------------------------------------------------------------------------------------------------------------------------
 //SCHEDULER
 //------------------------------------------------------------------------------------------------------------------------------------------------
@@ -236,7 +335,7 @@
     
     if(schedcount%1==0)
     {
-        ptr_t_acs -> signal_set(0x1);
+        //ptr_t_acs -> signal_set(0x1);
     }
     if(schedcount%2==0)
     {
@@ -249,7 +348,7 @@
         if(beac_flag==0)
         {
             
-            ptr_t_bea -> signal_set(0x3);
+           // ptr_t_bea -> signal_set(0x3);
         }
     }
     schedcount++;
@@ -288,8 +387,11 @@
     t_sc_timer.start(10000);
     printf("\n%f\n",t1.read()); 
         
+    master_reset.fall(&FUNC_RESET);
+    interrupt.rise(&FUNC_INT);
     while(1)
     {   
+        ir2master();
         Thread::wait(10000);
         ;
     }
diff -r 667fbc82d634 -r 6bcc165ee457 slave.cpp
--- a/slave.cpp	Mon Dec 15 05:58:23 2014 +0000
+++ b/slave.cpp	Tue Dec 16 11:37:09 2014 +0000
@@ -113,16 +113,12 @@
 //DigitalOut data_ready(D10);                     //Again in the main function
 //int i2c_status=0;                                 //read/write mode for i2c 0 : write2slave, 1 : write2master (Again in tha main)
 
-typedef struct
-{
-    char data;          // To avoid dynamic memory allocation
-    int length;
-}i2c_data;
+
 
 //Mail<i2c_data,16> i2c_data_receive;           To be done in the main
 //Mail<i2c_data,16> i2c_data_send;              To be done in the main
 
-void FUNC_I2C_WRITE2CDMS(char *data, int length=1)
+void FUNC_I2C_WRITE2CDMS(char *data, int length)
 {
        
     int slave_status = 1;
@@ -157,61 +153,12 @@
 
 }
 
-/*void T_I2C_BAE(void const * args)
-{
-    char data_send,data_receive;
-    //data_send = 'a';
-    while(1)
-    {
-        Thread::signal_wait(0x1);
-        printf("\ndetected interrupt\n");
-        if(i2c_status == 0)
-        {
-            
-            FUNC_I2C_WRITE2CDMS(&data_receive);
-            //printf("\n Data received from CDMS is %c\n",data_receive);
-            i2c_data * i2c_data_r = i2c_data_receive.alloc();
-            i2c_data_r->data = data_receive;
-            i2c_data_r->length = 1;
-            i2c_data_receive.put(i2c_data_r);
-        }
-        else if(i2c_status ==1 )
-        {
-            osEvent evt = i2c_data_send.get();
-            if (evt.status == osEventMail) 
-            {
-                i2c_data *i2c_data_s = (i2c_data*)evt.value.p;
-                //printf("\nData read from CDMS is %c\n",i2c_data_r->data);
-                data_send = i2c_data_s -> data;
-                FUNC_I2C_WRITE2CDMS(&data_send);
-                printf("\nData sent to CDMS is %c\n",data_send);
-                i2c_data_send.free(i2c_data_s);
-                i2c_status = 0;
-                //delete i2c_data_r;
-            }
-        }   
-    }
-}
         
-void FUNC_INT()
-{
-  // char * data = new char;
-   //*data = 'a';
-   //printf("\nInterrupt from master detected\n");
-   ptr_t_i2c->signal_set(0x1);
-  // 
-   //delete data;
-}
+
    
 
 
-void main()
-{
-    printf("\nStarted slave... waiting for master\n");
-    ptr_t_i2c = new Thread(T_I2C_BAE);
-    char data='a';
-    interrupt.rise(&FUNC_INT);
-    
+
    /* i2c_data * i2c_data_s = i2c_data_send.alloc();
     i2c_data_s->data = data;
     i2c_data_s->length = 1;
diff -r 667fbc82d634 -r 6bcc165ee457 slave.h
--- a/slave.h	Mon Dec 15 05:58:23 2014 +0000
+++ b/slave.h	Tue Dec 16 11:37:09 2014 +0000
@@ -2,5 +2,5 @@
 #define WriteGeneral 3
 #define ReadAddressed 1
 #define slave_address 0x20
-void write_to_master(char);                    //function to write data to master
-void FUNC_I2C_SLAVE_MAIN(int iterations);
\ No newline at end of file
+
+void FUNC_I2C_WRITE2CDMS(char *data, int length);
\ No newline at end of file