SPI Master Test

Dependencies:   mbed-rtos mbed st7565LCD

Committer:
ryood
Date:
Tue Oct 04 06:42:29 2016 +0000
Revision:
7:4bb0c1e05e33
Parent:
6:66955ebd56dd
Send 16bit data

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 3:2b2c6c0e9f1d 3 #include "st7565LCD.h"
ryood 0:36cebc939c49 4
ryood 7:4bb0c1e05e33 5 #define SPI_SPEED (4000000)
ryood 7:4bb0c1e05e33 6 #define SPI_HEADER (0x55)
ryood 0:36cebc939c49 7
ryood 0:36cebc939c49 8 BusIn Switches(PA_0, PA_1, PA_4, PB_0, PC_1, PC_0);
ryood 0:36cebc939c49 9
ryood 0:36cebc939c49 10 SPI SpiM(PA_7, PA_6, PA_5); // mosi, miso, sclk
ryood 0:36cebc939c49 11 DigitalOut SpiMCs(PB_6);
ryood 0:36cebc939c49 12
ryood 1:74e13cd94576 13 InterruptIn stepChangeInterrupt(PC_7);
ryood 1:74e13cd94576 14
ryood 3:2b2c6c0e9f1d 15 //ST7565(PinName mosi, PinName sclk, PinName cs, PinName rst, PinName a0);
ryood 3:2b2c6c0e9f1d 16 ST7565 gLCD(PB_15, PB_13, PB_12, PB_2, PB_1);
ryood 3:2b2c6c0e9f1d 17
ryood 1:74e13cd94576 18 volatile bool isStepChanged = false;
ryood 0:36cebc939c49 19 uint8_t prevSendVal = 0x00;
ryood 0:36cebc939c49 20
ryood 1:74e13cd94576 21 void setChangeStep()
ryood 1:74e13cd94576 22 {
ryood 1:74e13cd94576 23 isStepChanged = true;
ryood 1:74e13cd94576 24 }
ryood 1:74e13cd94576 25
ryood 0:36cebc939c49 26 int main()
ryood 0:36cebc939c49 27 {
ryood 0:36cebc939c49 28 printf("\r\n\nNucleo rtos SPI Master Test..\r\n");
ryood 0:36cebc939c49 29
ryood 5:915a9d45c969 30 #if DEVICE_SPI_ASYNCH
ryood 5:915a9d45c969 31 printf("DEVICE_SPI_ASYNCH: defined\r\n");
ryood 5:915a9d45c969 32 #else
ryood 5:915a9d45c969 33 printf("DEVICE_SPI_ASYNCH: not defined\r\n");
ryood 5:915a9d45c969 34 #endif
ryood 5:915a9d45c969 35
ryood 3:2b2c6c0e9f1d 36 // Setup LCD
ryood 0:36cebc939c49 37
ryood 3:2b2c6c0e9f1d 38 gLCD.begin(0x10);
ryood 3:2b2c6c0e9f1d 39 gLCD.drawstring(0, 0, "SPI Master Test");
ryood 3:2b2c6c0e9f1d 40 gLCD.display();
ryood 3:2b2c6c0e9f1d 41
ryood 0:36cebc939c49 42 // Setup Switches
ryood 0:36cebc939c49 43 Switches.mode(PullUp);
ryood 0:36cebc939c49 44 /*
ryood 0:36cebc939c49 45 while(1) {
ryood 0:36cebc939c49 46 printf("%x\r\n", ~Switches.read() &0x3f);
ryood 0:36cebc939c49 47 Thread::wait(100);
ryood 0:36cebc939c49 48 }
ryood 0:36cebc939c49 49 */
ryood 0:36cebc939c49 50
ryood 1:74e13cd94576 51 // Setup Interrupt
ryood 1:74e13cd94576 52 stepChangeInterrupt.fall(&setChangeStep);
ryood 1:74e13cd94576 53
ryood 0:36cebc939c49 54 // Setup SPI
ryood 0:36cebc939c49 55 SpiMCs = 1;
ryood 7:4bb0c1e05e33 56 SpiM.format(16, 0);
ryood 0:36cebc939c49 57 SpiM.frequency(SPI_SPEED);
ryood 0:36cebc939c49 58
ryood 4:c2b67c69d048 59 Thread::wait(1000);
ryood 4:c2b67c69d048 60 //gLCD.clear();
ryood 4:c2b67c69d048 61
ryood 5:915a9d45c969 62 uint8_t count = 0;
ryood 0:36cebc939c49 63 for (;;) {
ryood 7:4bb0c1e05e33 64 uint16_t sendVal = (SPI_HEADER << 8) | count;
ryood 5:915a9d45c969 65 SpiMCs = 0;
ryood 7:4bb0c1e05e33 66 uint16_t receivedVal = SpiM.write(sendVal);
ryood 5:915a9d45c969 67 SpiMCs = 1;
ryood 7:4bb0c1e05e33 68 count++;
ryood 7:4bb0c1e05e33 69 if (isStepChanged) {
ryood 5:915a9d45c969 70 char lineBuffer[20];
ryood 7:4bb0c1e05e33 71 sprintf(lineBuffer, "Step: %02d", receivedVal);
ryood 5:915a9d45c969 72 gLCD.drawstring(0, 0, lineBuffer);
ryood 5:915a9d45c969 73 gLCD.display();
ryood 7:4bb0c1e05e33 74 isStepChanged = false;
ryood 7:4bb0c1e05e33 75
ryood 0:36cebc939c49 76 }
ryood 6:66955ebd56dd 77 Thread::wait(1);
ryood 0:36cebc939c49 78 }
ryood 0:36cebc939c49 79 }