Juan Angel García
/
7_2
SPI maestro
main.cpp@0:bf809e86f7da, 2017-03-07 (annotated)
- Committer:
- jangelgm
- Date:
- Tue Mar 07 11:28:18 2017 +0000
- Revision:
- 0:bf809e86f7da
SPI maestro
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jangelgm | 0:bf809e86f7da | 1 | /*Program Example 7.2. Sets the mbed up as Master, and exchanges data with a slave, |
jangelgm | 0:bf809e86f7da | 2 | sending its own switch positions, and displaying those of the slave. |
jangelgm | 0:bf809e86f7da | 3 | */ |
jangelgm | 0:bf809e86f7da | 4 | #include "mbed.h" |
jangelgm | 0:bf809e86f7da | 5 | SPI ser_port(p11, p12, p13); //mosi, miso, sclk |
jangelgm | 0:bf809e86f7da | 6 | DigitalOut red_led(p25); //red led |
jangelgm | 0:bf809e86f7da | 7 | DigitalOut green_led(p26); //green led |
jangelgm | 0:bf809e86f7da | 8 | |
jangelgm | 0:bf809e86f7da | 9 | DigitalOut cs(p14); //this acts as “slave select” |
jangelgm | 0:bf809e86f7da | 10 | |
jangelgm | 0:bf809e86f7da | 11 | DigitalIn switch_ip1(p5); |
jangelgm | 0:bf809e86f7da | 12 | DigitalIn switch_ip2(p6); |
jangelgm | 0:bf809e86f7da | 13 | |
jangelgm | 0:bf809e86f7da | 14 | char switch_word ; //word we will send |
jangelgm | 0:bf809e86f7da | 15 | char recd_val; //value return from slave |
jangelgm | 0:bf809e86f7da | 16 | |
jangelgm | 0:bf809e86f7da | 17 | int main() |
jangelgm | 0:bf809e86f7da | 18 | { |
jangelgm | 0:bf809e86f7da | 19 | while (1){ |
jangelgm | 0:bf809e86f7da | 20 | //Default settings for SPI Master chosen, no need for further configuration |
jangelgm | 0:bf809e86f7da | 21 | //Set up the word to be sent, by testing switch inputs |
jangelgm | 0:bf809e86f7da | 22 | switch_word=0xa0; //set up a recognizable output pattern |
jangelgm | 0:bf809e86f7da | 23 | if (switch_ip1==1) |
jangelgm | 0:bf809e86f7da | 24 | switch_word=switch_word | 0x01; //OR in lsb |
jangelgm | 0:bf809e86f7da | 25 | if (switch_ip2==1) |
jangelgm | 0:bf809e86f7da | 26 | switch_word=switch_word | 0x02; //OR in next lsb |
jangelgm | 0:bf809e86f7da | 27 | cs = 0; //select slave |
jangelgm | 0:bf809e86f7da | 28 | recd_val=ser_port.write(switch_word); //send switch_word and receive data |
jangelgm | 0:bf809e86f7da | 29 | cs = 1; |
jangelgm | 0:bf809e86f7da | 30 | wait(0.01); |
jangelgm | 0:bf809e86f7da | 31 | //set leds according to incoming word from slave |
jangelgm | 0:bf809e86f7da | 32 | red_led=0; //preset both to 0 |
jangelgm | 0:bf809e86f7da | 33 | green_led=0; |
jangelgm | 0:bf809e86f7da | 34 | recd_val=recd_val & 0x03; //AND out unwanted bits |
jangelgm | 0:bf809e86f7da | 35 | if (recd_val==1) |
jangelgm | 0:bf809e86f7da | 36 | red_led=1; |
jangelgm | 0:bf809e86f7da | 37 | if (recd_val==2) |
jangelgm | 0:bf809e86f7da | 38 | green_led=1; |
jangelgm | 0:bf809e86f7da | 39 | if (recd_val==3){ |
jangelgm | 0:bf809e86f7da | 40 | red_led=1; |
jangelgm | 0:bf809e86f7da | 41 | green_led=1; |
jangelgm | 0:bf809e86f7da | 42 | } |
jangelgm | 0:bf809e86f7da | 43 | } |
jangelgm | 0:bf809e86f7da | 44 | } |