Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
- Committer:
- manumaet
- Date:
- 2014-11-27
- Revision:
- 24:6f25ba679490
- Parent:
- 23:661a79e56208
- Child:
- 25:d58b0595b300
File content as of revision 24:6f25ba679490:
// by Matthias Grob & Manuel Stalder - ETH Zürich - 2015
#include "mbed.h"
#include "PC.h" // Serial Port via USB for debugging with Terminal
#include "DW1000.h"
PC pc(USBTX, USBRX, 921600); // USB UART Terminal
DW1000 dw(PA_7, PA_6, PA_5, PB_6, PB_9); // SPI1 on Nucleo Board (MOSI, MISO, SCLK, CS, IRQ)
const float timeunit = 1/(128*499.2);
int i=0;
char message[1021] = "";
char messageRX[1021] = "";
uint64_t TX_timestamp;
uint64_t RX_timestamp;
int event_i = 0;
char event[10][20];
uint64_t eventtimes[10];
void callbackRX(int framelength) {
TX_timestamp = dw.readRegister40(DW1000_TX_TIME, 0);
RX_timestamp = dw.readRegister40(DW1000_RX_TIME, 0);
dw.receiveString(messageRX); // receive a string
#if 0
message[0] = 'A';
for(int i = 0; i < 10; i++)
message[i+1] = messageRX[i];
dw.sendString(message);
#endif
eventtimes[event_i] = RX_timestamp - TX_timestamp; // TODO: gives some wrong values because of timer overflow
event[event_i][0] = '!';
event[event_i][1] = 'R';
event[event_i][2] = ' ';
for(int i = 0; i < 10; i++)
event[event_i][i+3] = messageRX[i];
if (event_i == 8)
event_i = 0;
else
event_i++;
dw.startRX();
}
void callbackTX() {
//TX_timestamp = dw.readRegister40(DW1000_TX_TIME, 0);
//dw.readRegister(DW1000_TX_BUFFER, 0, (uint8_t*)messagecheck, 1021);
//pc.printf("! %d Sent: \"%s\" %d\r\n", i, message, strlen(message)+1);
eventtimes[event_i] = 0;
event[event_i][0] = '!';
event[event_i][1] = 'S';
event[event_i][2] = ' ';
for(int i = 0; i < 10; i++)
event[event_i][i+3] = message[i];
if (event_i == 8)
event_i = 0;
else
event_i++;
}
int main() {
pc.printf("DecaWave 0.1\r\nup and running!\r\n");
dw.setEUI(0xFAEDCD01FAEDCD01); // basic methods called to check if we have a working SPI connection
pc.printf("%d DEVICE_ID register: 0x%X\r\n", i, dw.getDeviceID());
pc.printf("%d EUI register: %016llX\r\n", i, dw.getEUI());
pc.printf("%d Voltage: %f\r\n", i, dw.getVoltage());
dw.callbackRX = &callbackRX; // TODO: must not jump to NULL & setter
dw.callbackTX = &callbackTX;
// Receiver initialisation
dw.writeRegister16(DW1000_SYS_MASK, 0, 0x4000); //| 0x0080); // TODO: RX only good frame 0x4000, RX all frames 0x2000, TX done 0x0080
dw.startRX();
while(1) {
for(int i = 0; i < 10; i++)
if(event[i][0] == '!') {
pc.printf("%s Time: %fus\r\n", event[i], eventtimes[i]*timeunit);
event[i][0] = 'X';
}
#if 1
sprintf(message, "%d", i);
//if ((i % 10) > 5) {
dw.sendString(message);
//pc.printf("%d Sent: \"%s\" %d \r\n", i, message, strlen(message)+1);
//}
#endif
#if 0
pc.printf("%d Waiting... %d %d ", i, dw.receiving, dw.sending);
wait(5);
#endif
wait(1);
//pc.printf("Status: %010llX\r\n", dw.getStatus());
//pc.printf("State: %010llX\r\n", dw.readRegister40(DW1000_SYS_STATE, 0));
i++;
}
}