Peter Allnutt
/
SSM
Simple SPI test Application, intended to be used with SSS to send data between 2 mbed devices
main.cpp@0:ec8b56c64406, 2011-08-26 (annotated)
- Committer:
- picnic
- Date:
- Fri Aug 26 10:10:11 2011 +0000
- Revision:
- 0:ec8b56c64406
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
picnic | 0:ec8b56c64406 | 1 | #include "mbed.h" |
picnic | 0:ec8b56c64406 | 2 | |
picnic | 0:ec8b56c64406 | 3 | // Simple SPI Master |
picnic | 0:ec8b56c64406 | 4 | // Simply sends incrementing bytes and receives the echo from the previous one |
picnic | 0:ec8b56c64406 | 5 | |
picnic | 0:ec8b56c64406 | 6 | SPI spi(p5, p6, p7); // mosi, miso, sclk |
picnic | 0:ec8b56c64406 | 7 | DigitalOut cs(p8); |
picnic | 0:ec8b56c64406 | 8 | |
picnic | 0:ec8b56c64406 | 9 | Serial pc(USBTX, USBRX); // tx, rx |
picnic | 0:ec8b56c64406 | 10 | |
picnic | 0:ec8b56c64406 | 11 | #define SINGLE 0 |
picnic | 0:ec8b56c64406 | 12 | #define CONTINUOUS 1 |
picnic | 0:ec8b56c64406 | 13 | |
picnic | 0:ec8b56c64406 | 14 | long c = 0; |
picnic | 0:ec8b56c64406 | 15 | unsigned char r = 0; |
picnic | 0:ec8b56c64406 | 16 | unsigned char v = 0; |
picnic | 0:ec8b56c64406 | 17 | int ch; |
picnic | 0:ec8b56c64406 | 18 | |
picnic | 0:ec8b56c64406 | 19 | void sendbyte() { |
picnic | 0:ec8b56c64406 | 20 | // Select the device by seting chip select low |
picnic | 0:ec8b56c64406 | 21 | cs = 0; |
picnic | 0:ec8b56c64406 | 22 | v = c & 0xff; |
picnic | 0:ec8b56c64406 | 23 | r = spi.write( v ); |
picnic | 0:ec8b56c64406 | 24 | // Deselect the device |
picnic | 0:ec8b56c64406 | 25 | cs = 1; |
picnic | 0:ec8b56c64406 | 26 | |
picnic | 0:ec8b56c64406 | 27 | pc.printf("%ld v=%02x\r\n", c, v); |
picnic | 0:ec8b56c64406 | 28 | if (( c>0 ) && ( r!=(unsigned char)(v-1)) ) { |
picnic | 0:ec8b56c64406 | 29 | pc.printf( " Echo error %02x!=%02x\r\n", v-1, r ); |
picnic | 0:ec8b56c64406 | 30 | pc.printf("Press any key to continue\r\n"); |
picnic | 0:ec8b56c64406 | 31 | ch = pc.getc(); |
picnic | 0:ec8b56c64406 | 32 | } |
picnic | 0:ec8b56c64406 | 33 | c++; |
picnic | 0:ec8b56c64406 | 34 | } |
picnic | 0:ec8b56c64406 | 35 | |
picnic | 0:ec8b56c64406 | 36 | int main() { |
picnic | 0:ec8b56c64406 | 37 | int mode = 0; |
picnic | 0:ec8b56c64406 | 38 | |
picnic | 0:ec8b56c64406 | 39 | pc.printf("Simple SPI Master Test\r\n"); |
picnic | 0:ec8b56c64406 | 40 | pc.printf("Uses MBED's SPI library (1 byte in - 1 byte out)\r\n"); |
picnic | 0:ec8b56c64406 | 41 | pc.printf("\r\n C : Toggle continuous mode\r\n" ); |
picnic | 0:ec8b56c64406 | 42 | pc.printf(" T : Make a single transmission\r\n" ); |
picnic | 0:ec8b56c64406 | 43 | |
picnic | 0:ec8b56c64406 | 44 | // Setup the spi |
picnic | 0:ec8b56c64406 | 45 | // second edge capture, with a 1MHz clock rate |
picnic | 0:ec8b56c64406 | 46 | spi.format(8,3); |
picnic | 0:ec8b56c64406 | 47 | spi.frequency(100000); |
picnic | 0:ec8b56c64406 | 48 | |
picnic | 0:ec8b56c64406 | 49 | while (1) { |
picnic | 0:ec8b56c64406 | 50 | if ( mode ) { |
picnic | 0:ec8b56c64406 | 51 | wait_ms( 1 ); |
picnic | 0:ec8b56c64406 | 52 | sendbyte(); |
picnic | 0:ec8b56c64406 | 53 | } |
picnic | 0:ec8b56c64406 | 54 | if ( pc.readable() ) { |
picnic | 0:ec8b56c64406 | 55 | ch = pc.getc(); |
picnic | 0:ec8b56c64406 | 56 | switch ( ch ) { |
picnic | 0:ec8b56c64406 | 57 | case 'C': |
picnic | 0:ec8b56c64406 | 58 | case 'c': |
picnic | 0:ec8b56c64406 | 59 | mode = ! mode; |
picnic | 0:ec8b56c64406 | 60 | break; |
picnic | 0:ec8b56c64406 | 61 | case 'T': |
picnic | 0:ec8b56c64406 | 62 | case 't': |
picnic | 0:ec8b56c64406 | 63 | sendbyte(); |
picnic | 0:ec8b56c64406 | 64 | break; |
picnic | 0:ec8b56c64406 | 65 | } |
picnic | 0:ec8b56c64406 | 66 | } |
picnic | 0:ec8b56c64406 | 67 | } |
picnic | 0:ec8b56c64406 | 68 | } |