Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@2:3d2009b507f5, 2016-05-16 (annotated)
- Committer:
- Rhyme
- Date:
- Mon May 16 06:28:42 2016 +0000
- Revision:
- 2:3d2009b507f5
- Parent:
- 1:6fdc687abb43
- Child:
- 3:ec7a94b41102
Chip select (D10) added
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Rhyme | 1:6fdc687abb43 | 1 | /** Test Spi a quick and dirty spi test program |
Rhyme | 1:6fdc687abb43 | 2 | */ |
Rhyme | 1:6fdc687abb43 | 3 | |
Rhyme | 0:5fbf51aca95c | 4 | #include "mbed.h" |
Rhyme | 0:5fbf51aca95c | 5 | #include <string.h> |
Rhyme | 0:5fbf51aca95c | 6 | #include <stdio.h> |
Rhyme | 0:5fbf51aca95c | 7 | |
Rhyme | 0:5fbf51aca95c | 8 | #define PIN_MOSI PTD2 |
Rhyme | 0:5fbf51aca95c | 9 | #define PIN_MISO PTD3 |
Rhyme | 0:5fbf51aca95c | 10 | #define PIN_SCLK PTD1 |
Rhyme | 0:5fbf51aca95c | 11 | #define PIN_CS_TSC PTA13 |
Rhyme | 0:5fbf51aca95c | 12 | #define PIN_TSC_INTR PTC9 |
Rhyme | 2:3d2009b507f5 | 13 | #define PIN_MSS_CS PTD0 |
Rhyme | 0:5fbf51aca95c | 14 | |
Rhyme | 0:5fbf51aca95c | 15 | int freq = 1000000 ; |
Rhyme | 0:5fbf51aca95c | 16 | int bits = 8 ; |
Rhyme | 0:5fbf51aca95c | 17 | int mode = 0 ; |
Rhyme | 0:5fbf51aca95c | 18 | int loop = 10 ; |
Rhyme | 0:5fbf51aca95c | 19 | |
Rhyme | 0:5fbf51aca95c | 20 | SPI mySpi(PIN_MOSI, PIN_MISO, PIN_SCLK) ; |
Rhyme | 2:3d2009b507f5 | 21 | DigitalOut cs(PIN_MSS_CS, 1) ; |
Rhyme | 0:5fbf51aca95c | 22 | |
Rhyme | 0:5fbf51aca95c | 23 | typedef void (*func_ptr)(void) ; |
Rhyme | 0:5fbf51aca95c | 24 | |
Rhyme | 0:5fbf51aca95c | 25 | void doHelp(void) ; |
Rhyme | 0:5fbf51aca95c | 26 | void doStatus(void) ; |
Rhyme | 0:5fbf51aca95c | 27 | void doFreq(void) ; |
Rhyme | 0:5fbf51aca95c | 28 | void doMode(void) ; |
Rhyme | 0:5fbf51aca95c | 29 | void doBit(void) ; |
Rhyme | 0:5fbf51aca95c | 30 | void doWrite(void) ; |
Rhyme | 0:5fbf51aca95c | 31 | void doRead(void) ; |
Rhyme | 0:5fbf51aca95c | 32 | void doLoop(void) ; |
Rhyme | 0:5fbf51aca95c | 33 | |
Rhyme | 0:5fbf51aca95c | 34 | typedef struct _cmd_func { |
Rhyme | 0:5fbf51aca95c | 35 | char *name ; |
Rhyme | 0:5fbf51aca95c | 36 | func_ptr func ; |
Rhyme | 0:5fbf51aca95c | 37 | } cmd_func_type ; |
Rhyme | 0:5fbf51aca95c | 38 | |
Rhyme | 0:5fbf51aca95c | 39 | cmd_func_type cmd_list[] = { |
Rhyme | 0:5fbf51aca95c | 40 | {"help", doHelp}, |
Rhyme | 0:5fbf51aca95c | 41 | {"status", doStatus}, |
Rhyme | 0:5fbf51aca95c | 42 | {"freq", doFreq}, |
Rhyme | 0:5fbf51aca95c | 43 | {"mode", doMode}, |
Rhyme | 0:5fbf51aca95c | 44 | {"bit", doBit}, |
Rhyme | 0:5fbf51aca95c | 45 | {"write", doWrite}, |
Rhyme | 0:5fbf51aca95c | 46 | {"read", doRead}, |
Rhyme | 0:5fbf51aca95c | 47 | {"loop", doLoop}, |
Rhyme | 0:5fbf51aca95c | 48 | { 0, 0 } |
Rhyme | 0:5fbf51aca95c | 49 | } ; |
Rhyme | 0:5fbf51aca95c | 50 | |
Rhyme | 0:5fbf51aca95c | 51 | func_ptr getFunc(char *cmd) |
Rhyme | 0:5fbf51aca95c | 52 | { |
Rhyme | 0:5fbf51aca95c | 53 | int i = 0 ; |
Rhyme | 0:5fbf51aca95c | 54 | while(cmd_list[i].name != 0) { |
Rhyme | 0:5fbf51aca95c | 55 | if (strcmp(cmd, cmd_list[i].name) == 0) { |
Rhyme | 0:5fbf51aca95c | 56 | return(cmd_list[i].func) ; ; |
Rhyme | 0:5fbf51aca95c | 57 | } |
Rhyme | 0:5fbf51aca95c | 58 | i++ ; |
Rhyme | 0:5fbf51aca95c | 59 | } |
Rhyme | 0:5fbf51aca95c | 60 | return(0) ; |
Rhyme | 0:5fbf51aca95c | 61 | } |
Rhyme | 0:5fbf51aca95c | 62 | |
Rhyme | 0:5fbf51aca95c | 63 | void doHello() |
Rhyme | 0:5fbf51aca95c | 64 | { |
Rhyme | 0:5fbf51aca95c | 65 | printf("=== spi test program ===\n\r") ; |
Rhyme | 0:5fbf51aca95c | 66 | printf("please set your terminal program\n\r") ; |
Rhyme | 0:5fbf51aca95c | 67 | printf("local echo on\n\r") ; |
Rhyme | 0:5fbf51aca95c | 68 | printf("\n\r") ; |
Rhyme | 0:5fbf51aca95c | 69 | } |
Rhyme | 0:5fbf51aca95c | 70 | |
Rhyme | 0:5fbf51aca95c | 71 | int main() { |
Rhyme | 0:5fbf51aca95c | 72 | char cmd[32] ; |
Rhyme | 0:5fbf51aca95c | 73 | func_ptr func ; |
Rhyme | 0:5fbf51aca95c | 74 | doHello() ; |
Rhyme | 0:5fbf51aca95c | 75 | while(1) { |
Rhyme | 0:5fbf51aca95c | 76 | printf("> ") ; |
Rhyme | 0:5fbf51aca95c | 77 | scanf("%s", cmd) ; |
Rhyme | 0:5fbf51aca95c | 78 | if ((func = getFunc(cmd)) != 0) { |
Rhyme | 0:5fbf51aca95c | 79 | (*func)() ; |
Rhyme | 0:5fbf51aca95c | 80 | } else { |
Rhyme | 0:5fbf51aca95c | 81 | doHelp() ; |
Rhyme | 0:5fbf51aca95c | 82 | } |
Rhyme | 0:5fbf51aca95c | 83 | printf("\n\r") ; |
Rhyme | 0:5fbf51aca95c | 84 | } |
Rhyme | 0:5fbf51aca95c | 85 | } |
Rhyme | 0:5fbf51aca95c | 86 | |
Rhyme | 0:5fbf51aca95c | 87 | void doHelp(void) |
Rhyme | 0:5fbf51aca95c | 88 | { |
Rhyme | 0:5fbf51aca95c | 89 | printf("=== spi test ===\n\r") ; |
Rhyme | 0:5fbf51aca95c | 90 | printf("commands available\n\r") ; |
Rhyme | 0:5fbf51aca95c | 91 | printf("help\n\r") ; |
Rhyme | 0:5fbf51aca95c | 92 | printf("status\n\r") ; |
Rhyme | 0:5fbf51aca95c | 93 | printf("freq freq_in_hz\n\r") ; |
Rhyme | 0:5fbf51aca95c | 94 | printf("mode (0 | 1 | 2 | 3)\n\r") ; |
Rhyme | 0:5fbf51aca95c | 95 | printf("bit (4 - 16)\n\r") ; |
Rhyme | 0:5fbf51aca95c | 96 | printf("write value\n\r") ; |
Rhyme | 0:5fbf51aca95c | 97 | printf("read\n\r") ; |
Rhyme | 0:5fbf51aca95c | 98 | printf("loop number (set repeat number for read/write)\n\r") ; |
Rhyme | 0:5fbf51aca95c | 99 | } |
Rhyme | 0:5fbf51aca95c | 100 | |
Rhyme | 0:5fbf51aca95c | 101 | void doStatus(void) |
Rhyme | 0:5fbf51aca95c | 102 | { |
Rhyme | 0:5fbf51aca95c | 103 | printf("=== Status Report ===\n\r") ; |
Rhyme | 0:5fbf51aca95c | 104 | printf("bits: %d\n\r", bits) ; |
Rhyme | 0:5fbf51aca95c | 105 | printf("mode: %d\n\r", mode) ; |
Rhyme | 0:5fbf51aca95c | 106 | printf("freq: %d Hz\n\r", freq) ; |
Rhyme | 0:5fbf51aca95c | 107 | printf("loop: %d\n\r", loop) ; |
Rhyme | 0:5fbf51aca95c | 108 | } |
Rhyme | 0:5fbf51aca95c | 109 | |
Rhyme | 0:5fbf51aca95c | 110 | void doFreq(void) |
Rhyme | 0:5fbf51aca95c | 111 | { |
Rhyme | 0:5fbf51aca95c | 112 | int freq = 0 ; |
Rhyme | 0:5fbf51aca95c | 113 | scanf("%d", &freq) ; |
Rhyme | 0:5fbf51aca95c | 114 | printf("setting frequency to %d\n\r", freq) ; |
Rhyme | 0:5fbf51aca95c | 115 | mySpi.frequency(freq) ; |
Rhyme | 0:5fbf51aca95c | 116 | } |
Rhyme | 0:5fbf51aca95c | 117 | |
Rhyme | 0:5fbf51aca95c | 118 | void doMode(void) |
Rhyme | 0:5fbf51aca95c | 119 | { |
Rhyme | 0:5fbf51aca95c | 120 | scanf("%d", &mode) ; |
Rhyme | 0:5fbf51aca95c | 121 | printf("setting format(%d, %d)\n\r",bits, mode) ; |
Rhyme | 0:5fbf51aca95c | 122 | mySpi.format(bits, mode) ; |
Rhyme | 0:5fbf51aca95c | 123 | } |
Rhyme | 0:5fbf51aca95c | 124 | |
Rhyme | 0:5fbf51aca95c | 125 | void doBit(void) |
Rhyme | 0:5fbf51aca95c | 126 | { |
Rhyme | 0:5fbf51aca95c | 127 | scanf("%d", &bits) ; |
Rhyme | 0:5fbf51aca95c | 128 | printf("setting format(%d, %d)\n\r",bits, mode) ; |
Rhyme | 0:5fbf51aca95c | 129 | mySpi.format(bits, mode) ; |
Rhyme | 0:5fbf51aca95c | 130 | } |
Rhyme | 0:5fbf51aca95c | 131 | |
Rhyme | 0:5fbf51aca95c | 132 | void doWrite(void) |
Rhyme | 0:5fbf51aca95c | 133 | { |
Rhyme | 0:5fbf51aca95c | 134 | int value, i ; |
Rhyme | 2:3d2009b507f5 | 135 | scanf("%X", &value) ; |
Rhyme | 2:3d2009b507f5 | 136 | printf("writing value 0x%X (%d) \n\r",value, value) ; |
Rhyme | 2:3d2009b507f5 | 137 | cs = 0 ; |
Rhyme | 0:5fbf51aca95c | 138 | for (i = 0 ; i < loop ; i++ ) { |
Rhyme | 0:5fbf51aca95c | 139 | mySpi.write(value) ; |
Rhyme | 0:5fbf51aca95c | 140 | } |
Rhyme | 2:3d2009b507f5 | 141 | cs = 1 ; |
Rhyme | 0:5fbf51aca95c | 142 | } |
Rhyme | 0:5fbf51aca95c | 143 | |
Rhyme | 0:5fbf51aca95c | 144 | void doRead(void) |
Rhyme | 0:5fbf51aca95c | 145 | { |
Rhyme | 0:5fbf51aca95c | 146 | int dummy = 0 ; |
Rhyme | 0:5fbf51aca95c | 147 | int i ; |
Rhyme | 0:5fbf51aca95c | 148 | int value = 0 ; |
Rhyme | 2:3d2009b507f5 | 149 | cs = 0 ; |
Rhyme | 0:5fbf51aca95c | 150 | for (i = 0 ; i < loop ; i++ ) { |
Rhyme | 0:5fbf51aca95c | 151 | value = mySpi.write(dummy) ; |
Rhyme | 0:5fbf51aca95c | 152 | } |
Rhyme | 2:3d2009b507f5 | 153 | cs = 1 ; |
Rhyme | 0:5fbf51aca95c | 154 | printf("%d\n", value) ; |
Rhyme | 0:5fbf51aca95c | 155 | } |
Rhyme | 0:5fbf51aca95c | 156 | |
Rhyme | 0:5fbf51aca95c | 157 | void doLoop(void) |
Rhyme | 0:5fbf51aca95c | 158 | { |
Rhyme | 0:5fbf51aca95c | 159 | scanf("%d", &loop) ; |
Rhyme | 0:5fbf51aca95c | 160 | printf("repeat number has been set to %d\n\r", loop) ; |
Rhyme | 0:5fbf51aca95c | 161 | } |