i2c+sd+rtc , ported untested code , working probability 90% if i2c works

Dependencies:   SDFileSystem mbed-rtos mbed-src mbed

Fork of cdms_SD_rtc by Suresh Susurla

Files at this revision

API Documentation at this revision

Comitter:
raizel_varun
Date:
Fri Apr 10 16:13:02 2015 +0000
Parent:
0:2e3d21e95c97
Commit message:
rtc+sd+i2c;

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
pin_config.h Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Fri Mar 13 20:04:05 2015 +0000
+++ b/main.cpp	Fri Apr 10 16:13:02 2015 +0000
@@ -5,6 +5,190 @@
 #include "mbed.h"
 #include "string.h"
 
+#include "rtos.h"
+#include "pin_config.h"
+const int addr = 0x20;                     //slave address 
+I2C master (PIN72,PIN71);                      //configure pins p27,p28 as I2C master
+Serial pc (USBTX,USBRX);
+DigitalOut interrupt(PIN4);
+InterruptIn data_ready(PIN39);
+
+
+int reset;
+Timer t;
+Timer t1;
+Timer t2;
+Timer t3;
+
+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;
+
+Thread * ptr_t_i2c;
+void FUNC_I2C_MASTER_FSLAVE(char * data,int length)
+{
+    
+            
+            bool ack0 =true; 
+            
+            interrupt = 1;
+            t1.start();
+            //wait_ms(20);
+            ack0 =  master.read(addr|1,data,length);
+            t1.stop();
+            
+            
+            if(!ack0)
+            {
+                    printf("\n master has read %s from slave\n\r",data);
+                    
+            }
+                //master.stop();
+            printf("\n%d\n\r",t1.read_us());
+            t1.reset();
+            
+            interrupt=0;
+           
+}
+
+typedef struct {
+    char Voltage[9];
+    char Current[5];
+    char Temperature[2];
+    char PanelTemperature[3];//read by the 4 thermistors on solar panels
+    char BatteryTemperature;    //to be populated   
+    char faultpoll;             //polled faults
+    char faultir;               //interrupted faults
+    char power_mode;            //power modes
+    char AngularSpeed[3];
+    char Bnewvalue[3];
+    
+    //float magnetometer,gyro=>to be addes
+} hk_data;
+hk_data decode_data;
+
+/*void TC_DECODE(char *data_hk)                  //getting the structure back from hk data sent by bae
+{
+    for(int i=0;i<=7;i++)
+    {
+    decode_data.Voltage[i] = data_hk[i];
+    decode_data.Voltage[8] = '\0';
+    }
+    for(int i=0;i<=3;i++)
+    {
+    decode_data.Current[i] = data_hk[8+i];
+    decode_data.Current[4] = '\0';
+    }
+    decode_data.Temperature[0] = data_hk[12];
+    decode_data.Temperature[1] = '\0'; 
+    for(int i=0;i<=1;i++)
+    {
+    decode_data.PanelTemperature[i] = data_hk[13+i];
+    decode_data.PanelTemperature[2] = '\0';
+    }
+    decode_data.BatteryTemperature = data_hk[15];
+    decode_data.faultpoll = data_hk[16];
+    decode_data.faultir = data_hk[17];
+    decode_data.power_mode = data_hk[18];
+    for(int i=0;i<=1;i++)
+    {
+    decode_data.AngularSpeed[i] = data_hk[19+i];
+    decode_data.AngularSpeed[2] = '\0';
+    }
+    for(int i=0;i<=1;i++)
+    {
+    decode_data.Bnewvalue[i] = data_hk[21+i];
+    decode_data.Bnewvalue[2] = '\0';
+    }
+    printf("\n voltage %s\n\r",decode_data.Voltage);
+    printf("\n current  %s\n\r",decode_data.Current);
+    printf("\n faultpoll %c\n\r",decode_data.faultpoll);
+}*/
+
+            
+void T_I2C_MASTER_FSLAVE(void const *args)
+{
+    char data_receive[25];
+    while(1)
+    {
+        Thread::signal_wait(0x1);
+        
+        
+        FUNC_I2C_MASTER_FSLAVE(data_receive,25);
+        /*i2c_data * i2c_data_r = i2c_data_receive.alloc();
+        strcpy(i2c_data_r->data , data_receive);
+        i2c_data_r->length = 25;
+        i2c_data_receive.put(i2c_data_r);*/
+        printf("\n Data received from slave is %s\n\r",data_receive);
+        //TC_DECODE(data_receive);
+    }
+}
+
+void FUNC_INT()
+{
+  
+   ptr_t_i2c->signal_set(0x1);
+     
+}
+
+char writedata;
+bool write2slave;
+bool master_status_write;
+void FUNC_MASTER_WRITE()
+{   //wait(1);
+    write2slave=true;
+   
+    
+     
+    char data = pc.getc();
+    interrupt = 1;
+    t.start();
+    t3.start();
+    wait_ms(20);
+    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); 
+    master_status_write = true;
+    
+   // interrupt = 1; 
+
+    osEvent evt = i2c_data_send.get();
+            if (evt.status == osEventMail) 
+            {
+                i2c_data *i2c_data_s = (i2c_data*)evt.value.p;
+                writedata = i2c_data_s -> data;
+                t.stop();
+                //t3.start();         
+                master_status_write = (bool) master.write(addr|0x00,&writedata,1);
+                t3.stop();
+                if(master_status_write==0)
+                    {
+                    printf("master has written %c to slave\n\r",writedata);
+                    write2slave=false;
+                    }
+                i2c_data_send.free(i2c_data_s);
+                printf("\n%d\n",t.read_us());
+                t.reset();
+                printf("\n%d\n",t3.read_us());
+                t3.reset();
+            }
+    interrupt = 0;
+}
+
+
+
+
+
+
+
+
+
 /********************************** Function Prototypes declaration ***********************************/
 int FUNC_CDMS_hex2int(int);                     // Need to convert the RTC time values to integers
 void FUNC_CDMS_Gettime(void);                   // Function to get the time values from RTC registers 
