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.
Revision 0:a2fbfc4340f4, committed 2015-04-09
- Comitter:
- sakthipriya
- Date:
- Thu Apr 09 22:43:17 2015 +0000
- Commit message:
- cdms i2c working version
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Apr 09 22:43:17 2015 +0000
@@ -0,0 +1,194 @@
+#include "mbed.h"
+#include "rtos.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;
+}
+
+
+
+int main()
+{
+ interrupt=0;
+ ptr_t_i2c = new Thread(T_I2C_MASTER_FSLAVE);
+ data_ready.rise(&FUNC_INT);
+ printf("\nstarted master\n");
+ master.frequency(100000);
+ 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 Thu Apr 09 22:43:17 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.bld Thu Apr 09 22:43:17 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 Thu Apr 09 22:43:17 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