Projet3i4

Revision:
0:f0c9c47e4edd
Child:
1:bb98d7d1e25f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ComSPI.cpp	Mon Apr 23 14:40:40 2012 +0000
@@ -0,0 +1,79 @@
+#include "ComSPI.h"
+SPI SPI_Master(p11, p12, p13);          //mosi, miso, sck
+DigitalOut cs(p14);                     //Selection Slave
+SPISlave SPI_Slave(p5, p6, p7, p8);     //mosi, miso, sck, ssel
+
+
+
+void v_InitSPI(){
+    printf("Entree dans Init \n\r");
+    SPI_Master.format(8,0);
+    SPI_Master.frequency(1000000);    
+    SPI_Slave.format(8,0);
+    SPI_Slave.frequency(1000000);
+        
+}
+
+
+void v_TestComSPI(){
+    printf("Entree dans testcom \r\n");
+    v_InitSPI();
+    Thread tSlave(v_threadSPISlave);
+    Thread tMaster(v_threadSPIMaster);
+}
+
+void v_threadSPIMaster(void const* argument){    
+    printf("Entree dans le thread Master \r \n");
+    int answer, msgsend=1;
+    
+   
+    cs=0;
+    answer = SPI_Master.write(msgsend);   
+    cs=1;  
+    cout<<endl<<cs<<endl;
+    wait_ms(100);
+    cs=0;
+    answer = SPI_Master.write(0x00); 
+    cs=1;
+    
+    printf("Master -> Valeur envoye :%d  Valeur recu : %d \r\n", msgsend, answer);
+    if(answer == (msgsend+5)){          //Normaly slave returns msgsend + 5
+        cs=0;
+        answer=SPI_Master.write(TERMINATE);   //send a Terminate value
+        cs=1;  
+        if(answer==0) printf("Communication OK \r\n)");    //Normaly Slave returns 0 : end of transmission
+        else printf("Probleme de communication \r\n)");
+    }  
+    printf("Sortie du thread Master \r\n");
+}
+
+void v_threadSPISlave(void const* argument){
+    printf("Entree dans le thread Slave \r\n");
+     int rec, rec2;
+     bool end=false;
+     while(!end){
+         if(SPI_Slave.receive()) {
+                
+                rec = SPI_Slave.read(); 
+                rec2=rec+5;                   // Read byte from master
+                printf("Slave -> Valeur recue :%d\r\n", rec);                  
+                if(rec!=0){                                  // discard the dummy buffer write
+                    if(rec == TERMINATE) {                   //if terminate signal : stop kill thread
+                        printf("Signal Termine \r\n");
+                        end = true;
+                        SPI_Slave.reply(0);
+                     }
+                     
+                     else{ 
+                        SPI_Slave.reply(rec2);                   // Make this the next reply (add 5);
+                        printf("Slave -> Valeur renvoyee : %d \r\n",rec2);
+                        }
+                }
+                    
+          }
+      }
+      printf("Sortie du thread Slave \r\n");
+
+
+}
+