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 11:56:34 2014 +0000
Revision:
0:5fbf51aca95c
Child:
1:6fdc687abb43
First anyway working version;

Who changed what in which revision?

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