integrating vr 1.0

Dependencies:   SDFileSystem mbed-rtos mbed-src mbed

Files at this revision

API Documentation at this revision

Comitter:
sakthipriya
Date:
Wed May 13 06:21:49 2015 +0000
Commit message:
integrating vr 1.0

Changed in this revision

SDFileSystem.lib Show annotated file Show diff for this revision Revisions of this file
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
mbed-src.lib 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
pin_config.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDFileSystem.lib	Wed May 13 06:21:49 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/SDFileSystem/#c8f66dc765d4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed May 13 06:21:49 2015 +0000
@@ -0,0 +1,399 @@
+#include "mbed.h"
+#include "rtos.h"
+#include "pin_config.h"
+#include "SDFileSystem.h"
+#include "string.h"
+
+const int addr = 0x20;                     //slave address 
+I2C master (PIN32,PIN31);                      //configure pins p27,p28 as I2C master
+//I2C master (PIN32,PIN31);
+Serial pc (USBTX,USBRX);
+DigitalOut interrupt(PIN4);
+InterruptIn data_ready(PIN39);
+//DigitalOut interrupt(D9);
+//InterruptIn data_ready(D10);
+int reset;
+Timer t;
+Timer t1;
+Timer t2;
+Timer t3;
+
+void store_data();
+
+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();
+            
+            store_data();
+            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];
+    //char data_receive;
+    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("\n\r CDMS has written %c to PAYLOAD\n\r",writedata);
+                    write2slave=false;
+                    }
+                i2c_data_send.free(i2c_data_s);
+                printf("\n%d",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 
+void FUNC_CDMS_init_values(void);               // Function to initialize the registers in the RTC
+
+
+/***************** Configure the SPI1 of the CDMS uc as the data bus for the RTC***********************/
+SPI spi(PTE1,PTE3, PTE2);                       // mosi, miso, sclk
+DigitalOut cs(PTE29);                           // PTE29 is used for chip select
+
+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********************************************/ 
+void FUNC_CDMS_init_values(void)
+{
+    cs=0;
+    spi.format(8,3);                            // Set the data bit with to be of 8 bits, 
+                                                // data tx mode is 3 
+    spi.frequency(1000000);                     // Set Data rate to be 1 MHz
+    
+    cs = 0;                                     // Set chip select pin to be 0: Activate RTC chip
+    spi.write(0x80);                            // Send the address of the Seconds register 0x80
+    spi.write(0x00);                            // Set seconds value to 0
+    cs=1;                                       // Set chip select pin to be 1: DeActivate RTC chip
+    
+    cs=0;                                       // Set chip select pin to be 0: Activate RTC chip
+    spi.write(0x81);                            // Send the address of the Minutes register 0x81
+    spi.write(0x00);                            // Set minutes value to 0
+    cs=1;                                       // Set chip select pin to be 1: DeActivate RTC chip
+    
+    cs=0;                                       // Set chip select pin to be 0: Activate RTC chip
+    spi.write(0x82);                            // Send the address of the Hours register 0x82
+    spi.write(0x00);                            // Set hours value to 0
+    cs=1;                                       // Set chip select pin to be 1: DeActivate RTC chip
+    
+    cs=0;                                       // Set chip select pin to be 0: Activate RTC chip
+    spi.write(0x83);                            // Send the address of the Day register 0x83
+    spi.write(0x01);                            // Set the day to 01
+    cs=1;                                       // Set chip select pin to be 1: DeActivate RTC chip
+    
+    cs=0;                                       // Set chip select pin to be 0: Activate RTC chip
+    spi.write(0x84);                            // Send the address of the date register 0x84
+    spi.write(0x01);                            // Set date of the month to 01
+    cs=1;                                       // Set chip select pin to be 1: DeActivate RTC chip
+    
+    cs=0;                                       // Set chip select pin to be 0: Activate RTC chip
+    spi.write(0x85);                            // Send the address of the Month register 0x80
+    spi.write(0x01);                            // Set month to 01
+    cs=1;                                       // Set chip select pin to be 1: DeActivate RTC chip
+    
+    cs=0;                                       // Set chip select pin to be 0: Activate RTC chip
+    spi.write(0x86);                            // Send the address of the year register 0x80
+    spi.write(0x00);                            // Set year to 00(2000)
+    cs=1;                                       // Set chip select pin to be 1: DeActivate RTC chip
+}// End of INIT Function
+
+
+/*********************************Function to read the RTC registers*********************************/   
+void FUNC_CDMS_Gettime()
+{
+
+    spi.format(8,3);                            // Set the data bit with to be of 8 bits, 
+                                                // data tx mode is 3 
+    spi.frequency(1000000);                     // Set Data rate to be 1 MHz
+    cs=1;                                       // Set chip select pin to be 1: DeActivate RTC chip
+    
+    cs=0;                                       // Set chip select pin to be 0: Activate RTC chip
+    spi.write(0x00);                            // Sending address of seconds register
+    int seconds = spi.write(0x00);              // Read the value by sending dummy byte
+    cs=1;                                       // Set chip select pin to be 1: DeActivate RTC chip
+    
+    cs=0;                                       // Set chip select pin to be 0: Activate RTC chip
+    spi.write(0x01);                            // Sending address of Minutes register
+    int minutes =spi.write(0x01);               // Read the value by sending dummy byte
+    cs=1;                                       // Set chip select pin to be 1: DeActivate RTC chip
+    
+    cs=0;                                       // Set chip select pin to be 0: Activate RTC chip
+    spi.write(0x02);                            // Sending address of hours register
+    int hours =spi.write(0x01);                 // Read the value by sending dummy byte
+    cs=1;                                       // Set chip select pin to be 1: DeActivate RTC chip
+    
+    cs=0;                                       // Set chip select pin to be 0: Activate RTC chip
+    spi.write(0x03);                            // Sending address of day register
+    int day =spi.write(0x01);                   // Read the value by sending dummy byte
+    cs=1;                                       // Set chip select pin to be 1: DeActivate RTC chip
+    
+    cs=0;                                       // Set chip select pin to be 0: Activate RTC chip
+    spi.write(0x04);                            // Sending address of date register
+    int date =spi.write(0x01);                  // Read the value by sending dummy byte
+    cs=1;                                       // Set chip select pin to be 1: DeActivate RTC chip
+    
+    cs=0;                                       // Set chip select pin to be 0: Activate RTC chip
+    spi.write(0x05);                            // Sending address of month register
+    int month =spi.write(0x01);                 // Read the value by sending dummy byte
+    cs=1;                                       // Set chip select pin to be 1: DeActivate RTC chip
+    
+    cs=0;                                       // Set chip select pin to be 0: Activate RTC chip
+    spi.write(0x06);                            // Sending address of year register
+    int year =spi.write(0x01);                  // Read the value by sending dummy byte
+    cs = 1;                                     // Set chip select pin to be 1: DeActivate RTC chip
+    
+    // RTC sends in BCD format.. SO we convert the values generated by RTC to integers
+    year = FUNC_CDMS_hex2int(year);             
+    month = FUNC_CDMS_hex2int(month);
+    date = FUNC_CDMS_hex2int(date);
+    day = FUNC_CDMS_hex2int(day);
+    hours = FUNC_CDMS_hex2int(hours);
+    minutes = FUNC_CDMS_hex2int(minutes);
+    seconds = FUNC_CDMS_hex2int(seconds);
+    
+    // Print the obtained Time stamp
+    //printf("The time is :%d %d %d %d %d %d %d \n\r",seconds,minutes,hours,day,date,month,year);
+    sprintf(time_stamp,"%02d%02d%02d%02d%02d%02d",year,month,date,hours,minutes,seconds);
+    printf(" \n\r Received HK data from BAE");
+    printf("\n HK_data stored in %s.txt",time_stamp);
+    //puts(time_stamp);
+    //printf(".txt");
+}//End of Read Function
+
+/**************************Function to convert Hex values to Int values*****************************/
+int FUNC_CDMS_hex2int(int a)
+{
+a=(a/16)*10+(a%16); //function to convert hex type to int type
+return a;
+}// End of convert function
+
+
+/******************************************END OF RTC CODE ****************************************/
+
+char count = 10;
+void store_data()
+{
+    FUNC_CDMS_Gettime();
+    
+    char hk_data[25];
+    count++;
+    strcpy(hk_data,"hk_Data ");
+    strcat(hk_data,"!@@#");
+    hk_data[10] = count;
+    //storedata(hk_data);
+    mkdir("/sd/hk", 0777);
+    char add[20];
+    strcpy(add,"/sd/hk/");
+    strcat(add,time_stamp);
+    strcat(add,".txt");
+    
+    /*FILE *fp = fopen(add, "w");
+    if(fp == NULL) {
+        error("Could not open file for write\n");
+    }
+    else
+    {
+       
+    fprintf(fp, "%s ",hk_data);
+    fclose(fp);
+    printf("\n File stored in SD card\n");*/
+    //printf("\n Reading from the file .... \n Data is %s\n",hk_data);
+    
+    
+}
+
+
+
+//void create_file()
+//{
+    
+    /*
+    fprintf(fp, "Hello fun SD Card World!\n");
+    fclose(fp); 
+    
+    fp = fopen("/sd/mydir/sdtest.txt", "r");
+    if(fp == NULL) {
+        error("Could not open file for write\n");
+    }
+    //fprintf(fp, "Hello fun SD Card World!");
+   // fprintf("The contents of %s file are :\n", "/sd/mydir/sdtest.txt");
+    while( ( ch = fgetc(fp) ) != '\n' )
+    {
+      pc.printf("%c",ch);
+      }
+    //fprintf(fp);
+    fclose(fp); 
+ 
+    printf("Jai Mata Di..Goodbye World!\n");*/
+//}
+    
+//Ticker t;
+    
+
+int main()
+{   
+    interrupt=0;
+    ptr_t_i2c = new Thread(T_I2C_MASTER_FSLAVE);
+    data_ready.rise(&FUNC_INT);
+    printf("\n\rIITMSAT CDMS EXECUTED\n"); 
+     master.frequency(100000);   
+     
+    FUNC_CDMS_init_values();  
+   // t.attach(&store_data, 20.0);   
+    while(1)
+    { //Thread::wait(9000);
+    //interrupt = 1;
+      
+      FUNC_MASTER_WRITE(); 
+      //interrupt = 0; 
+      ;
+    }
+}           
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Wed May 13 06:21:49 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/mbed-src.lib	Wed May 13 06:21:49 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed-src/#4dac56e9ae44
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed May 13 06:21:49 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/4fc01daae5a5
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pin_config.h	Wed May 13 06:21:49 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