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:
Thu Feb 05 19:04:48 2015 +0000
Revision:
0:c9bdd57867af
Child:
1:072a0ab47d9c
Serial and ethernet are working as threads.; Serial baudrate to 1000000; DHCP is working well but static ip is not

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 0:c9bdd57867af 10 #include "JroDDS.h"
miguelcordero191 0:c9bdd57867af 11 #include "JroIpdata.h"
miguelcordero191 0:c9bdd57867af 12 #include "JroEthernet.h"
miguelcordero191 0:c9bdd57867af 13 #include "SerialDriver.h"
miguelcordero191 0:c9bdd57867af 14
miguelcordero191 0:c9bdd57867af 15 #define BUFFER_SIZE 256
miguelcordero191 0:c9bdd57867af 16
miguelcordero191 0:c9bdd57867af 17 //ETHERNET
miguelcordero191 0:c9bdd57867af 18 #define ECHO_SERVER_PORT 2000
miguelcordero191 0:c9bdd57867af 19 //SERIAL
miguelcordero191 0:c9bdd57867af 20 #define SERIAL_BAUDRATE 1000000
miguelcordero191 0:c9bdd57867af 21
miguelcordero191 0:c9bdd57867af 22
miguelcordero191 0:c9bdd57867af 23 char* ip = "10.10.20.65"; // ip
miguelcordero191 0:c9bdd57867af 24 char* mask = "255.255.255.0"; // mask
miguelcordero191 0:c9bdd57867af 25 char* gateway = "10.10.20.1"; // gateway
miguelcordero191 0:c9bdd57867af 26
miguelcordero191 0:c9bdd57867af 27 char* ip2 = "10.10.20.64";
miguelcordero191 0:c9bdd57867af 28
miguelcordero191 0:c9bdd57867af 29 static char rx_buffer[BUFFER_SIZE];
miguelcordero191 0:c9bdd57867af 30 static char tx_buffer[BUFFER_SIZE];
miguelcordero191 0:c9bdd57867af 31
miguelcordero191 0:c9bdd57867af 32 //SERIAL
miguelcordero191 0:c9bdd57867af 33 SerialDriver screen(USBTX, USBRX);
miguelcordero191 0:c9bdd57867af 34 SerialDriver uart(D1, D0);
miguelcordero191 0:c9bdd57867af 35 //JroSerial jroUart(D1,D0, &screen);
miguelcordero191 0:c9bdd57867af 36 Thread *ser_thread_ptr;
miguelcordero191 0:c9bdd57867af 37
miguelcordero191 0:c9bdd57867af 38 //ETHERNET
miguelcordero191 0:c9bdd57867af 39 IpData ipData(tx_buffer);
miguelcordero191 0:c9bdd57867af 40 EthernetInterface eth;
miguelcordero191 0:c9bdd57867af 41 TCPSocketServer server;
miguelcordero191 0:c9bdd57867af 42 JroEthernet jroEth(&eth);
miguelcordero191 0:c9bdd57867af 43
miguelcordero191 0:c9bdd57867af 44 Thread *eth_thread_ptr;
miguelcordero191 0:c9bdd57867af 45
miguelcordero191 0:c9bdd57867af 46 //DDS
miguelcordero191 0:c9bdd57867af 47 SPI spi_device(D11, D12, D13);
miguelcordero191 0:c9bdd57867af 48
miguelcordero191 0:c9bdd57867af 49 DigitalOut dds_mreset(D4);
miguelcordero191 0:c9bdd57867af 50 DigitalOut dds_outramp(D5);
miguelcordero191 0:c9bdd57867af 51 DigitalOut dds_sp_mode(D6);
miguelcordero191 0:c9bdd57867af 52 DigitalOut dds_cs(D7);
miguelcordero191 0:c9bdd57867af 53 DigitalOut dds_io_reset(D9);
miguelcordero191 0:c9bdd57867af 54 DigitalInOut dds_updclk(D10);
miguelcordero191 0:c9bdd57867af 55
miguelcordero191 0:c9bdd57867af 56 DDS dds_device(&spi_device, &dds_mreset, &dds_outramp, &dds_sp_mode, &dds_cs, &dds_io_reset, &dds_updclk);
miguelcordero191 0:c9bdd57867af 57
miguelcordero191 0:c9bdd57867af 58 //LEDS
miguelcordero191 0:c9bdd57867af 59 DigitalOut LedR(LED1);
miguelcordero191 0:c9bdd57867af 60 DigitalOut LedG(LED2);
miguelcordero191 0:c9bdd57867af 61 DigitalOut LedB(LED3);
miguelcordero191 0:c9bdd57867af 62
miguelcordero191 0:c9bdd57867af 63 //PWM
miguelcordero191 0:c9bdd57867af 64 //PwmOut LedR(LED1);
miguelcordero191 0:c9bdd57867af 65
miguelcordero191 0:c9bdd57867af 66 // This thread forwards from uart to pc
miguelcordero191 0:c9bdd57867af 67 void forwardUart(void const * argument)
miguelcordero191 0:c9bdd57867af 68 {
miguelcordero191 0:c9bdd57867af 69 // Sometimes You're the Nail
miguelcordero191 0:c9bdd57867af 70 while(1)
miguelcordero191 0:c9bdd57867af 71 {
miguelcordero191 0:c9bdd57867af 72 screen.putc(uart.getc());
miguelcordero191 0:c9bdd57867af 73 LedG= !LedG;
miguelcordero191 0:c9bdd57867af 74 }
miguelcordero191 0:c9bdd57867af 75 }
miguelcordero191 0:c9bdd57867af 76
miguelcordero191 0:c9bdd57867af 77
miguelcordero191 0:c9bdd57867af 78 void waitSerialData_thread(void const *args){
miguelcordero191 0:c9bdd57867af 79
miguelcordero191 0:c9bdd57867af 80 int n;
miguelcordero191 0:c9bdd57867af 81
miguelcordero191 0:c9bdd57867af 82 Thread::signal_wait(0x1);
miguelcordero191 0:c9bdd57867af 83
miguelcordero191 0:c9bdd57867af 84 screen.putc(0x34);
miguelcordero191 0:c9bdd57867af 85 screen.putc(0x30);
miguelcordero191 0:c9bdd57867af 86
miguelcordero191 0:c9bdd57867af 87 //uart.baud(SERIAL_BAUDRATE);
miguelcordero191 0:c9bdd57867af 88
miguelcordero191 0:c9bdd57867af 89 //jroUart.Init(SERIAL_BAUDRATE);
miguelcordero191 0:c9bdd57867af 90
miguelcordero191 0:c9bdd57867af 91 while(1){
miguelcordero191 0:c9bdd57867af 92 //__screen.printf("\r\nWaiting serial data...\r\n");
miguelcordero191 0:c9bdd57867af 93
miguelcordero191 0:c9bdd57867af 94 if (uart.isRxBufferEmpty()){
miguelcordero191 0:c9bdd57867af 95 Thread::wait(10);
miguelcordero191 0:c9bdd57867af 96 continue;
miguelcordero191 0:c9bdd57867af 97 }
miguelcordero191 0:c9bdd57867af 98
miguelcordero191 0:c9bdd57867af 99 Thread::wait(100);
miguelcordero191 0:c9bdd57867af 100 n = uart.read(rx_buffer, 40, false);
miguelcordero191 0:c9bdd57867af 101
miguelcordero191 0:c9bdd57867af 102 screen.putc(0x6E);
miguelcordero191 0:c9bdd57867af 103 screen.putc(0x3D);
miguelcordero191 0:c9bdd57867af 104 screen.putc(n);
miguelcordero191 0:c9bdd57867af 105
miguelcordero191 0:c9bdd57867af 106 //for (int i=0; i<n; i++)
miguelcordero191 0:c9bdd57867af 107 // screen.putc(rx_buffer[i]);
miguelcordero191 0:c9bdd57867af 108
miguelcordero191 0:c9bdd57867af 109 if (n != 40)
miguelcordero191 0:c9bdd57867af 110 { //Data is not complete
miguelcordero191 0:c9bdd57867af 111 continue;
miguelcordero191 0:c9bdd57867af 112 }
miguelcordero191 0:c9bdd57867af 113
miguelcordero191 0:c9bdd57867af 114 if (dds_device.setAllDevice(rx_buffer, &screen) == 1){
miguelcordero191 0:c9bdd57867af 115 screen.putc(0x34);
miguelcordero191 0:c9bdd57867af 116 screen.putc(0x34);
miguelcordero191 0:c9bdd57867af 117 //jroSerial.writeData("Done");
miguelcordero191 0:c9bdd57867af 118 }
miguelcordero191 0:c9bdd57867af 119 else
miguelcordero191 0:c9bdd57867af 120 {
miguelcordero191 0:c9bdd57867af 121 //jroSerial.writeData("Error");
miguelcordero191 0:c9bdd57867af 122 screen.putc(0x34);
miguelcordero191 0:c9bdd57867af 123 screen.putc(0x35);
miguelcordero191 0:c9bdd57867af 124 }
miguelcordero191 0:c9bdd57867af 125
miguelcordero191 0:c9bdd57867af 126 }
miguelcordero191 0:c9bdd57867af 127
miguelcordero191 0:c9bdd57867af 128 }
miguelcordero191 0:c9bdd57867af 129
miguelcordero191 0:c9bdd57867af 130 void waitEthData_thread(void const *args){
miguelcordero191 0:c9bdd57867af 131
miguelcordero191 0:c9bdd57867af 132 int n;
miguelcordero191 0:c9bdd57867af 133
miguelcordero191 0:c9bdd57867af 134 Thread::signal_wait(0x1);
miguelcordero191 0:c9bdd57867af 135
miguelcordero191 0:c9bdd57867af 136 LedR = 0;
miguelcordero191 0:c9bdd57867af 137
miguelcordero191 0:c9bdd57867af 138 screen.putc(0x35);
miguelcordero191 0:c9bdd57867af 139 screen.putc(0x30);
miguelcordero191 0:c9bdd57867af 140
miguelcordero191 0:c9bdd57867af 141 jroEth.init(ip, mask, gateway);
miguelcordero191 0:c9bdd57867af 142 jroEth.openTCPServer(&server, ECHO_SERVER_PORT);
miguelcordero191 0:c9bdd57867af 143
miguelcordero191 0:c9bdd57867af 144 LedR = 1;
miguelcordero191 0:c9bdd57867af 145
miguelcordero191 0:c9bdd57867af 146 screen.putc(0x35);
miguelcordero191 0:c9bdd57867af 147 screen.putc(0x31);
miguelcordero191 0:c9bdd57867af 148
miguelcordero191 0:c9bdd57867af 149
miguelcordero191 0:c9bdd57867af 150 //__screen.printf("\r\nEth thread initialized...\r\n");
miguelcordero191 0:c9bdd57867af 151
miguelcordero191 0:c9bdd57867af 152 while(1) {
miguelcordero191 0:c9bdd57867af 153 LedB = 0;
miguelcordero191 0:c9bdd57867af 154 //screen.printf("\r\n ********************** \r\n");
miguelcordero191 0:c9bdd57867af 155 //__screen.printf("\r\nWait for new connection...\r\n");
miguelcordero191 0:c9bdd57867af 156 n = jroEth.read(rx_buffer);
miguelcordero191 0:c9bdd57867af 157
miguelcordero191 0:c9bdd57867af 158 screen.putc(0x35);
miguelcordero191 0:c9bdd57867af 159 screen.putc(0x32);
miguelcordero191 0:c9bdd57867af 160
miguelcordero191 0:c9bdd57867af 161 if (n < 1)
miguelcordero191 0:c9bdd57867af 162 continue;
miguelcordero191 0:c9bdd57867af 163
miguelcordero191 0:c9bdd57867af 164 if (ipData.decode(rx_buffer, n) == 0)
miguelcordero191 0:c9bdd57867af 165 continue;
miguelcordero191 0:c9bdd57867af 166
miguelcordero191 0:c9bdd57867af 167 if (ipData.getCmd() == CMD_CHANGE_IP){
miguelcordero191 0:c9bdd57867af 168 //changing ip and reseting device
miguelcordero191 0:c9bdd57867af 169 }
miguelcordero191 0:c9bdd57867af 170
miguelcordero191 0:c9bdd57867af 171 dds_device.setCommand(ipData.getCmd(), ipData.getPayload(), ipData.getPayloadLen());
miguelcordero191 0:c9bdd57867af 172 ipData.encode(ipData.getCmd(), dds_device.getCmdAnswer(), dds_device.getCmdAnswerLen());
miguelcordero191 0:c9bdd57867af 173
miguelcordero191 0:c9bdd57867af 174 jroEth.sendResponse(ipData.getTxData(), ipData.getTxDataLen());
miguelcordero191 0:c9bdd57867af 175 jroEth.closeClient();
miguelcordero191 0:c9bdd57867af 176
miguelcordero191 0:c9bdd57867af 177 }
miguelcordero191 0:c9bdd57867af 178 }
miguelcordero191 0:c9bdd57867af 179
miguelcordero191 0:c9bdd57867af 180 int main()
miguelcordero191 0:c9bdd57867af 181 {
miguelcordero191 0:c9bdd57867af 182 screen.baud(9600);
miguelcordero191 0:c9bdd57867af 183 uart.baud(SERIAL_BAUDRATE);
miguelcordero191 0:c9bdd57867af 184 screen.putc(0x0A);
miguelcordero191 0:c9bdd57867af 185 screen.putc(0x0D);
miguelcordero191 0:c9bdd57867af 186 screen.putc(0x33);
miguelcordero191 0:c9bdd57867af 187 screen.putc(0x30);
miguelcordero191 0:c9bdd57867af 188
miguelcordero191 0:c9bdd57867af 189 //ser_thread_ptr = new Thread(&forwardUart);
miguelcordero191 0:c9bdd57867af 190
miguelcordero191 0:c9bdd57867af 191 //ser_thread_ptr = new Thread(&waitSerialData_thread);
miguelcordero191 0:c9bdd57867af 192 eth_thread_ptr = new Thread(&waitEthData_thread);
miguelcordero191 0:c9bdd57867af 193
miguelcordero191 0:c9bdd57867af 194 //__screen.printf("\r\n ******************************************* \r\n");
miguelcordero191 0:c9bdd57867af 195 //__screen.printf("\r\n ******************************************* \r\n");
miguelcordero191 0:c9bdd57867af 196
miguelcordero191 0:c9bdd57867af 197 //__screen.printf("\nInitializing program...\r\n");
miguelcordero191 0:c9bdd57867af 198 //screen.putc(0x33);
miguelcordero191 0:c9bdd57867af 199 //screen.putc(0x30);
miguelcordero191 0:c9bdd57867af 200
miguelcordero191 0:c9bdd57867af 201 //LedR.period_ms(100);
miguelcordero191 0:c9bdd57867af 202
miguelcordero191 0:c9bdd57867af 203 LedG = 0;
miguelcordero191 0:c9bdd57867af 204
miguelcordero191 0:c9bdd57867af 205 //__screen.printf("\r\nHabilitando threads...\r\n");
miguelcordero191 0:c9bdd57867af 206 //ser_thread_ptr->signal_set(0x1);
miguelcordero191 0:c9bdd57867af 207 //Thread::wait(300);
miguelcordero191 0:c9bdd57867af 208 eth_thread_ptr->signal_set(0x1);
miguelcordero191 0:c9bdd57867af 209 Thread::wait(1500);
miguelcordero191 0:c9bdd57867af 210
miguelcordero191 0:c9bdd57867af 211 screen.putc(0x33);
miguelcordero191 0:c9bdd57867af 212 screen.putc(0x31);
miguelcordero191 0:c9bdd57867af 213 //__screen.printf("\r\nInitializing DDS...\r\n");
miguelcordero191 0:c9bdd57867af 214
miguelcordero191 0:c9bdd57867af 215 while(true){
miguelcordero191 0:c9bdd57867af 216 if (dds_device.init())
miguelcordero191 0:c9bdd57867af 217 break;
miguelcordero191 0:c9bdd57867af 218
miguelcordero191 0:c9bdd57867af 219 Thread::wait(250);
miguelcordero191 0:c9bdd57867af 220 }
miguelcordero191 0:c9bdd57867af 221
miguelcordero191 0:c9bdd57867af 222 LedG = 1;
miguelcordero191 0:c9bdd57867af 223
miguelcordero191 0:c9bdd57867af 224 screen.putc(0x33);
miguelcordero191 0:c9bdd57867af 225 screen.putc(0x32);
miguelcordero191 0:c9bdd57867af 226
miguelcordero191 0:c9bdd57867af 227 LedB = 0;
miguelcordero191 0:c9bdd57867af 228
miguelcordero191 0:c9bdd57867af 229 //__screen.printf("\r\nSetting defaults values to DDS...\r\n");
miguelcordero191 0:c9bdd57867af 230 dds_device.defaultSettings(&screen);
miguelcordero191 0:c9bdd57867af 231 LedB = 1;
miguelcordero191 0:c9bdd57867af 232
miguelcordero191 0:c9bdd57867af 233 screen.putc(0x33);
miguelcordero191 0:c9bdd57867af 234 screen.putc(0x33);
miguelcordero191 0:c9bdd57867af 235
miguelcordero191 0:c9bdd57867af 236 while(1) {
miguelcordero191 0:c9bdd57867af 237 Thread::wait(250);
miguelcordero191 0:c9bdd57867af 238
miguelcordero191 0:c9bdd57867af 239 }
miguelcordero191 0:c9bdd57867af 240
miguelcordero191 0:c9bdd57867af 241 }
miguelcordero191 0:c9bdd57867af 242
miguelcordero191 0:c9bdd57867af 243 #endif