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
main.cpp@2:f9e1bcb3409a, 2015-02-10 (annotated)
- 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?
User | Revision | Line number | New 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 |