App to configure a DDS (AD9854) using a K64F. USB an Ethernet were used as interface.

Dependencies:   jro mbed AD9854 mbed-rtos I2CLCD k64f_EthLink SerialDriver FreescaleIAP EthernetInterface

Committer:
miguelcordero191
Date:
Tue Feb 10 14:35:04 2015 +0000
Revision:
2:f9e1bcb3409a
Parent:
1:072a0ab47d9c
Child:
3:f84802422619
App to configurate a DDS (AD9854) using USB and Ethernet

Who changed what in which revision?

UserRevisionLine numberNew contents of line
miguelcordero191 0:c9bdd57867af 1 /*
miguelcordero191 0:c9bdd57867af 2 * Author: MIGUEL URCO
miguelcordero191 0:c9bdd57867af 3 * Date: 10/11/2014
miguelcordero191 0:c9bdd57867af 4 * Notes: Checks the Ethernet cable connection
miguelcordero191 0:c9bdd57867af 5 */
miguelcordero191 0:c9bdd57867af 6 #if 1
miguelcordero191 0:c9bdd57867af 7
miguelcordero191 0:c9bdd57867af 8 #include "mbed.h"
miguelcordero191 0:c9bdd57867af 9 #include "rtos.h"
miguelcordero191 1:072a0ab47d9c 10 #include "EthernetInterface.h"
miguelcordero191 0:c9bdd57867af 11 #include "JroDDS.h"
miguelcordero191 0:c9bdd57867af 12 #include "JroIpdata.h"
miguelcordero191 0:c9bdd57867af 13 #include "SerialDriver.h"
miguelcordero191 0:c9bdd57867af 14
miguelcordero191 1:072a0ab47d9c 15 //Device commands
miguelcordero191 1:072a0ab47d9c 16 #define CMD_RESET 0X01
miguelcordero191 1:072a0ab47d9c 17 #define CMD_ENABLE 0x02
miguelcordero191 1:072a0ab47d9c 18 #define CMD_CHANGE_IP 0x03
miguelcordero191 1:072a0ab47d9c 19
miguelcordero191 0:c9bdd57867af 20 #define BUFFER_SIZE 256
miguelcordero191 0:c9bdd57867af 21 static char rx_buffer[BUFFER_SIZE];
miguelcordero191 0:c9bdd57867af 22 static char tx_buffer[BUFFER_SIZE];
miguelcordero191 0:c9bdd57867af 23
miguelcordero191 0:c9bdd57867af 24 //SERIAL
miguelcordero191 1:072a0ab47d9c 25 #define SERIAL_BAUDRATE 1000000
miguelcordero191 1:072a0ab47d9c 26 const char* OK_MSG = "DDSv2: Successful";
miguelcordero191 1:072a0ab47d9c 27 const char* KO_MSG = "DDSv2: Unsuccessful";
miguelcordero191 2:f9e1bcb3409a 28 const char* NI_MSG = "DDSv2: Not initialized";
miguelcordero191 1:072a0ab47d9c 29
miguelcordero191 0:c9bdd57867af 30 SerialDriver screen(USBTX, USBRX);
miguelcordero191 0:c9bdd57867af 31 SerialDriver uart(D1, D0);
miguelcordero191 0:c9bdd57867af 32 Thread *ser_thread_ptr;
miguelcordero191 0:c9bdd57867af 33
miguelcordero191 0:c9bdd57867af 34 //ETHERNET
miguelcordero191 1:072a0ab47d9c 35 #define ECHO_SERVER_PORT 2000
miguelcordero191 2:f9e1bcb3409a 36 const char* DEVICE_NAME = "jicamarcadds";
miguelcordero191 1:072a0ab47d9c 37 const char* IP = "10.10.20.63"; // IP
miguelcordero191 1:072a0ab47d9c 38 const char* MASK = "255.255.255.0"; // MASK
miguelcordero191 1:072a0ab47d9c 39 const char* GATEWAY = "10.10.20.1"; // GATEWAY
miguelcordero191 1:072a0ab47d9c 40
miguelcordero191 0:c9bdd57867af 41 IpData ipData(tx_buffer);
miguelcordero191 0:c9bdd57867af 42 EthernetInterface eth;
miguelcordero191 0:c9bdd57867af 43 TCPSocketServer server;
miguelcordero191 0:c9bdd57867af 44
miguelcordero191 0:c9bdd57867af 45 Thread *eth_thread_ptr;
miguelcordero191 0:c9bdd57867af 46
miguelcordero191 0:c9bdd57867af 47 //DDS
miguelcordero191 0:c9bdd57867af 48 SPI spi_device(D11, D12, D13);
miguelcordero191 0:c9bdd57867af 49
miguelcordero191 0:c9bdd57867af 50 DigitalOut dds_mreset(D4);
miguelcordero191 0:c9bdd57867af 51 DigitalOut dds_outramp(D5);
miguelcordero191 0:c9bdd57867af 52 DigitalOut dds_sp_mode(D6);
miguelcordero191 0:c9bdd57867af 53 DigitalOut dds_cs(D7);
miguelcordero191 0:c9bdd57867af 54 DigitalOut dds_io_reset(D9);
miguelcordero191 0:c9bdd57867af 55 DigitalInOut dds_updclk(D10);
miguelcordero191 0:c9bdd57867af 56
miguelcordero191 0:c9bdd57867af 57 DDS dds_device(&spi_device, &dds_mreset, &dds_outramp, &dds_sp_mode, &dds_cs, &dds_io_reset, &dds_updclk);
miguelcordero191 0:c9bdd57867af 58
miguelcordero191 0:c9bdd57867af 59 //LEDS
miguelcordero191 0:c9bdd57867af 60 DigitalOut LedR(LED1);
miguelcordero191 0:c9bdd57867af 61 DigitalOut LedG(LED2);
miguelcordero191 0:c9bdd57867af 62 DigitalOut LedB(LED3);
miguelcordero191 0:c9bdd57867af 63
miguelcordero191 0:c9bdd57867af 64 void waitSerialData_thread(void const *args){
miguelcordero191 0:c9bdd57867af 65
miguelcordero191 0:c9bdd57867af 66 int n;
miguelcordero191 1:072a0ab47d9c 67 bool successful;
miguelcordero191 0:c9bdd57867af 68
miguelcordero191 1:072a0ab47d9c 69 //Thread::signal_wait(0x1);
miguelcordero191 1:072a0ab47d9c 70
miguelcordero191 2:f9e1bcb3409a 71 LedG = 1;
miguelcordero191 0:c9bdd57867af 72
miguelcordero191 2:f9e1bcb3409a 73 uart.baud(SERIAL_BAUDRATE);
miguelcordero191 0:c9bdd57867af 74
miguelcordero191 0:c9bdd57867af 75 while(1){
miguelcordero191 2:f9e1bcb3409a 76 LedG = 0;
miguelcordero191 1:072a0ab47d9c 77 successful = false;
miguelcordero191 0:c9bdd57867af 78
miguelcordero191 0:c9bdd57867af 79 if (uart.isRxBufferEmpty()){
miguelcordero191 0:c9bdd57867af 80 Thread::wait(10);
miguelcordero191 0:c9bdd57867af 81 continue;
miguelcordero191 0:c9bdd57867af 82 }
miguelcordero191 0:c9bdd57867af 83
miguelcordero191 2:f9e1bcb3409a 84 Thread::wait(10);
miguelcordero191 1:072a0ab47d9c 85 n = uart.read(rx_buffer, 255, false);
miguelcordero191 2:f9e1bcb3409a 86
miguelcordero191 2:f9e1bcb3409a 87 //******************** BLINK LED *****************************
miguelcordero191 2:f9e1bcb3409a 88 for (int i=0; i<n; i++){
miguelcordero191 2:f9e1bcb3409a 89 LedG = !LedG;
miguelcordero191 2:f9e1bcb3409a 90 Thread::wait(10);
miguelcordero191 2:f9e1bcb3409a 91 }
miguelcordero191 2:f9e1bcb3409a 92
miguelcordero191 2:f9e1bcb3409a 93 //******************** DDS NOT INITIALIZED *******************
miguelcordero191 2:f9e1bcb3409a 94 if (!dds_device.wasInitialized()){
miguelcordero191 2:f9e1bcb3409a 95 for (int i=0; i<strlen(NI_MSG); i++){
miguelcordero191 2:f9e1bcb3409a 96 uart.putc(NI_MSG[i]);
miguelcordero191 2:f9e1bcb3409a 97 }
miguelcordero191 2:f9e1bcb3409a 98 continue;
miguelcordero191 2:f9e1bcb3409a 99 }
miguelcordero191 2:f9e1bcb3409a 100
miguelcordero191 2:f9e1bcb3409a 101 //********************* SUCCESSFUL DATA **********************
miguelcordero191 1:072a0ab47d9c 102 if (n == 40)
miguelcordero191 1:072a0ab47d9c 103 if (dds_device.setAllDevice(rx_buffer) == 1)
miguelcordero191 1:072a0ab47d9c 104 successful = true;
miguelcordero191 0:c9bdd57867af 105
miguelcordero191 2:f9e1bcb3409a 106 //******************** REPLY UART*****************************
miguelcordero191 1:072a0ab47d9c 107 if (successful){
miguelcordero191 1:072a0ab47d9c 108 for (int i=0; i<strlen(OK_MSG); i++){
miguelcordero191 1:072a0ab47d9c 109 uart.putc(OK_MSG[i]);
miguelcordero191 1:072a0ab47d9c 110 }
miguelcordero191 0:c9bdd57867af 111 }
miguelcordero191 1:072a0ab47d9c 112 else{
miguelcordero191 1:072a0ab47d9c 113 for (int i=0; i<strlen(KO_MSG); i++){
miguelcordero191 1:072a0ab47d9c 114 uart.putc(KO_MSG[i]);
miguelcordero191 1:072a0ab47d9c 115 }
miguelcordero191 0:c9bdd57867af 116 }
miguelcordero191 0:c9bdd57867af 117
miguelcordero191 0:c9bdd57867af 118 }
miguelcordero191 0:c9bdd57867af 119
miguelcordero191 0:c9bdd57867af 120 }
miguelcordero191 0:c9bdd57867af 121
miguelcordero191 0:c9bdd57867af 122 void waitEthData_thread(void const *args){
miguelcordero191 0:c9bdd57867af 123
miguelcordero191 1:072a0ab47d9c 124 TCPSocketConnection client;
miguelcordero191 1:072a0ab47d9c 125 int status;
miguelcordero191 1:072a0ab47d9c 126 int n, totalSize=0;
miguelcordero191 0:c9bdd57867af 127
miguelcordero191 1:072a0ab47d9c 128 //Thread::signal_wait(0x1);
miguelcordero191 0:c9bdd57867af 129
miguelcordero191 2:f9e1bcb3409a 130 LedB = 1;
miguelcordero191 0:c9bdd57867af 131
miguelcordero191 1:072a0ab47d9c 132 eth.setName(DEVICE_NAME);
miguelcordero191 1:072a0ab47d9c 133 status = eth.init(IP, MASK, GATEWAY);
miguelcordero191 1:072a0ab47d9c 134 status = eth.connect();
miguelcordero191 0:c9bdd57867af 135
miguelcordero191 1:072a0ab47d9c 136 server.bind(ECHO_SERVER_PORT);
miguelcordero191 1:072a0ab47d9c 137 server.listen(1);
miguelcordero191 0:c9bdd57867af 138
miguelcordero191 2:f9e1bcb3409a 139 LedB = 0;
miguelcordero191 0:c9bdd57867af 140
miguelcordero191 1:072a0ab47d9c 141 while(1)
miguelcordero191 1:072a0ab47d9c 142 {
miguelcordero191 0:c9bdd57867af 143 LedB = 0;
miguelcordero191 1:072a0ab47d9c 144 n = 0;
miguelcordero191 1:072a0ab47d9c 145 totalSize = 0;
miguelcordero191 2:f9e1bcb3409a 146
miguelcordero191 1:072a0ab47d9c 147 server.accept(client);
miguelcordero191 1:072a0ab47d9c 148
miguelcordero191 2:f9e1bcb3409a 149 client.set_blocking(false, 500); // Timeout after (0.5)s
miguelcordero191 0:c9bdd57867af 150
miguelcordero191 1:072a0ab47d9c 151 while (true) {
miguelcordero191 2:f9e1bcb3409a 152 LedR = !LedR;
miguelcordero191 1:072a0ab47d9c 153 n = client.receive(rx_buffer, sizeof(rx_buffer));
miguelcordero191 1:072a0ab47d9c 154 if (n <= 0) break;
miguelcordero191 1:072a0ab47d9c 155 totalSize += n;
miguelcordero191 2:f9e1bcb3409a 156 Thread::wait(10);
miguelcordero191 2:f9e1bcb3409a 157 }
miguelcordero191 2:f9e1bcb3409a 158
miguelcordero191 2:f9e1bcb3409a 159 LedB = 1;
miguelcordero191 2:f9e1bcb3409a 160
miguelcordero191 2:f9e1bcb3409a 161 if (totalSize < 1){
miguelcordero191 2:f9e1bcb3409a 162 client.close();
miguelcordero191 2:f9e1bcb3409a 163 continue;
miguelcordero191 1:072a0ab47d9c 164 }
miguelcordero191 1:072a0ab47d9c 165
miguelcordero191 2:f9e1bcb3409a 166 if (ipData.decode(rx_buffer, totalSize) == 0){
miguelcordero191 2:f9e1bcb3409a 167 client.close();
miguelcordero191 0:c9bdd57867af 168 continue;
miguelcordero191 2:f9e1bcb3409a 169 }
miguelcordero191 0:c9bdd57867af 170
miguelcordero191 2:f9e1bcb3409a 171 //******************** DDS NOT INITIALIZED *******************
miguelcordero191 2:f9e1bcb3409a 172 if (!dds_device.wasInitialized()){
miguelcordero191 2:f9e1bcb3409a 173 client.send(ipData.getNIData(ipData.getCmd()), ipData.getNIDataLen());
miguelcordero191 2:f9e1bcb3409a 174 client.close();
miguelcordero191 0:c9bdd57867af 175 continue;
miguelcordero191 2:f9e1bcb3409a 176 }
miguelcordero191 0:c9bdd57867af 177
miguelcordero191 2:f9e1bcb3409a 178 //******************** REPLY REQ *****************************
miguelcordero191 0:c9bdd57867af 179 if (ipData.getCmd() == CMD_CHANGE_IP){
miguelcordero191 0:c9bdd57867af 180 //changing ip and reseting device
miguelcordero191 2:f9e1bcb3409a 181 //status = eth.setNewAddr(IP2, MASK, GATEWAY);
miguelcordero191 0:c9bdd57867af 182 }
miguelcordero191 0:c9bdd57867af 183
miguelcordero191 0:c9bdd57867af 184 dds_device.setCommand(ipData.getCmd(), ipData.getPayload(), ipData.getPayloadLen());
miguelcordero191 0:c9bdd57867af 185 ipData.encode(ipData.getCmd(), dds_device.getCmdAnswer(), dds_device.getCmdAnswerLen());
miguelcordero191 0:c9bdd57867af 186
miguelcordero191 1:072a0ab47d9c 187 client.send(ipData.getTxData(), ipData.getTxDataLen());
miguelcordero191 1:072a0ab47d9c 188 client.close();
miguelcordero191 0:c9bdd57867af 189
miguelcordero191 0:c9bdd57867af 190 }
miguelcordero191 0:c9bdd57867af 191 }
miguelcordero191 0:c9bdd57867af 192
miguelcordero191 0:c9bdd57867af 193 int main()
miguelcordero191 0:c9bdd57867af 194 {
miguelcordero191 0:c9bdd57867af 195 screen.baud(9600);
miguelcordero191 1:072a0ab47d9c 196
miguelcordero191 0:c9bdd57867af 197 screen.putc(0x0A);
miguelcordero191 0:c9bdd57867af 198 screen.putc(0x0D);
miguelcordero191 0:c9bdd57867af 199 screen.putc(0x33);
miguelcordero191 2:f9e1bcb3409a 200 screen.putc(0x33);
miguelcordero191 0:c9bdd57867af 201
miguelcordero191 1:072a0ab47d9c 202 ser_thread_ptr = new Thread(&waitSerialData_thread);
miguelcordero191 0:c9bdd57867af 203 eth_thread_ptr = new Thread(&waitEthData_thread);
miguelcordero191 0:c9bdd57867af 204
miguelcordero191 2:f9e1bcb3409a 205 LedR = 1;
miguelcordero191 0:c9bdd57867af 206
miguelcordero191 0:c9bdd57867af 207 screen.putc(0x33);
miguelcordero191 2:f9e1bcb3409a 208 screen.putc(0x32);
miguelcordero191 0:c9bdd57867af 209
miguelcordero191 0:c9bdd57867af 210 while(true){
miguelcordero191 0:c9bdd57867af 211 if (dds_device.init())
miguelcordero191 0:c9bdd57867af 212 break;
miguelcordero191 2:f9e1bcb3409a 213 LedR = !LedR;
miguelcordero191 0:c9bdd57867af 214 Thread::wait(250);
miguelcordero191 0:c9bdd57867af 215 }
miguelcordero191 0:c9bdd57867af 216
miguelcordero191 2:f9e1bcb3409a 217 LedR = 0;
miguelcordero191 0:c9bdd57867af 218
miguelcordero191 0:c9bdd57867af 219 screen.putc(0x33);
miguelcordero191 2:f9e1bcb3409a 220 screen.putc(0x31);
miguelcordero191 0:c9bdd57867af 221
miguelcordero191 2:f9e1bcb3409a 222 LedR = 1;
miguelcordero191 2:f9e1bcb3409a 223
miguelcordero191 1:072a0ab47d9c 224 dds_device.defaultSettings();
miguelcordero191 2:f9e1bcb3409a 225 LedR = 0;
miguelcordero191 0:c9bdd57867af 226
miguelcordero191 0:c9bdd57867af 227 screen.putc(0x33);
miguelcordero191 2:f9e1bcb3409a 228 screen.putc(0x30);
miguelcordero191 0:c9bdd57867af 229
miguelcordero191 1:072a0ab47d9c 230 Thread::wait(5000);
miguelcordero191 2:f9e1bcb3409a 231
miguelcordero191 1:072a0ab47d9c 232 //int c=0;
miguelcordero191 1:072a0ab47d9c 233 while(true){
miguelcordero191 1:072a0ab47d9c 234 Thread::wait(1000);
miguelcordero191 1:072a0ab47d9c 235 //screen.putc(0x2D + c);
miguelcordero191 1:072a0ab47d9c 236 //c = (c+1) % 3;
miguelcordero191 0:c9bdd57867af 237 }
miguelcordero191 0:c9bdd57867af 238
miguelcordero191 0:c9bdd57867af 239 }
miguelcordero191 0:c9bdd57867af 240
miguelcordero191 0:c9bdd57867af 241 #endif