SPI Master Test

Dependencies:   mbed-rtos mbed st7565LCD

Committer:
ryood
Date:
Thu Sep 29 07:41:01 2016 +0000
Revision:
1:74e13cd94576
Parent:
0:36cebc939c49
Child:
2:95204570426c
Impl. InterruptIn

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 0:36cebc939c49 1 #include "mbed.h"
ryood 0:36cebc939c49 2 #include "rtos.h"
ryood 0:36cebc939c49 3
ryood 0:36cebc939c49 4 #define SPI_SPEED (10000000)
ryood 0:36cebc939c49 5
ryood 0:36cebc939c49 6 BusOut Leds(PA_8, PB_10, PB_4, PB_5);
ryood 0:36cebc939c49 7 BusIn Switches(PA_0, PA_1, PA_4, PB_0, PC_1, PC_0);
ryood 0:36cebc939c49 8
ryood 0:36cebc939c49 9 SPI SpiM(PA_7, PA_6, PA_5); // mosi, miso, sclk
ryood 0:36cebc939c49 10 DigitalOut SpiMCs(PB_6);
ryood 0:36cebc939c49 11
ryood 1:74e13cd94576 12 InterruptIn stepChangeInterrupt(PC_7);
ryood 1:74e13cd94576 13 //DigitalOut myled(PA_10);
ryood 1:74e13cd94576 14
ryood 1:74e13cd94576 15 volatile bool isStepChanged = false;
ryood 0:36cebc939c49 16 uint8_t prevSendVal = 0x00;
ryood 0:36cebc939c49 17
ryood 1:74e13cd94576 18 //float delay = 1.0f;
ryood 1:74e13cd94576 19
ryood 1:74e13cd94576 20 void setChangeStep()
ryood 1:74e13cd94576 21 {
ryood 1:74e13cd94576 22 isStepChanged = true;
ryood 1:74e13cd94576 23 /*
ryood 1:74e13cd94576 24 static uint8_t f = 0x0f;
ryood 1:74e13cd94576 25
ryood 1:74e13cd94576 26 Leds.write(f);
ryood 1:74e13cd94576 27 f = ~f & 0x0f;
ryood 1:74e13cd94576 28 */
ryood 1:74e13cd94576 29 /*
ryood 1:74e13cd94576 30 if (delay == 1.0)
ryood 1:74e13cd94576 31 delay = 0.2; // 200 ms
ryood 1:74e13cd94576 32 else
ryood 1:74e13cd94576 33 delay = 1.0; // 1 sec
ryood 1:74e13cd94576 34 */
ryood 1:74e13cd94576 35 }
ryood 1:74e13cd94576 36
ryood 0:36cebc939c49 37 int main()
ryood 0:36cebc939c49 38 {
ryood 0:36cebc939c49 39 printf("\r\n\nNucleo rtos SPI Master Test..\r\n");
ryood 0:36cebc939c49 40
ryood 0:36cebc939c49 41 // LED Check
ryood 0:36cebc939c49 42 for (int i = 0; i < 5; i++) {
ryood 0:36cebc939c49 43 Leds.write(0x0f);
ryood 0:36cebc939c49 44 Thread::wait(100);
ryood 0:36cebc939c49 45 Leds.write(0x00);
ryood 0:36cebc939c49 46 Thread::wait(100);
ryood 0:36cebc939c49 47 }
ryood 0:36cebc939c49 48
ryood 0:36cebc939c49 49 // Setup Switches
ryood 0:36cebc939c49 50 Switches.mode(PullUp);
ryood 0:36cebc939c49 51 /*
ryood 0:36cebc939c49 52 while(1) {
ryood 0:36cebc939c49 53 printf("%x\r\n", ~Switches.read() &0x3f);
ryood 0:36cebc939c49 54 Thread::wait(100);
ryood 0:36cebc939c49 55 }
ryood 0:36cebc939c49 56 */
ryood 0:36cebc939c49 57
ryood 1:74e13cd94576 58 // Setup Interrupt
ryood 1:74e13cd94576 59 stepChangeInterrupt.fall(&setChangeStep);
ryood 1:74e13cd94576 60
ryood 0:36cebc939c49 61 // Setup SPI
ryood 0:36cebc939c49 62 SpiMCs = 1;
ryood 0:36cebc939c49 63 SpiM.format(8, 0);
ryood 0:36cebc939c49 64 SpiM.frequency(SPI_SPEED);
ryood 0:36cebc939c49 65
ryood 0:36cebc939c49 66 for (;;) {
ryood 0:36cebc939c49 67 uint8_t sendVal = ~Switches.read();
ryood 1:74e13cd94576 68 static uint8_t receivedVal;
ryood 0:36cebc939c49 69
ryood 1:74e13cd94576 70 //if (prevSendVal != sendVal) {
ryood 0:36cebc939c49 71 SpiMCs = 0;
ryood 1:74e13cd94576 72 receivedVal = SpiM.write(sendVal);
ryood 0:36cebc939c49 73 SpiMCs = 1;
ryood 0:36cebc939c49 74
ryood 0:36cebc939c49 75 prevSendVal = sendVal;
ryood 1:74e13cd94576 76 //}
ryood 1:74e13cd94576 77
ryood 1:74e13cd94576 78 if (isStepChanged) {
ryood 0:36cebc939c49 79 Leds.write(receivedVal & 0x0f);
ryood 1:74e13cd94576 80 isStepChanged = false;
ryood 0:36cebc939c49 81 }
ryood 0:36cebc939c49 82 }
ryood 0:36cebc939c49 83 }