Fabien Lepoutre
/
Prog_Projet
Projet3i4
Diff: ComSPI.cpp
- Revision:
- 0:f0c9c47e4edd
- Child:
- 1:bb98d7d1e25f
diff -r 000000000000 -r f0c9c47e4edd ComSPI.cpp --- /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"); + + +} +