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
Revision 0:c9bdd57867af, committed 2015-02-05
- Comitter:
- miguelcordero191
- Date:
- Thu Feb 05 19:04:48 2015 +0000
- Child:
- 1:072a0ab47d9c
- Commit message:
- Serial and ethernet are working as threads.; Serial baudrate to 1000000; DHCP is working well but static ip is not
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EthernetInterface.lib Thu Feb 05 19:04:48 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/EthernetInterface/#3b0a475eb1ad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SerialDriver.lib Thu Feb 05 19:04:48 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/BlazeX/code/SerialDriver/#3956012cd0c4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jro.lib Thu Feb 05 19:04:48 2015 +0000 @@ -0,0 +1,1 @@ +jro#3d8d52e9751c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Feb 05 19:04:48 2015 +0000 @@ -0,0 +1,243 @@ +/* + * Author: MIGUEL URCO + * Date: 10/11/2014 + * Notes: Checks the Ethernet cable connection +*/ +#if 1 + +#include "mbed.h" +#include "rtos.h" +#include "JroDDS.h" +#include "JroIpdata.h" +#include "JroEthernet.h" +#include "SerialDriver.h" + +#define BUFFER_SIZE 256 + +//ETHERNET +#define ECHO_SERVER_PORT 2000 +//SERIAL +#define SERIAL_BAUDRATE 1000000 + + +char* ip = "10.10.20.65"; // ip +char* mask = "255.255.255.0"; // mask +char* gateway = "10.10.20.1"; // gateway + +char* ip2 = "10.10.20.64"; + +static char rx_buffer[BUFFER_SIZE]; +static char tx_buffer[BUFFER_SIZE]; + +//SERIAL +SerialDriver screen(USBTX, USBRX); +SerialDriver uart(D1, D0); +//JroSerial jroUart(D1,D0, &screen); +Thread *ser_thread_ptr; + +//ETHERNET +IpData ipData(tx_buffer); +EthernetInterface eth; +TCPSocketServer server; +JroEthernet jroEth(ð); + +Thread *eth_thread_ptr; + +//DDS +SPI spi_device(D11, D12, D13); + +DigitalOut dds_mreset(D4); +DigitalOut dds_outramp(D5); +DigitalOut dds_sp_mode(D6); +DigitalOut dds_cs(D7); +DigitalOut dds_io_reset(D9); +DigitalInOut dds_updclk(D10); + +DDS dds_device(&spi_device, &dds_mreset, &dds_outramp, &dds_sp_mode, &dds_cs, &dds_io_reset, &dds_updclk); + +//LEDS +DigitalOut LedR(LED1); +DigitalOut LedG(LED2); +DigitalOut LedB(LED3); + +//PWM +//PwmOut LedR(LED1); + +// This thread forwards from uart to pc +void forwardUart(void const * argument) +{ + // Sometimes You're the Nail + while(1) + { + screen.putc(uart.getc()); + LedG= !LedG; + } +} + + +void waitSerialData_thread(void const *args){ + + int n; + + Thread::signal_wait(0x1); + + screen.putc(0x34); + screen.putc(0x30); + + //uart.baud(SERIAL_BAUDRATE); + + //jroUart.Init(SERIAL_BAUDRATE); + + while(1){ + //__screen.printf("\r\nWaiting serial data...\r\n"); + + if (uart.isRxBufferEmpty()){ + Thread::wait(10); + continue; + } + + Thread::wait(100); + n = uart.read(rx_buffer, 40, false); + + screen.putc(0x6E); + screen.putc(0x3D); + screen.putc(n); + + //for (int i=0; i<n; i++) + // screen.putc(rx_buffer[i]); + + if (n != 40) + { //Data is not complete + continue; + } + + if (dds_device.setAllDevice(rx_buffer, &screen) == 1){ + screen.putc(0x34); + screen.putc(0x34); + //jroSerial.writeData("Done"); + } + else + { + //jroSerial.writeData("Error"); + screen.putc(0x34); + screen.putc(0x35); + } + + } + +} + +void waitEthData_thread(void const *args){ + + int n; + + Thread::signal_wait(0x1); + + LedR = 0; + + screen.putc(0x35); + screen.putc(0x30); + + jroEth.init(ip, mask, gateway); + jroEth.openTCPServer(&server, ECHO_SERVER_PORT); + + LedR = 1; + + screen.putc(0x35); + screen.putc(0x31); + + + //__screen.printf("\r\nEth thread initialized...\r\n"); + + while(1) { + LedB = 0; + //screen.printf("\r\n ********************** \r\n"); + //__screen.printf("\r\nWait for new connection...\r\n"); + n = jroEth.read(rx_buffer); + + screen.putc(0x35); + screen.putc(0x32); + + if (n < 1) + continue; + + if (ipData.decode(rx_buffer, n) == 0) + continue; + + if (ipData.getCmd() == CMD_CHANGE_IP){ + //changing ip and reseting device + } + + dds_device.setCommand(ipData.getCmd(), ipData.getPayload(), ipData.getPayloadLen()); + ipData.encode(ipData.getCmd(), dds_device.getCmdAnswer(), dds_device.getCmdAnswerLen()); + + jroEth.sendResponse(ipData.getTxData(), ipData.getTxDataLen()); + jroEth.closeClient(); + + } +} + +int main() +{ + screen.baud(9600); + uart.baud(SERIAL_BAUDRATE); + screen.putc(0x0A); + screen.putc(0x0D); + screen.putc(0x33); + screen.putc(0x30); + + //ser_thread_ptr = new Thread(&forwardUart); + + //ser_thread_ptr = new Thread(&waitSerialData_thread); + eth_thread_ptr = new Thread(&waitEthData_thread); + + //__screen.printf("\r\n ******************************************* \r\n"); + //__screen.printf("\r\n ******************************************* \r\n"); + + //__screen.printf("\nInitializing program...\r\n"); + //screen.putc(0x33); + //screen.putc(0x30); + + //LedR.period_ms(100); + + LedG = 0; + + //__screen.printf("\r\nHabilitando threads...\r\n"); + //ser_thread_ptr->signal_set(0x1); + //Thread::wait(300); + eth_thread_ptr->signal_set(0x1); + Thread::wait(1500); + + screen.putc(0x33); + screen.putc(0x31); + //__screen.printf("\r\nInitializing DDS...\r\n"); + + while(true){ + if (dds_device.init()) + break; + + Thread::wait(250); + } + + LedG = 1; + + screen.putc(0x33); + screen.putc(0x32); + + LedB = 0; + + //__screen.printf("\r\nSetting defaults values to DDS...\r\n"); + dds_device.defaultSettings(&screen); + LedB = 1; + + screen.putc(0x33); + screen.putc(0x33); + + while(1) { + Thread::wait(250); + + } + +} + +#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Thu Feb 05 19:04:48 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-rtos/#444020d511f5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.lib Thu Feb 05 19:04:48 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/#4fc01daae5a5