Projet3i4

Committer:
fabienlepoutre
Date:
Mon Apr 23 14:40:40 2012 +0000
Revision:
0:f0c9c47e4edd
Child:
1:bb98d7d1e25f

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fabienlepoutre 0:f0c9c47e4edd 1 #include "ComSPI.h"
fabienlepoutre 0:f0c9c47e4edd 2 SPI SPI_Master(p11, p12, p13); //mosi, miso, sck
fabienlepoutre 0:f0c9c47e4edd 3 DigitalOut cs(p14); //Selection Slave
fabienlepoutre 0:f0c9c47e4edd 4 SPISlave SPI_Slave(p5, p6, p7, p8); //mosi, miso, sck, ssel
fabienlepoutre 0:f0c9c47e4edd 5
fabienlepoutre 0:f0c9c47e4edd 6
fabienlepoutre 0:f0c9c47e4edd 7
fabienlepoutre 0:f0c9c47e4edd 8 void v_InitSPI(){
fabienlepoutre 0:f0c9c47e4edd 9 printf("Entree dans Init \n\r");
fabienlepoutre 0:f0c9c47e4edd 10 SPI_Master.format(8,0);
fabienlepoutre 0:f0c9c47e4edd 11 SPI_Master.frequency(1000000);
fabienlepoutre 0:f0c9c47e4edd 12 SPI_Slave.format(8,0);
fabienlepoutre 0:f0c9c47e4edd 13 SPI_Slave.frequency(1000000);
fabienlepoutre 0:f0c9c47e4edd 14
fabienlepoutre 0:f0c9c47e4edd 15 }
fabienlepoutre 0:f0c9c47e4edd 16
fabienlepoutre 0:f0c9c47e4edd 17
fabienlepoutre 0:f0c9c47e4edd 18 void v_TestComSPI(){
fabienlepoutre 0:f0c9c47e4edd 19 printf("Entree dans testcom \r\n");
fabienlepoutre 0:f0c9c47e4edd 20 v_InitSPI();
fabienlepoutre 0:f0c9c47e4edd 21 Thread tSlave(v_threadSPISlave);
fabienlepoutre 0:f0c9c47e4edd 22 Thread tMaster(v_threadSPIMaster);
fabienlepoutre 0:f0c9c47e4edd 23 }
fabienlepoutre 0:f0c9c47e4edd 24
fabienlepoutre 0:f0c9c47e4edd 25 void v_threadSPIMaster(void const* argument){
fabienlepoutre 0:f0c9c47e4edd 26 printf("Entree dans le thread Master \r \n");
fabienlepoutre 0:f0c9c47e4edd 27 int answer, msgsend=1;
fabienlepoutre 0:f0c9c47e4edd 28
fabienlepoutre 0:f0c9c47e4edd 29
fabienlepoutre 0:f0c9c47e4edd 30 cs=0;
fabienlepoutre 0:f0c9c47e4edd 31 answer = SPI_Master.write(msgsend);
fabienlepoutre 0:f0c9c47e4edd 32 cs=1;
fabienlepoutre 0:f0c9c47e4edd 33 cout<<endl<<cs<<endl;
fabienlepoutre 0:f0c9c47e4edd 34 wait_ms(100);
fabienlepoutre 0:f0c9c47e4edd 35 cs=0;
fabienlepoutre 0:f0c9c47e4edd 36 answer = SPI_Master.write(0x00);
fabienlepoutre 0:f0c9c47e4edd 37 cs=1;
fabienlepoutre 0:f0c9c47e4edd 38
fabienlepoutre 0:f0c9c47e4edd 39 printf("Master -> Valeur envoye :%d Valeur recu : %d \r\n", msgsend, answer);
fabienlepoutre 0:f0c9c47e4edd 40 if(answer == (msgsend+5)){ //Normaly slave returns msgsend + 5
fabienlepoutre 0:f0c9c47e4edd 41 cs=0;
fabienlepoutre 0:f0c9c47e4edd 42 answer=SPI_Master.write(TERMINATE); //send a Terminate value
fabienlepoutre 0:f0c9c47e4edd 43 cs=1;
fabienlepoutre 0:f0c9c47e4edd 44 if(answer==0) printf("Communication OK \r\n)"); //Normaly Slave returns 0 : end of transmission
fabienlepoutre 0:f0c9c47e4edd 45 else printf("Probleme de communication \r\n)");
fabienlepoutre 0:f0c9c47e4edd 46 }
fabienlepoutre 0:f0c9c47e4edd 47 printf("Sortie du thread Master \r\n");
fabienlepoutre 0:f0c9c47e4edd 48 }
fabienlepoutre 0:f0c9c47e4edd 49
fabienlepoutre 0:f0c9c47e4edd 50 void v_threadSPISlave(void const* argument){
fabienlepoutre 0:f0c9c47e4edd 51 printf("Entree dans le thread Slave \r\n");
fabienlepoutre 0:f0c9c47e4edd 52 int rec, rec2;
fabienlepoutre 0:f0c9c47e4edd 53 bool end=false;
fabienlepoutre 0:f0c9c47e4edd 54 while(!end){
fabienlepoutre 0:f0c9c47e4edd 55 if(SPI_Slave.receive()) {
fabienlepoutre 0:f0c9c47e4edd 56
fabienlepoutre 0:f0c9c47e4edd 57 rec = SPI_Slave.read();
fabienlepoutre 0:f0c9c47e4edd 58 rec2=rec+5; // Read byte from master
fabienlepoutre 0:f0c9c47e4edd 59 printf("Slave -> Valeur recue :%d\r\n", rec);
fabienlepoutre 0:f0c9c47e4edd 60 if(rec!=0){ // discard the dummy buffer write
fabienlepoutre 0:f0c9c47e4edd 61 if(rec == TERMINATE) { //if terminate signal : stop kill thread
fabienlepoutre 0:f0c9c47e4edd 62 printf("Signal Termine \r\n");
fabienlepoutre 0:f0c9c47e4edd 63 end = true;
fabienlepoutre 0:f0c9c47e4edd 64 SPI_Slave.reply(0);
fabienlepoutre 0:f0c9c47e4edd 65 }
fabienlepoutre 0:f0c9c47e4edd 66
fabienlepoutre 0:f0c9c47e4edd 67 else{
fabienlepoutre 0:f0c9c47e4edd 68 SPI_Slave.reply(rec2); // Make this the next reply (add 5);
fabienlepoutre 0:f0c9c47e4edd 69 printf("Slave -> Valeur renvoyee : %d \r\n",rec2);
fabienlepoutre 0:f0c9c47e4edd 70 }
fabienlepoutre 0:f0c9c47e4edd 71 }
fabienlepoutre 0:f0c9c47e4edd 72
fabienlepoutre 0:f0c9c47e4edd 73 }
fabienlepoutre 0:f0c9c47e4edd 74 }
fabienlepoutre 0:f0c9c47e4edd 75 printf("Sortie du thread Slave \r\n");
fabienlepoutre 0:f0c9c47e4edd 76
fabienlepoutre 0:f0c9c47e4edd 77
fabienlepoutre 0:f0c9c47e4edd 78 }
fabienlepoutre 0:f0c9c47e4edd 79