Another short time hack. This one is for test the behavior of the spi module. Probably an Oscilloscope is required to check the wave.

Dependencies:   mbed

/media/uploads/Rhyme/test_spi.jpg

Another short time hack of mine. To check Mr. J's problem, I needed a way to control SPI in a short time. This is an aid for testing SPI module with an Oscilloscope.

You can specify, frequency, bits, mode and number of loops to let the spi write or read.

For FRDM-KL25Z MOSI: PTD2 MISO: PTD3 SCLK:PTD1

Please set "local echo on" in your terminal program.

某JさんのSPIトラブルの様子を確認するのに、作った簡単なSPIテストプログラムです。 オシロスコープでSPIの挙動を見るためのユティリティです。

FRDM-KL25Zの場合、MOSI(PTD2), MISO(PTD3), SCLK(PTD1) で使っています。

ターミナルプログラムのローカルエコーを有効にしてご使用ください。

SPIモジュールの設定(周波数、ビット、モード、そして読み書きのループ回数を設定できます。)

Committer:
Rhyme
Date:
Wed Dec 24 12:05:06 2014 +0000
Revision:
1:6fdc687abb43
Parent:
0:5fbf51aca95c
Child:
2:3d2009b507f5
commit before publish

Who changed what in which revision?

UserRevisionLine numberNew 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 0:5fbf51aca95c 13
Rhyme 0:5fbf51aca95c 14 int freq = 1000000 ;
Rhyme 0:5fbf51aca95c 15 int bits = 8 ;
Rhyme 0:5fbf51aca95c 16 int mode = 0 ;
Rhyme 0:5fbf51aca95c 17 int loop = 10 ;
Rhyme 0:5fbf51aca95c 18
Rhyme 0:5fbf51aca95c 19 SPI mySpi(PIN_MOSI, PIN_MISO, PIN_SCLK) ;
Rhyme 0:5fbf51aca95c 20
Rhyme 0:5fbf51aca95c 21 typedef void (*func_ptr)(void) ;
Rhyme 0:5fbf51aca95c 22
Rhyme 0:5fbf51aca95c 23 void doHelp(void) ;
Rhyme 0:5fbf51aca95c 24 void doStatus(void) ;
Rhyme 0:5fbf51aca95c 25 void doFreq(void) ;
Rhyme 0:5fbf51aca95c 26 void doMode(void) ;
Rhyme 0:5fbf51aca95c 27 void doBit(void) ;
Rhyme 0:5fbf51aca95c 28 void doWrite(void) ;
Rhyme 0:5fbf51aca95c 29 void doRead(void) ;
Rhyme 0:5fbf51aca95c 30 void doLoop(void) ;
Rhyme 0:5fbf51aca95c 31
Rhyme 0:5fbf51aca95c 32 typedef struct _cmd_func {
Rhyme 0:5fbf51aca95c 33 char *name ;
Rhyme 0:5fbf51aca95c 34 func_ptr func ;
Rhyme 0:5fbf51aca95c 35 } cmd_func_type ;
Rhyme 0:5fbf51aca95c 36
Rhyme 0:5fbf51aca95c 37 cmd_func_type cmd_list[] = {
Rhyme 0:5fbf51aca95c 38 {"help", doHelp},
Rhyme 0:5fbf51aca95c 39 {"status", doStatus},
Rhyme 0:5fbf51aca95c 40 {"freq", doFreq},
Rhyme 0:5fbf51aca95c 41 {"mode", doMode},
Rhyme 0:5fbf51aca95c 42 {"bit", doBit},
Rhyme 0:5fbf51aca95c 43 {"write", doWrite},
Rhyme 0:5fbf51aca95c 44 {"read", doRead},
Rhyme 0:5fbf51aca95c 45 {"loop", doLoop},
Rhyme 0:5fbf51aca95c 46 { 0, 0 }
Rhyme 0:5fbf51aca95c 47 } ;
Rhyme 0:5fbf51aca95c 48
Rhyme 0:5fbf51aca95c 49 func_ptr getFunc(char *cmd)
Rhyme 0:5fbf51aca95c 50 {
Rhyme 0:5fbf51aca95c 51 int i = 0 ;
Rhyme 0:5fbf51aca95c 52 while(cmd_list[i].name != 0) {
Rhyme 0:5fbf51aca95c 53 if (strcmp(cmd, cmd_list[i].name) == 0) {
Rhyme 0:5fbf51aca95c 54 return(cmd_list[i].func) ; ;
Rhyme 0:5fbf51aca95c 55 }
Rhyme 0:5fbf51aca95c 56 i++ ;
Rhyme 0:5fbf51aca95c 57 }
Rhyme 0:5fbf51aca95c 58 return(0) ;
Rhyme 0:5fbf51aca95c 59 }
Rhyme 0:5fbf51aca95c 60
Rhyme 0:5fbf51aca95c 61 void doHello()
Rhyme 0:5fbf51aca95c 62 {
Rhyme 0:5fbf51aca95c 63 printf("=== spi test program ===\n\r") ;
Rhyme 0:5fbf51aca95c 64 printf("please set your terminal program\n\r") ;
Rhyme 0:5fbf51aca95c 65 printf("local echo on\n\r") ;
Rhyme 0:5fbf51aca95c 66 printf("\n\r") ;
Rhyme 0:5fbf51aca95c 67 }
Rhyme 0:5fbf51aca95c 68
Rhyme 0:5fbf51aca95c 69 int main() {
Rhyme 0:5fbf51aca95c 70 char cmd[32] ;
Rhyme 0:5fbf51aca95c 71 func_ptr func ;
Rhyme 0:5fbf51aca95c 72 doHello() ;
Rhyme 0:5fbf51aca95c 73 while(1) {
Rhyme 0:5fbf51aca95c 74 printf("> ") ;
Rhyme 0:5fbf51aca95c 75 scanf("%s", cmd) ;
Rhyme 0:5fbf51aca95c 76 if ((func = getFunc(cmd)) != 0) {
Rhyme 0:5fbf51aca95c 77 (*func)() ;
Rhyme 0:5fbf51aca95c 78 } else {
Rhyme 0:5fbf51aca95c 79 doHelp() ;
Rhyme 0:5fbf51aca95c 80 }
Rhyme 0:5fbf51aca95c 81 printf("\n\r") ;
Rhyme 0:5fbf51aca95c 82 }
Rhyme 0:5fbf51aca95c 83 }
Rhyme 0:5fbf51aca95c 84
Rhyme 0:5fbf51aca95c 85 void doHelp(void)
Rhyme 0:5fbf51aca95c 86 {
Rhyme 0:5fbf51aca95c 87 printf("=== spi test ===\n\r") ;
Rhyme 0:5fbf51aca95c 88 printf("commands available\n\r") ;
Rhyme 0:5fbf51aca95c 89 printf("help\n\r") ;
Rhyme 0:5fbf51aca95c 90 printf("status\n\r") ;
Rhyme 0:5fbf51aca95c 91 printf("freq freq_in_hz\n\r") ;
Rhyme 0:5fbf51aca95c 92 printf("mode (0 | 1 | 2 | 3)\n\r") ;
Rhyme 0:5fbf51aca95c 93 printf("bit (4 - 16)\n\r") ;
Rhyme 0:5fbf51aca95c 94 printf("write value\n\r") ;
Rhyme 0:5fbf51aca95c 95 printf("read\n\r") ;
Rhyme 0:5fbf51aca95c 96 printf("loop number (set repeat number for read/write)\n\r") ;
Rhyme 0:5fbf51aca95c 97 }
Rhyme 0:5fbf51aca95c 98
Rhyme 0:5fbf51aca95c 99 void doStatus(void)
Rhyme 0:5fbf51aca95c 100 {
Rhyme 0:5fbf51aca95c 101 printf("=== Status Report ===\n\r") ;
Rhyme 0:5fbf51aca95c 102 printf("bits: %d\n\r", bits) ;
Rhyme 0:5fbf51aca95c 103 printf("mode: %d\n\r", mode) ;
Rhyme 0:5fbf51aca95c 104 printf("freq: %d Hz\n\r", freq) ;
Rhyme 0:5fbf51aca95c 105 printf("loop: %d\n\r", loop) ;
Rhyme 0:5fbf51aca95c 106 }
Rhyme 0:5fbf51aca95c 107
Rhyme 0:5fbf51aca95c 108 void doFreq(void)
Rhyme 0:5fbf51aca95c 109 {
Rhyme 0:5fbf51aca95c 110 int freq = 0 ;
Rhyme 0:5fbf51aca95c 111 scanf("%d", &freq) ;
Rhyme 0:5fbf51aca95c 112 printf("setting frequency to %d\n\r", freq) ;
Rhyme 0:5fbf51aca95c 113 mySpi.frequency(freq) ;
Rhyme 0:5fbf51aca95c 114 }
Rhyme 0:5fbf51aca95c 115
Rhyme 0:5fbf51aca95c 116 void doMode(void)
Rhyme 0:5fbf51aca95c 117 {
Rhyme 0:5fbf51aca95c 118 scanf("%d", &mode) ;
Rhyme 0:5fbf51aca95c 119 printf("setting format(%d, %d)\n\r",bits, mode) ;
Rhyme 0:5fbf51aca95c 120 mySpi.format(bits, mode) ;
Rhyme 0:5fbf51aca95c 121 }
Rhyme 0:5fbf51aca95c 122
Rhyme 0:5fbf51aca95c 123 void doBit(void)
Rhyme 0:5fbf51aca95c 124 {
Rhyme 0:5fbf51aca95c 125 scanf("%d", &bits) ;
Rhyme 0:5fbf51aca95c 126 printf("setting format(%d, %d)\n\r",bits, mode) ;
Rhyme 0:5fbf51aca95c 127 mySpi.format(bits, mode) ;
Rhyme 0:5fbf51aca95c 128 }
Rhyme 0:5fbf51aca95c 129
Rhyme 0:5fbf51aca95c 130 void doWrite(void)
Rhyme 0:5fbf51aca95c 131 {
Rhyme 0:5fbf51aca95c 132 int value, i ;
Rhyme 0:5fbf51aca95c 133 scanf("%d", &value) ;
Rhyme 0:5fbf51aca95c 134 printf("writing value %d\n\r",value) ;
Rhyme 0:5fbf51aca95c 135 for (i = 0 ; i < loop ; i++ ) {
Rhyme 0:5fbf51aca95c 136 mySpi.write(value) ;
Rhyme 0:5fbf51aca95c 137 }
Rhyme 0:5fbf51aca95c 138 }
Rhyme 0:5fbf51aca95c 139
Rhyme 0:5fbf51aca95c 140 void doRead(void)
Rhyme 0:5fbf51aca95c 141 {
Rhyme 0:5fbf51aca95c 142 int dummy = 0 ;
Rhyme 0:5fbf51aca95c 143 int i ;
Rhyme 0:5fbf51aca95c 144 int value = 0 ;
Rhyme 0:5fbf51aca95c 145 for (i = 0 ; i < loop ; i++ ) {
Rhyme 0:5fbf51aca95c 146 value = mySpi.write(dummy) ;
Rhyme 0:5fbf51aca95c 147 }
Rhyme 0:5fbf51aca95c 148 printf("%d\n", value) ;
Rhyme 0:5fbf51aca95c 149 }
Rhyme 0:5fbf51aca95c 150
Rhyme 0:5fbf51aca95c 151 void doLoop(void)
Rhyme 0:5fbf51aca95c 152 {
Rhyme 0:5fbf51aca95c 153 scanf("%d", &loop) ;
Rhyme 0:5fbf51aca95c 154 printf("repeat number has been set to %d\n\r", loop) ;
Rhyme 0:5fbf51aca95c 155 }