Fabien Lepoutre
/
Prog_Projet
Projet3i4
ComSPI.cpp@0:f0c9c47e4edd, 2012-04-23 (annotated)
- Committer:
- fabienlepoutre
- Date:
- Mon Apr 23 14:40:40 2012 +0000
- Revision:
- 0:f0c9c47e4edd
- Child:
- 1:bb98d7d1e25f
Who changed what in which revision?
User | Revision | Line number | New 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 |