Dependencies:   mbed

Committer:
gsionek
Date:
Tue Apr 24 16:16:16 2012 +0000
Revision:
1:ef7be3d55009
Parent:
0:7ccc94242357

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gsionek 0:7ccc94242357 1 #include "i2c_test.h"
gsionek 0:7ccc94242357 2
gsionek 1:ef7be3d55009 3 Semaphore sem(0);
gsionek 1:ef7be3d55009 4
gsionek 0:7ccc94242357 5 I2C i2cMaster(p28, p27);
gsionek 0:7ccc94242357 6 I2CSlave i2cSlave(p9,p10);
gsionek 0:7ccc94242357 7
gsionek 0:7ccc94242357 8 const int spiAddr = 0xA0;
gsionek 0:7ccc94242357 9 volatile int attente;
gsionek 0:7ccc94242357 10 volatile int pute;
gsionek 0:7ccc94242357 11
gsionek 0:7ccc94242357 12 void testI2C()
gsionek 0:7ccc94242357 13 {
gsionek 0:7ccc94242357 14 attente = 0;
gsionek 0:7ccc94242357 15 pute = 1;
gsionek 0:7ccc94242357 16 i2cMaster.frequency(100000);
gsionek 0:7ccc94242357 17 i2cSlave.frequency(100000);
gsionek 0:7ccc94242357 18 i2cSlave.address(0xA0);
gsionek 0:7ccc94242357 19
gsionek 0:7ccc94242357 20 Thread tSlave(i2cSlaveTask);
gsionek 0:7ccc94242357 21 Thread tMaster(i2cMasterTask);
gsionek 0:7ccc94242357 22 //printf("helo1");
gsionek 0:7ccc94242357 23 //int i =0;
gsionek 0:7ccc94242357 24 //wait(5);
gsionek 0:7ccc94242357 25 //do{
gsionek 0:7ccc94242357 26 //printf("ha\n\r");
gsionek 1:ef7be3d55009 27 //}
gsionek 1:ef7be3d55009 28 //while(attente == 0);
gsionek 1:ef7be3d55009 29 sem.wait();
gsionek 0:7ccc94242357 30 printf("helo2\n\r");
gsionek 0:7ccc94242357 31 }
gsionek 0:7ccc94242357 32
gsionek 0:7ccc94242357 33 void i2cMasterTask(void const* arg)
gsionek 0:7ccc94242357 34 {
gsionek 0:7ccc94242357 35 char test[] = "MASTER";
gsionek 0:7ccc94242357 36 char buf[32];
gsionek 0:7ccc94242357 37
gsionek 0:7ccc94242357 38 wait(1);
gsionek 0:7ccc94242357 39 i2cMaster.write(spiAddr, test, (strlen(test)+1));
gsionek 0:7ccc94242357 40 wait(1);
gsionek 0:7ccc94242357 41 for(int j = 0; j < 64; j++) buf[j] = 0; /*effacer le buffer*/
gsionek 0:7ccc94242357 42 i2cMaster.read(spiAddr, buf, sizeof(buf));
gsionek 0:7ccc94242357 43 if( !strcmp(buf, "MASTER SLAVE") ) printf("TESTE DE PUTE OK\n\r");
gsionek 0:7ccc94242357 44
gsionek 1:ef7be3d55009 45 sem.release();
gsionek 1:ef7be3d55009 46 attente = 1;
gsionek 0:7ccc94242357 47 pute = 0;
gsionek 0:7ccc94242357 48 printf("helo3\n\r");
gsionek 0:7ccc94242357 49 }
gsionek 0:7ccc94242357 50
gsionek 0:7ccc94242357 51
gsionek 0:7ccc94242357 52 void i2cSlaveTask(void const* arg)
gsionek 0:7ccc94242357 53 {
gsionek 0:7ccc94242357 54 char send[64];
gsionek 0:7ccc94242357 55 char rec[64];
gsionek 0:7ccc94242357 56
gsionek 0:7ccc94242357 57 strcpy(send,"");
gsionek 0:7ccc94242357 58 while(pute) {
gsionek 0:7ccc94242357 59 for(int j = 0; j < 64; j++) rec[j] = 0; /*effacer le buffer*/
gsionek 0:7ccc94242357 60 switch ( i2cSlave.receive() ) {
gsionek 0:7ccc94242357 61 case I2CSlave::ReadAddressed :
gsionek 0:7ccc94242357 62 //pc.printf("I2CSlave::ReadAddressed\n\r");
gsionek 0:7ccc94242357 63 i2cSlave.write(send, strlen(send) + 1);
gsionek 0:7ccc94242357 64 break;
gsionek 0:7ccc94242357 65
gsionek 0:7ccc94242357 66 case I2CSlave::WriteGeneral :
gsionek 0:7ccc94242357 67 //pc.printf("I2CSlave::WriteGeneral\n\r");
gsionek 0:7ccc94242357 68 i2cSlave.read(rec, sizeof(rec));
gsionek 0:7ccc94242357 69 strcpy(send,rec);
gsionek 0:7ccc94242357 70 strcat(send," SLAVE");
gsionek 0:7ccc94242357 71 break;
gsionek 0:7ccc94242357 72
gsionek 0:7ccc94242357 73 case I2CSlave::WriteAddressed :
gsionek 0:7ccc94242357 74 //pc.printf("I2CSlave::WriteAddressed\n\r");
gsionek 0:7ccc94242357 75 i2cSlave.read(rec, sizeof(rec));
gsionek 0:7ccc94242357 76 strcpy(send,rec);
gsionek 0:7ccc94242357 77 strcat(send," SLAVE");
gsionek 0:7ccc94242357 78 break;
gsionek 0:7ccc94242357 79 default :
gsionek 0:7ccc94242357 80 break;
gsionek 0:7ccc94242357 81 }
gsionek 0:7ccc94242357 82 }
gsionek 0:7ccc94242357 83 printf("SLAVE FINI!\n\r");
gsionek 0:7ccc94242357 84 }