![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
i2c_test.cpp@1:ef7be3d55009, 2012-04-24 (annotated)
- Committer:
- gsionek
- Date:
- Tue Apr 24 16:16:16 2012 +0000
- Revision:
- 1:ef7be3d55009
- Parent:
- 0:7ccc94242357
Who changed what in which revision?
User | Revision | Line number | New 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 | } |