Ryo Od / Mbed 2 deprecated Nucleo_rtos_SPISlave_16bit_Test

Dependencies:   mbed-rtos mbed

Fork of Nucleo_rtos_SPISlave_Test by Ryo Od

Committer:
ryood
Date:
Tue Oct 04 06:43:09 2016 +0000
Revision:
4:3617af415d4c
Parent:
3:e35c6a9ad906
Recieve 16bit data

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 0:4cc5b11f7d91 1 #include "mbed.h"
ryood 0:4cc5b11f7d91 2 #include "rtos.h"
ryood 0:4cc5b11f7d91 3 #include "SPISlave.h"
ryood 0:4cc5b11f7d91 4
ryood 3:e35c6a9ad906 5 #define SPI_SPEED (4000000)
ryood 4:3617af415d4c 6 #define SPI_HEADER (0x55)
ryood 0:4cc5b11f7d91 7
ryood 0:4cc5b11f7d91 8 BusOut Leds(PA_10, PB_3, PB_5, PB_4, PB_10, PA_8);
ryood 2:46e25b11a043 9 //DigitalOut StepChangePin(PC_7);
ryood 2:46e25b11a043 10 DigitalOut StepChangePin(PB_1);
ryood 0:4cc5b11f7d91 11
ryood 2:46e25b11a043 12 //SPISlave SpiS(PA_7, PA_6, PA_5, PA_4); // mosi, miso, sclk, ssel
ryood 2:46e25b11a043 13 // SPI2
ryood 2:46e25b11a043 14 SPISlave SpiS(PB_15, PB_14, PB_13, PB_12); // mosi, miso, sclk, ssel
ryood 0:4cc5b11f7d91 15
ryood 1:ba17cd3b6ecf 16 unsigned int step = 0;
ryood 1:ba17cd3b6ecf 17
ryood 1:ba17cd3b6ecf 18 void stepUp(void const* arg)
ryood 1:ba17cd3b6ecf 19 {
ryood 1:ba17cd3b6ecf 20 step++;
ryood 1:ba17cd3b6ecf 21
ryood 1:ba17cd3b6ecf 22 // Slaveにinterruptをかける。
ryood 1:ba17cd3b6ecf 23 StepChangePin.write(1);
ryood 1:ba17cd3b6ecf 24 StepChangePin.write(0);
ryood 1:ba17cd3b6ecf 25 }
ryood 1:ba17cd3b6ecf 26
ryood 0:4cc5b11f7d91 27 int main()
ryood 0:4cc5b11f7d91 28 {
ryood 0:4cc5b11f7d91 29 printf("\r\n\nNucleo rtos SPISlave Test..\r\n");
ryood 0:4cc5b11f7d91 30
ryood 1:ba17cd3b6ecf 31 // Setup LED
ryood 0:4cc5b11f7d91 32 for (int i = 0; i < 5; i++) {
ryood 0:4cc5b11f7d91 33 Leds.write(0x3f);
ryood 0:4cc5b11f7d91 34 Thread::wait(100);
ryood 0:4cc5b11f7d91 35 Leds.write(0x00);
ryood 0:4cc5b11f7d91 36 Thread::wait(100);
ryood 0:4cc5b11f7d91 37 }
ryood 0:4cc5b11f7d91 38
ryood 1:ba17cd3b6ecf 39 // Setup SPISlave
ryood 4:3617af415d4c 40 SpiS.format(16, 0);
ryood 0:4cc5b11f7d91 41 SpiS.frequency(SPI_SPEED);
ryood 0:4cc5b11f7d91 42
ryood 1:ba17cd3b6ecf 43 // RtosTimer
ryood 1:ba17cd3b6ecf 44 RtosTimer stepTimer(stepUp, osTimerPeriodic, (void *)0);
ryood 3:e35c6a9ad906 45 stepTimer.start(500); // BPM:30
ryood 1:ba17cd3b6ecf 46
ryood 0:4cc5b11f7d91 47 SpiS.reply(0);
ryood 3:e35c6a9ad906 48 uint8_t prevVal = 0;
ryood 3:e35c6a9ad906 49 uint8_t errCount = 0;
ryood 0:4cc5b11f7d91 50 while(1) {
ryood 0:4cc5b11f7d91 51 if(SpiS.receive()) {
ryood 4:3617af415d4c 52 uint16_t val = SpiS.read();
ryood 3:e35c6a9ad906 53 prevVal++;
ryood 4:3617af415d4c 54 if ((val & 0xff00) != (SPI_HEADER << 8) || (val & 0xff) != prevVal) {
ryood 3:e35c6a9ad906 55 errCount++;
ryood 3:e35c6a9ad906 56 Leds.write(errCount);
ryood 3:e35c6a9ad906 57 }
ryood 4:3617af415d4c 58 prevVal = val & 0xff;
ryood 1:ba17cd3b6ecf 59 SpiS.reply(step % 16);
ryood 0:4cc5b11f7d91 60 }
ryood 0:4cc5b11f7d91 61 }
ryood 0:4cc5b11f7d91 62 }