@@ -17,7 +201,7 @@
 
 char ch;
 SDFileSystem sd(PTE1, PTE3, PTE2, PTE22, "sd"); // the pinout on the mbed Cool Components workshop board
-Serial pc(USBTX, USBRX); // tx, rx
+
 char time_stamp[15];
 
 /***********************Initialization function of the RTC********************************************/ 
@@ -194,14 +378,19 @@
     printf("Jai Mata Di..Goodbye World!\n");*/
 //}
     
-Ticker t;
+Ticker tx;
 
 int main() 
-{
+{    interrupt=0;
+    ptr_t_i2c = new Thread(T_I2C_MASTER_FSLAVE); 
+     master.frequency(100000);     
     printf("IITMSAT - CDMS\n");   
     
     FUNC_CDMS_init_values();  
-    t.attach(&store_data, 20.0);
-    while(1);
+    tx.attach(&store_data, 20.0);
+    while(1)
+    {
+         FUNC_MASTER_WRITE();
+    }
     
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Fri Apr 10 16:13:02 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed-rtos/#13a25134ac60
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pin_config.h	Fri Apr 10 16:13:02 2015 +0000
@@ -0,0 +1,101 @@
+// 100 LQFP format pin assignment
+#define PIN1 PTE0
+#define PIN2 PTE1
+#define PIN3 PTE2
+#define PIN4 PTE3
+#define PIN5 PTE4
+#define PIN6 PTE5
+#define PIN7 PTE6
+//#define 8 
+//#define 9 
+//#define 10 
+//#define 11 
+//#define 12 
+//#define 13 
+#define PIN14 PTE16
+#define PIN15 PTE17
+#define PIN16 PTE18
+#define PIN17 PTE19
+#define PIN18 PTE20
+#define PIN19 PTE21
+#define PIN20 PTE22
+#define PIN21 PTE23
+//#define 22 
+//#define 23 
+//#define 24 
+//#define 25 
+#define PIN26 PTE29
+#define PIN27 PTE30
+#define PIN28 PTE31
+//#define 29 
+//#define 30 
+#define PIN31 PTE24
+#define PIN32 PTE25
+#define PIN33 PTE26
+#define PIN34 PTA0
+#define PIN35 PTA1
+#define PIN36 PTA2
+#define PIN37 PTA3
+#define PIN38 PTA4
+#define PIN39 PTA5
+#define PIN40 PTA6
+#define PIN41 PTA7
+#define PIN42 PTA12
+#define PIN43 PTA13
+#define PIN44 PTA14
+#define PIN45 PTA15
+#define PIN46 PTA16
+#define PIN47 PTA17
+//#define 48 
+//#define 49 
+#define PIN50 PTA18
+#define PIN51 PTA19
+#define PIN52 PTA20
+#define PIN53 PTB0
+#define PIN54 PTB1
+#define PIN55 PTB2
+#define PIN56 PTB3
+#define PIN57 PTB7
+#define PIN58 PTB8
+#define PIN59 PTB9
+#define PIN60 PTB10
+#define PIN61 PTB11
+#define PIN62 PTB16
+#define PIN63 PTB17
+#define PIN64 PTB18
+#define PIN65 PTB19
+#define PIN66 PTB20
+#define PIN67 PTB21
+#define PIN68 PTB22
+#define PIN69 PTB23
+#define PIN70 PTC0
+#define PIN71 PTC1
+#define PIN72 PTC2
+#define PIN73 PTC3
+//#define 74 
+//#define 75 
+#define PIN76 PTC20
+#define PIN77 PTC21
+#define PIN78 PTC22
+#define PIN79 PTC23
+#define PIN80 PTC4
+#define PIN81 PTC5
+#define PIN82 PTC6
+#define PIN83 PTC7
+#define PIN84 PTC8
+#define PIN85 PTC9
+#define PIN86 PTC10
+#define PIN87 PTC11
+#define PIN88 PTC12
+#define PIN89 PTC13
+#define PIN90 PTC16
+#define PIN91 PTC17
+#define PIN92 PTC18
+#define PIN93 PTD0
+#define PIN94 PTD1
+#define PIN95 PTD2
+#define PIN96 PTD3
+#define PIN97 PTD4
+#define PIN98 PTD5
+#define PIN99 PTD6
+#define PIN100 PTD7
\ No newline at end of file