SPI Master Test

Dependencies:   mbed-rtos mbed st7565LCD

Committer:
ryood
Date:
Tue Oct 04 05:25:37 2016 +0000
Revision:
6:66955ebd56dd
Parent:
5:915a9d45c969
Child:
7:4bb0c1e05e33
CS:L CS:H???????????

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