updated
Dependencies: MTS-Serial libmDot mbed-rtos mbed
Fork of mDot_LoRa_Street_light by
spi_write.cpp@9:531bddbe36a9, 2017-10-17 (annotated)
- Committer:
- venubk
- Date:
- Tue Oct 17 11:52:13 2017 +0000
- Revision:
- 9:531bddbe36a9
- Parent:
- 8:525a53f54326
energy meter integrated
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hariom | 2:20a5d4681abf | 1 | #include "mbed.h" |
hariom | 2:20a5d4681abf | 2 | #include"Thread.h" |
hariom | 2:20a5d4681abf | 3 | #include "rtos.h" |
hariom | 2:20a5d4681abf | 4 | Serial pc(USBTX, USBRX); // tx, rx |
hariom | 2:20a5d4681abf | 5 | |
hariom | 2:20a5d4681abf | 6 | SPI spimaster(SPI1_MOSI, SPI1_MISO, SPI1_SCK); |
hariom | 2:20a5d4681abf | 7 | DigitalOut cs(SPI1_CS); |
hariom | 2:20a5d4681abf | 8 | extern int first_time; |
hariom | 2:20a5d4681abf | 9 | extern int device_buffer[8]; |
hariom | 2:20a5d4681abf | 10 | int ble_flag; |
hariom | 2:20a5d4681abf | 11 | extern Mutex my_mutex; |
venubk | 6:db60638d7f9a | 12 | extern int bufferSize; |
varshaberya123 | 5:f16b067257b6 | 13 | |
venubk | 8:525a53f54326 | 14 | char data_buf[100]; |
venubk | 8:525a53f54326 | 15 | |
varshaberya123 | 5:f16b067257b6 | 16 | // reading data from spi |
varshaberya123 | 5:f16b067257b6 | 17 | // spi is communnication between ble and mdot device |
venubk | 6:db60638d7f9a | 18 | void SPI_Init() |
varshaberya123 | 5:f16b067257b6 | 19 | { |
varshaberya123 | 5:f16b067257b6 | 20 | pc.baud(9600); |
venubk | 6:db60638d7f9a | 21 | spimaster.format(8,0); |
venubk | 6:db60638d7f9a | 22 | spimaster.frequency(1000000); |
venubk | 6:db60638d7f9a | 23 | } |
venubk | 8:525a53f54326 | 24 | bool recieve_flag = false; |
venubk | 6:db60638d7f9a | 25 | int spi_read(int* response) |
venubk | 6:db60638d7f9a | 26 | { |
venubk | 6:db60638d7f9a | 27 | //int response[100]; |
venubk | 6:db60638d7f9a | 28 | cs=1; |
venubk | 6:db60638d7f9a | 29 | //pc.baud(9600); |
varshaberya123 | 5:f16b067257b6 | 30 | printf("...SPI read test ..\n\r "); |
varshaberya123 | 5:f16b067257b6 | 31 | // Chip must be deselected |
varshaberya123 | 5:f16b067257b6 | 32 | cs = 1; |
hmiot | 7:5cd07142d293 | 33 | int temp = 0; |
hmiot | 7:5cd07142d293 | 34 | int size = 0; |
venubk | 6:db60638d7f9a | 35 | int i = 0; |
venubk | 6:db60638d7f9a | 36 | printf("Reading Buffer : "); |
venubk | 6:db60638d7f9a | 37 | while(1) |
venubk | 6:db60638d7f9a | 38 | { |
venubk | 6:db60638d7f9a | 39 | // Chip must selected |
venubk | 6:db60638d7f9a | 40 | cs = 0; |
venubk | 6:db60638d7f9a | 41 | //int SUCCESS = 1; |
hmiot | 7:5cd07142d293 | 42 | temp = spimaster.write(0xAA); |
venubk | 6:db60638d7f9a | 43 | cs = 1; |
venubk | 8:525a53f54326 | 44 | //printf("Response %X ", temp); |
venubk | 8:525a53f54326 | 45 | |
hmiot | 7:5cd07142d293 | 46 | if(recieve_flag) |
venubk | 8:525a53f54326 | 47 | { |
venubk | 8:525a53f54326 | 48 | if(temp == 0x20) |
venubk | 8:525a53f54326 | 49 | { |
venubk | 8:525a53f54326 | 50 | data_buf[size] = ' '; |
venubk | 8:525a53f54326 | 51 | } |
venubk | 8:525a53f54326 | 52 | else if(temp == 0x2E) |
venubk | 8:525a53f54326 | 53 | { |
venubk | 8:525a53f54326 | 54 | data_buf[size] = '.'; |
venubk | 8:525a53f54326 | 55 | } |
venubk | 8:525a53f54326 | 56 | else if(temp == 0xFE) |
venubk | 8:525a53f54326 | 57 | { |
venubk | 8:525a53f54326 | 58 | printf("buffer size %d\n", bufferSize); |
venubk | 8:525a53f54326 | 59 | data_buf[size] = '\0'; |
venubk | 8:525a53f54326 | 60 | printf("data received = %s\n",data_buf); |
venubk | 8:525a53f54326 | 61 | } |
venubk | 8:525a53f54326 | 62 | else |
venubk | 8:525a53f54326 | 63 | { |
venubk | 8:525a53f54326 | 64 | if(temp >= 0x30) |
venubk | 8:525a53f54326 | 65 | data_buf[size] = (char)temp; |
venubk | 8:525a53f54326 | 66 | } |
hmiot | 7:5cd07142d293 | 67 | response[size++] = temp; |
venubk | 8:525a53f54326 | 68 | } |
venubk | 8:525a53f54326 | 69 | |
venubk | 8:525a53f54326 | 70 | if(temp == 0xFE) |
venubk | 8:525a53f54326 | 71 | { |
venubk | 8:525a53f54326 | 72 | bufferSize = size; |
venubk | 8:525a53f54326 | 73 | response[i] = '\0'; |
venubk | 8:525a53f54326 | 74 | int j = 0; |
venubk | 8:525a53f54326 | 75 | size = 0; |
venubk | 8:525a53f54326 | 76 | |
venubk | 8:525a53f54326 | 77 | |
venubk | 8:525a53f54326 | 78 | |
venubk | 8:525a53f54326 | 79 | break; |
venubk | 8:525a53f54326 | 80 | } |
venubk | 8:525a53f54326 | 81 | |
venubk | 8:525a53f54326 | 82 | printf("Response %X ", temp); |
venubk | 8:525a53f54326 | 83 | //printf("recieve_flag %d ", recieve_flag); |
venubk | 8:525a53f54326 | 84 | |
venubk | 8:525a53f54326 | 85 | |
hmiot | 7:5cd07142d293 | 86 | |
hmiot | 7:5cd07142d293 | 87 | if(temp == 0xA0) |
venubk | 6:db60638d7f9a | 88 | { |
hmiot | 7:5cd07142d293 | 89 | recieve_flag = true; |
hmiot | 7:5cd07142d293 | 90 | size = 0; |
hmiot | 7:5cd07142d293 | 91 | } |
hmiot | 7:5cd07142d293 | 92 | |
venubk | 6:db60638d7f9a | 93 | |
venubk | 8:525a53f54326 | 94 | osDelay(180); |
venubk | 6:db60638d7f9a | 95 | |
venubk | 6:db60638d7f9a | 96 | i++; |
venubk | 6:db60638d7f9a | 97 | } |
venubk | 6:db60638d7f9a | 98 | if(ble_flag) |
venubk | 6:db60638d7f9a | 99 | { |
hmiot | 7:5cd07142d293 | 100 | recieve_flag = false; |
venubk | 6:db60638d7f9a | 101 | cs = 0; |
venubk | 6:db60638d7f9a | 102 | spimaster.write(0xAD); |
venubk | 6:db60638d7f9a | 103 | cs = 1; |
venubk | 6:db60638d7f9a | 104 | } |
venubk | 8:525a53f54326 | 105 | else |
venubk | 8:525a53f54326 | 106 | { |
venubk | 8:525a53f54326 | 107 | recieve_flag = true; |
venubk | 8:525a53f54326 | 108 | } |
varshaberya123 | 5:f16b067257b6 | 109 | |
varshaberya123 | 5:f16b067257b6 | 110 | return 1; |
venubk | 6:db60638d7f9a | 111 | } |
varshaberya123 | 5:f16b067257b6 | 112 | |
hariom | 2:20a5d4681abf | 113 | int spi_write(int *buf) |
hariom | 2:20a5d4681abf | 114 | { |
hariom | 2:20a5d4681abf | 115 | int response[8]; |
venubk | 6:db60638d7f9a | 116 | |
venubk | 6:db60638d7f9a | 117 | // pc.baud(9600); |
hariom | 2:20a5d4681abf | 118 | printf("SPI test..\n\r"); |
hariom | 2:20a5d4681abf | 119 | //int temp; |
hariom | 2:20a5d4681abf | 120 | //size = strlen(buf); |
venubk | 6:db60638d7f9a | 121 | // Chip must be deselected |
hariom | 2:20a5d4681abf | 122 | |
hariom | 2:20a5d4681abf | 123 | |
hariom | 2:20a5d4681abf | 124 | //printf("spi data length is:%d\r\n", size); |
hariom | 2:20a5d4681abf | 125 | // Setup the spi for 8 bit data, high steady state clock, |
hariom | 2:20a5d4681abf | 126 | // second edge capture, with a 1MHz clock rate |
venubk | 6:db60638d7f9a | 127 | // spimaster.format(8,0); |
venubk | 6:db60638d7f9a | 128 | // spimaster.frequency(1000000); |
hariom | 2:20a5d4681abf | 129 | |
hariom | 2:20a5d4681abf | 130 | int i = 0; |
venubk | 6:db60638d7f9a | 131 | |
hariom | 2:20a5d4681abf | 132 | while(i < 5) |
hariom | 2:20a5d4681abf | 133 | { |
hariom | 2:20a5d4681abf | 134 | //osDelay(1000); |
hariom | 2:20a5d4681abf | 135 | // Select the device by seting chip select low |
hariom | 2:20a5d4681abf | 136 | cs = 0; |
hariom | 2:20a5d4681abf | 137 | response[i] = spimaster.write(buf[i]); |
venubk | 6:db60638d7f9a | 138 | |
venubk | 6:db60638d7f9a | 139 | if(response[i] == 0xFE) |
venubk | 6:db60638d7f9a | 140 | { |
venubk | 6:db60638d7f9a | 141 | spimaster.write(0xAF); |
venubk | 6:db60638d7f9a | 142 | } |
hariom | 2:20a5d4681abf | 143 | cs = 1; |
hariom | 2:20a5d4681abf | 144 | printf("buf[i] = %X\r\n", buf[i]); |
hariom | 2:20a5d4681abf | 145 | printf("response[i] = %X\r\n", response[i]); |
hariom | 2:20a5d4681abf | 146 | i++; |
hariom | 2:20a5d4681abf | 147 | //printf("\r\nSlave response = 0x%X, 0x%X, 0x%X, 0x%X", response[0], response[1], response[2], response[3]); |
hariom | 2:20a5d4681abf | 148 | } |
hariom | 2:20a5d4681abf | 149 | |
hariom | 2:20a5d4681abf | 150 | //printf("master send: %s\r\n", buf); |
hariom | 2:20a5d4681abf | 151 | //printf("slave response: %s\r\n", response); |
hariom | 2:20a5d4681abf | 152 | printf("exiting from spi write\r\n"); |
hariom | 2:20a5d4681abf | 153 | return response[0]; |
hariom | 2:20a5d4681abf | 154 | } |
hariom | 2:20a5d4681abf | 155 | |
hariom | 2:20a5d4681abf | 156 | |
hariom | 2:20a5d4681abf | 157 | void ble_task(void const *args) |
hariom | 2:20a5d4681abf | 158 | { |
hariom | 2:20a5d4681abf | 159 | printf("started ble task\r\n"); |
hariom | 2:20a5d4681abf | 160 | int ble_buffer[8]; |
hariom | 2:20a5d4681abf | 161 | int i; |
hariom | 2:20a5d4681abf | 162 | while (true) { |
hariom | 2:20a5d4681abf | 163 | if (ble_flag) { |
hariom | 2:20a5d4681abf | 164 | my_mutex.lock(); |
hariom | 2:20a5d4681abf | 165 | for (i = 0; i < 5; i++) |
hariom | 2:20a5d4681abf | 166 | ble_buffer[i] = device_buffer[i]; |
hariom | 2:20a5d4681abf | 167 | my_mutex.unlock(); |
hariom | 2:20a5d4681abf | 168 | printf("spi write called\r\n"); |
hariom | 2:20a5d4681abf | 169 | spi_write(ble_buffer); |
hariom | 2:20a5d4681abf | 170 | ble_flag = 0; |
hariom | 2:20a5d4681abf | 171 | } |
hariom | 2:20a5d4681abf | 172 | osDelay(1000); |
hariom | 2:20a5d4681abf | 173 | } |
varshaberya123 | 5:f16b067257b6 | 174 | } |
varshaberya123 | 5:f16b067257b6 | 175 | |
varshaberya123 | 5:f16b067257b6 | 176 | /*void ble_energymeter(void const *argc) |
varshaberya123 | 5:f16b067257b6 | 177 | { |
varshaberya123 | 5:f16b067257b6 | 178 | printf("Starting energymeter ble task \r\n"); |
varshaberya123 | 5:f16b067257b6 | 179 | int buff[8]; |
varshaberya123 | 5:f16b067257b6 | 180 | while(true) |
varshaberya123 | 5:f16b067257b6 | 181 | { |
varshaberya123 | 5:f16b067257b6 | 182 | if(ble_eflag) |
varshaberya123 | 5:f16b067257b6 | 183 | { |
varshaberya123 | 5:f16b067257b6 | 184 | printf("calling spi read \r\n"); |
varshaberya123 | 5:f16b067257b6 | 185 | spi_read(buff); |
varshaberya123 | 5:f16b067257b6 | 186 | ble_eflag = 0; |
varshaberya123 | 5:f16b067257b6 | 187 | } |
varshaberya123 | 5:f16b067257b6 | 188 | osDelay(1000); |
varshaberya123 | 5:f16b067257b6 | 189 | } |
varshaberya123 | 5:f16b067257b6 | 190 | }*/ |