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.
Fork of jro by
dds.cpp@1:7c424a3e12ea, 2014-12-04 (annotated)
- Committer:
- miguelcordero191
- Date:
- Thu Dec 04 14:35:52 2014 +0000
- Revision:
- 1:7c424a3e12ea
- Parent:
- 0:b444ea725ba7
First release: write and read process working very well
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| miguelcordero191 | 0:b444ea725ba7 | 1 | #include "dds.h" |
| miguelcordero191 | 0:b444ea725ba7 | 2 | |
| miguelcordero191 | 1:7c424a3e12ea | 3 | static char controlRegister[4]; |
| miguelcordero191 | 1:7c424a3e12ea | 4 | static char read_spi_data[6]; |
| miguelcordero191 | 0:b444ea725ba7 | 5 | |
| miguelcordero191 | 1:7c424a3e12ea | 6 | static char* ko_msg = "KO"; |
| miguelcordero191 | 1:7c424a3e12ea | 7 | static char* ok_msg = "OK"; |
| miguelcordero191 | 1:7c424a3e12ea | 8 | |
| miguelcordero191 | 1:7c424a3e12ea | 9 | DDS::DDS(SPI *spi_dev, DigitalOut *mreset, DigitalOut *outramp, DigitalOut *spmode, DigitalOut *cs, DigitalOut *ioreset, DigitalInOut *updclk){ |
| miguelcordero191 | 0:b444ea725ba7 | 10 | |
| miguelcordero191 | 0:b444ea725ba7 | 11 | spi_device = spi_dev; |
| miguelcordero191 | 0:b444ea725ba7 | 12 | |
| miguelcordero191 | 0:b444ea725ba7 | 13 | dds_mreset = mreset; |
| miguelcordero191 | 0:b444ea725ba7 | 14 | dds_outramp = outramp; |
| miguelcordero191 | 0:b444ea725ba7 | 15 | dds_sp_mode = spmode; |
| miguelcordero191 | 0:b444ea725ba7 | 16 | dds_cs = cs; |
| miguelcordero191 | 0:b444ea725ba7 | 17 | dds_io_reset = ioreset; |
| miguelcordero191 | 0:b444ea725ba7 | 18 | dds_updclk = updclk; |
| miguelcordero191 | 0:b444ea725ba7 | 19 | |
| miguelcordero191 | 0:b444ea725ba7 | 20 | dds_updclk->input(); |
| miguelcordero191 | 0:b444ea725ba7 | 21 | *dds_sp_mode = 0; |
| miguelcordero191 | 0:b444ea725ba7 | 22 | *dds_cs = 1; |
| miguelcordero191 | 1:7c424a3e12ea | 23 | *dds_outramp = 0; |
| miguelcordero191 | 1:7c424a3e12ea | 24 | |
| miguelcordero191 | 1:7c424a3e12ea | 25 | cmd_answer = NULL; |
| miguelcordero191 | 1:7c424a3e12ea | 26 | cmd_answer_len = 0; |
| miguelcordero191 | 0:b444ea725ba7 | 27 | |
| miguelcordero191 | 0:b444ea725ba7 | 28 | spi_device->format(SPI_BITS, SPI_MODE); |
| miguelcordero191 | 0:b444ea725ba7 | 29 | spi_device->frequency(SPI_FREQ); |
| miguelcordero191 | 0:b444ea725ba7 | 30 | |
| miguelcordero191 | 0:b444ea725ba7 | 31 | this->isConfig = false; |
| miguelcordero191 | 0:b444ea725ba7 | 32 | |
| miguelcordero191 | 0:b444ea725ba7 | 33 | } |
| miguelcordero191 | 0:b444ea725ba7 | 34 | |
| miguelcordero191 | 1:7c424a3e12ea | 35 | int DDS::__writeData(char addr, char ndata, const char* data){ |
| miguelcordero191 | 0:b444ea725ba7 | 36 | |
| miguelcordero191 | 0:b444ea725ba7 | 37 | // I/O reset |
| miguelcordero191 | 0:b444ea725ba7 | 38 | *dds_updclk = 0; |
| miguelcordero191 | 0:b444ea725ba7 | 39 | *dds_io_reset = 1; |
| miguelcordero191 | 0:b444ea725ba7 | 40 | wait_us(10); |
| miguelcordero191 | 0:b444ea725ba7 | 41 | *dds_io_reset = 0; |
| miguelcordero191 | 0:b444ea725ba7 | 42 | wait_us(10); |
| miguelcordero191 | 0:b444ea725ba7 | 43 | |
| miguelcordero191 | 0:b444ea725ba7 | 44 | *dds_cs = 0; |
| miguelcordero191 | 0:b444ea725ba7 | 45 | |
| miguelcordero191 | 0:b444ea725ba7 | 46 | //Sending serial address |
| miguelcordero191 | 0:b444ea725ba7 | 47 | printf("\r\nWriting Addr = %d", addr); |
| miguelcordero191 | 0:b444ea725ba7 | 48 | spi_device->write(addr & 0x0F); |
| miguelcordero191 | 0:b444ea725ba7 | 49 | |
| miguelcordero191 | 1:7c424a3e12ea | 50 | for(char i = 0; i < ndata; i++) |
| miguelcordero191 | 0:b444ea725ba7 | 51 | { |
| miguelcordero191 | 0:b444ea725ba7 | 52 | wait_us(150); |
| miguelcordero191 | 1:7c424a3e12ea | 53 | spi_device->write(data[i]); |
| miguelcordero191 | 0:b444ea725ba7 | 54 | } |
| miguelcordero191 | 0:b444ea725ba7 | 55 | |
| miguelcordero191 | 0:b444ea725ba7 | 56 | *dds_cs = 1; |
| miguelcordero191 | 1:7c424a3e12ea | 57 | |
| miguelcordero191 | 1:7c424a3e12ea | 58 | for(char i = 0; i < ndata; i++) |
| miguelcordero191 | 0:b444ea725ba7 | 59 | { |
| miguelcordero191 | 1:7c424a3e12ea | 60 | printf("\r\nData[%d] = 0x%x", i, data[i]); |
| miguelcordero191 | 0:b444ea725ba7 | 61 | } |
| miguelcordero191 | 0:b444ea725ba7 | 62 | |
| miguelcordero191 | 1:7c424a3e12ea | 63 | |
| miguelcordero191 | 0:b444ea725ba7 | 64 | wait_us(10); |
| miguelcordero191 | 0:b444ea725ba7 | 65 | *dds_updclk = 1; |
| miguelcordero191 | 0:b444ea725ba7 | 66 | wait_us(10); |
| miguelcordero191 | 0:b444ea725ba7 | 67 | *dds_updclk = 0; |
| miguelcordero191 | 0:b444ea725ba7 | 68 | wait_us(10); |
| miguelcordero191 | 0:b444ea725ba7 | 69 | |
| miguelcordero191 | 0:b444ea725ba7 | 70 | return 1; |
| miguelcordero191 | 0:b444ea725ba7 | 71 | } |
| miguelcordero191 | 0:b444ea725ba7 | 72 | |
| miguelcordero191 | 0:b444ea725ba7 | 73 | |
| miguelcordero191 | 1:7c424a3e12ea | 74 | char* DDS::__readData(char addr, char ndata){ |
| miguelcordero191 | 0:b444ea725ba7 | 75 | |
| miguelcordero191 | 0:b444ea725ba7 | 76 | // I/O reset |
| miguelcordero191 | 0:b444ea725ba7 | 77 | *dds_io_reset = 1; |
| miguelcordero191 | 0:b444ea725ba7 | 78 | wait_us(10); |
| miguelcordero191 | 0:b444ea725ba7 | 79 | *dds_io_reset = 0; |
| miguelcordero191 | 0:b444ea725ba7 | 80 | wait_us(10); |
| miguelcordero191 | 0:b444ea725ba7 | 81 | |
| miguelcordero191 | 0:b444ea725ba7 | 82 | *dds_cs = 0; |
| miguelcordero191 | 0:b444ea725ba7 | 83 | |
| miguelcordero191 | 0:b444ea725ba7 | 84 | //Sending serial address |
| miguelcordero191 | 0:b444ea725ba7 | 85 | printf("\r\nReading Addr = %d", addr); |
| miguelcordero191 | 0:b444ea725ba7 | 86 | spi_device->write((addr & 0x0F) | 0x80); |
| miguelcordero191 | 0:b444ea725ba7 | 87 | |
| miguelcordero191 | 1:7c424a3e12ea | 88 | for(char i = 0; i < ndata; i++) |
| miguelcordero191 | 0:b444ea725ba7 | 89 | { |
| miguelcordero191 | 0:b444ea725ba7 | 90 | wait_us(150); |
| miguelcordero191 | 1:7c424a3e12ea | 91 | read_spi_data[i] = spi_device->write(0x00); |
| miguelcordero191 | 0:b444ea725ba7 | 92 | } |
| miguelcordero191 | 0:b444ea725ba7 | 93 | |
| miguelcordero191 | 0:b444ea725ba7 | 94 | *dds_cs = 1; |
| miguelcordero191 | 1:7c424a3e12ea | 95 | |
| miguelcordero191 | 1:7c424a3e12ea | 96 | for(char i = 0; i < ndata; i++) |
| miguelcordero191 | 0:b444ea725ba7 | 97 | { |
| miguelcordero191 | 1:7c424a3e12ea | 98 | printf("\r\nData[%d] = 0x%x", i, read_spi_data[i]); |
| miguelcordero191 | 0:b444ea725ba7 | 99 | } |
| miguelcordero191 | 0:b444ea725ba7 | 100 | |
| miguelcordero191 | 1:7c424a3e12ea | 101 | |
| miguelcordero191 | 0:b444ea725ba7 | 102 | wait_us(10); |
| miguelcordero191 | 0:b444ea725ba7 | 103 | |
| miguelcordero191 | 0:b444ea725ba7 | 104 | return read_spi_data; |
| miguelcordero191 | 0:b444ea725ba7 | 105 | } |
| miguelcordero191 | 0:b444ea725ba7 | 106 | |
| miguelcordero191 | 1:7c424a3e12ea | 107 | int DDS::__writeDataAndVerify(char addr, char ndata, const char* wr_spi_data){ |
| miguelcordero191 | 0:b444ea725ba7 | 108 | |
| miguelcordero191 | 0:b444ea725ba7 | 109 | bool success; |
| miguelcordero191 | 1:7c424a3e12ea | 110 | char* rd_spi_data; |
| miguelcordero191 | 0:b444ea725ba7 | 111 | |
| miguelcordero191 | 0:b444ea725ba7 | 112 | this->__writeData(addr, ndata, wr_spi_data); |
| miguelcordero191 | 0:b444ea725ba7 | 113 | rd_spi_data = this->__readData(addr, ndata); |
| miguelcordero191 | 0:b444ea725ba7 | 114 | |
| miguelcordero191 | 0:b444ea725ba7 | 115 | success = true; |
| miguelcordero191 | 0:b444ea725ba7 | 116 | |
| miguelcordero191 | 1:7c424a3e12ea | 117 | for(char i = 0; i < ndata; i++) |
| miguelcordero191 | 0:b444ea725ba7 | 118 | { |
| miguelcordero191 | 0:b444ea725ba7 | 119 | |
| miguelcordero191 | 0:b444ea725ba7 | 120 | if (wr_spi_data[i] != rd_spi_data[i]) |
| miguelcordero191 | 0:b444ea725ba7 | 121 | { |
| miguelcordero191 | 0:b444ea725ba7 | 122 | success = false; |
| miguelcordero191 | 0:b444ea725ba7 | 123 | break; |
| miguelcordero191 | 0:b444ea725ba7 | 124 | } |
| miguelcordero191 | 0:b444ea725ba7 | 125 | |
| miguelcordero191 | 0:b444ea725ba7 | 126 | } |
| miguelcordero191 | 0:b444ea725ba7 | 127 | |
| miguelcordero191 | 0:b444ea725ba7 | 128 | printf("\r\nSuccessful writting = %d\r\n", success); |
| miguelcordero191 | 0:b444ea725ba7 | 129 | |
| miguelcordero191 | 0:b444ea725ba7 | 130 | return success; |
| miguelcordero191 | 0:b444ea725ba7 | 131 | } |
| miguelcordero191 | 0:b444ea725ba7 | 132 | |
| miguelcordero191 | 1:7c424a3e12ea | 133 | char* DDS::__getControlRegister(){ |
| miguelcordero191 | 0:b444ea725ba7 | 134 | |
| miguelcordero191 | 0:b444ea725ba7 | 135 | bool pll_range = 0; |
| miguelcordero191 | 0:b444ea725ba7 | 136 | bool pll_bypass = 1; |
| miguelcordero191 | 0:b444ea725ba7 | 137 | |
| miguelcordero191 | 0:b444ea725ba7 | 138 | if (cr_multiplier >= 4){ |
| miguelcordero191 | 0:b444ea725ba7 | 139 | pll_bypass = 0; |
| miguelcordero191 | 0:b444ea725ba7 | 140 | } |
| miguelcordero191 | 0:b444ea725ba7 | 141 | |
| miguelcordero191 | 1:7c424a3e12ea | 142 | if (frequency >= 200){ |
| miguelcordero191 | 0:b444ea725ba7 | 143 | pll_range = 1; |
| miguelcordero191 | 0:b444ea725ba7 | 144 | } |
| miguelcordero191 | 0:b444ea725ba7 | 145 | |
| miguelcordero191 | 1:7c424a3e12ea | 146 | controlRegister[0] = 0x10 + cr_qdac_pwdn*4; |
| miguelcordero191 | 1:7c424a3e12ea | 147 | controlRegister[1] = pll_range*64 + pll_bypass*32 + (cr_multiplier & 0x1F); |
| miguelcordero191 | 1:7c424a3e12ea | 148 | controlRegister[2] = (cr_mode & 0x07)*2 + cr_ioupdclk; |
| miguelcordero191 | 1:7c424a3e12ea | 149 | controlRegister[3] = cr_inv_sinc*64 + cr_osk_en*32 + cr_osk_int*16 + cr_msb_lsb*2 + cr_sdo; |
| miguelcordero191 | 0:b444ea725ba7 | 150 | |
| miguelcordero191 | 0:b444ea725ba7 | 151 | return controlRegister; |
| miguelcordero191 | 0:b444ea725ba7 | 152 | |
| miguelcordero191 | 0:b444ea725ba7 | 153 | } |
| miguelcordero191 | 0:b444ea725ba7 | 154 | |
| miguelcordero191 | 0:b444ea725ba7 | 155 | int DDS::__writeControlRegister(){ |
| miguelcordero191 | 0:b444ea725ba7 | 156 | |
| miguelcordero191 | 0:b444ea725ba7 | 157 | bool success; |
| miguelcordero191 | 1:7c424a3e12ea | 158 | char* wr_spi_data; |
| miguelcordero191 | 1:7c424a3e12ea | 159 | char* rd_spi_data; |
| miguelcordero191 | 1:7c424a3e12ea | 160 | char addr = 0x07, ndata = 4; |
| miguelcordero191 | 0:b444ea725ba7 | 161 | |
| miguelcordero191 | 0:b444ea725ba7 | 162 | wr_spi_data = this->__getControlRegister(); |
| miguelcordero191 | 0:b444ea725ba7 | 163 | |
| miguelcordero191 | 0:b444ea725ba7 | 164 | success = this->__writeData(addr, ndata, wr_spi_data); |
| miguelcordero191 | 0:b444ea725ba7 | 165 | |
| miguelcordero191 | 0:b444ea725ba7 | 166 | //printf("\r\nChanging UPD_CLK as an OUTPUT ..."); |
| miguelcordero191 | 0:b444ea725ba7 | 167 | dds_updclk->output(); |
| miguelcordero191 | 0:b444ea725ba7 | 168 | |
| miguelcordero191 | 0:b444ea725ba7 | 169 | wait_us(100); |
| miguelcordero191 | 0:b444ea725ba7 | 170 | *dds_updclk = 1; |
| miguelcordero191 | 0:b444ea725ba7 | 171 | wait_us(10); |
| miguelcordero191 | 0:b444ea725ba7 | 172 | *dds_updclk = 0; |
| miguelcordero191 | 0:b444ea725ba7 | 173 | wait_us(10); |
| miguelcordero191 | 0:b444ea725ba7 | 174 | |
| miguelcordero191 | 0:b444ea725ba7 | 175 | rd_spi_data = this->__readData(addr, ndata); |
| miguelcordero191 | 0:b444ea725ba7 | 176 | |
| miguelcordero191 | 0:b444ea725ba7 | 177 | success = true; |
| miguelcordero191 | 0:b444ea725ba7 | 178 | |
| miguelcordero191 | 1:7c424a3e12ea | 179 | for(char i = 0; i < ndata; i++) |
| miguelcordero191 | 0:b444ea725ba7 | 180 | { |
| miguelcordero191 | 0:b444ea725ba7 | 181 | if (wr_spi_data[i] != rd_spi_data[i]) |
| miguelcordero191 | 0:b444ea725ba7 | 182 | { |
| miguelcordero191 | 0:b444ea725ba7 | 183 | success = false; |
| miguelcordero191 | 0:b444ea725ba7 | 184 | break; |
| miguelcordero191 | 0:b444ea725ba7 | 185 | } |
| miguelcordero191 | 0:b444ea725ba7 | 186 | } |
| miguelcordero191 | 0:b444ea725ba7 | 187 | |
| miguelcordero191 | 0:b444ea725ba7 | 188 | return success; |
| miguelcordero191 | 0:b444ea725ba7 | 189 | } |
| miguelcordero191 | 0:b444ea725ba7 | 190 | |
| miguelcordero191 | 0:b444ea725ba7 | 191 | |
| miguelcordero191 | 0:b444ea725ba7 | 192 | int DDS::reset(){ |
| miguelcordero191 | 0:b444ea725ba7 | 193 | |
| miguelcordero191 | 0:b444ea725ba7 | 194 | // Master reset |
| miguelcordero191 | 0:b444ea725ba7 | 195 | //Set as a input, temporary |
| miguelcordero191 | 0:b444ea725ba7 | 196 | //printf("\r\nChange updclk direction as an INPUT ...\r\n"); |
| miguelcordero191 | 0:b444ea725ba7 | 197 | dds_updclk->input(); |
| miguelcordero191 | 0:b444ea725ba7 | 198 | dds_updclk->mode(PullDown); |
| miguelcordero191 | 0:b444ea725ba7 | 199 | |
| miguelcordero191 | 0:b444ea725ba7 | 200 | //printf("\r\nReseting DDS ...\r\n"); |
| miguelcordero191 | 0:b444ea725ba7 | 201 | *dds_mreset = 1; |
| miguelcordero191 | 0:b444ea725ba7 | 202 | wait_ms(1); |
| miguelcordero191 | 0:b444ea725ba7 | 203 | *dds_mreset = 0; |
| miguelcordero191 | 0:b444ea725ba7 | 204 | wait_ms(1); |
| miguelcordero191 | 0:b444ea725ba7 | 205 | return 0; |
| miguelcordero191 | 0:b444ea725ba7 | 206 | } |
| miguelcordero191 | 0:b444ea725ba7 | 207 | |
| miguelcordero191 | 0:b444ea725ba7 | 208 | int DDS::scanIOUpdate(){ |
| miguelcordero191 | 0:b444ea725ba7 | 209 | |
| miguelcordero191 | 0:b444ea725ba7 | 210 | unsigned int cont = 0; |
| miguelcordero191 | 0:b444ea725ba7 | 211 | |
| miguelcordero191 | 0:b444ea725ba7 | 212 | this->reset(); |
| miguelcordero191 | 0:b444ea725ba7 | 213 | |
| miguelcordero191 | 0:b444ea725ba7 | 214 | printf("\r\nWaiting a upd_clk ...\r\n"); |
| miguelcordero191 | 0:b444ea725ba7 | 215 | while(true){ |
| miguelcordero191 | 0:b444ea725ba7 | 216 | if (*dds_updclk == 1) |
| miguelcordero191 | 0:b444ea725ba7 | 217 | break; |
| miguelcordero191 | 0:b444ea725ba7 | 218 | |
| miguelcordero191 | 0:b444ea725ba7 | 219 | cont += 1; |
| miguelcordero191 | 0:b444ea725ba7 | 220 | if (cont > 10000) |
| miguelcordero191 | 0:b444ea725ba7 | 221 | break; |
| miguelcordero191 | 0:b444ea725ba7 | 222 | |
| miguelcordero191 | 0:b444ea725ba7 | 223 | wait_us(1); |
| miguelcordero191 | 0:b444ea725ba7 | 224 | } |
| miguelcordero191 | 0:b444ea725ba7 | 225 | |
| miguelcordero191 | 0:b444ea725ba7 | 226 | if (cont > 10000){ |
| miguelcordero191 | 1:7c424a3e12ea | 227 | printf("\r\nA upd_clk was not found\r\n"); |
| miguelcordero191 | 0:b444ea725ba7 | 228 | return 0; |
| miguelcordero191 | 0:b444ea725ba7 | 229 | } |
| miguelcordero191 | 0:b444ea725ba7 | 230 | |
| miguelcordero191 | 1:7c424a3e12ea | 231 | printf("\r\nA upd_clk was found ...\r\n"); |
| miguelcordero191 | 0:b444ea725ba7 | 232 | |
| miguelcordero191 | 0:b444ea725ba7 | 233 | return 1; |
| miguelcordero191 | 0:b444ea725ba7 | 234 | } |
| miguelcordero191 | 0:b444ea725ba7 | 235 | |
| miguelcordero191 | 0:b444ea725ba7 | 236 | int DDS::find(){ |
| miguelcordero191 | 0:b444ea725ba7 | 237 | /* |
| miguelcordero191 | 1:7c424a3e12ea | 238 | char phase[]; |
| miguelcordero191 | 0:b444ea725ba7 | 239 | |
| miguelcordero191 | 0:b444ea725ba7 | 240 | phase[0] = 0x0A; |
| miguelcordero191 | 0:b444ea725ba7 | 241 | phase[1] = 0x55; |
| miguelcordero191 | 0:b444ea725ba7 | 242 | |
| miguelcordero191 | 0:b444ea725ba7 | 243 | this->__writeDataAndVerify(0x00, 5, phase); |
| miguelcordero191 | 0:b444ea725ba7 | 244 | */ |
| miguelcordero191 | 0:b444ea725ba7 | 245 | this->__readData(0x05, 4); |
| miguelcordero191 | 0:b444ea725ba7 | 246 | this->__readData(0x0A, 1); |
| miguelcordero191 | 0:b444ea725ba7 | 247 | return 1; |
| miguelcordero191 | 0:b444ea725ba7 | 248 | |
| miguelcordero191 | 0:b444ea725ba7 | 249 | } |
| miguelcordero191 | 0:b444ea725ba7 | 250 | |
| miguelcordero191 | 0:b444ea725ba7 | 251 | |
| miguelcordero191 | 0:b444ea725ba7 | 252 | int DDS::init(){ |
| miguelcordero191 | 0:b444ea725ba7 | 253 | |
| miguelcordero191 | 0:b444ea725ba7 | 254 | //printf("\r\nSetting default parameters in CR ...\r\n"); |
| miguelcordero191 | 0:b444ea725ba7 | 255 | |
| miguelcordero191 | 0:b444ea725ba7 | 256 | //Serial mode enabled |
| miguelcordero191 | 1:7c424a3e12ea | 257 | this->frequency = 200.0; // Work frequency in MHz |
| miguelcordero191 | 1:7c424a3e12ea | 258 | this->cr_multiplier = 4; // Multiplier 4- 20 |
| miguelcordero191 | 1:7c424a3e12ea | 259 | this->cr_mode = 0; // Single, FSK, Ramped FSK, Chirp, BPSK |
| miguelcordero191 | 1:7c424a3e12ea | 260 | this->cr_qdac_pwdn = 0; // QDAC power down enabled: 0 -> disable |
| miguelcordero191 | 1:7c424a3e12ea | 261 | this->cr_ioupdclk = 0; // IO Update clock direction: 0 -> input, 1 -> output |
| miguelcordero191 | 1:7c424a3e12ea | 262 | this->cr_inv_sinc = 0; // Sinc inverser filter enable: 0 -> enable |
| miguelcordero191 | 1:7c424a3e12ea | 263 | this->cr_osk_en = 1; // Enable Amplitude multiplier: 0 -> disabled |
| miguelcordero191 | 1:7c424a3e12ea | 264 | this->cr_osk_int = 0; // register/counter output shaped control: 0 -> register, 1 -> counter |
| miguelcordero191 | 1:7c424a3e12ea | 265 | this->cr_msb_lsb = 0; // msb/lsb bit first: 0 -> MSB, 1 -> LSB |
| miguelcordero191 | 1:7c424a3e12ea | 266 | this->cr_sdo = 1; // SDO pin active: 0 -> inactive |
| miguelcordero191 | 0:b444ea725ba7 | 267 | |
| miguelcordero191 | 0:b444ea725ba7 | 268 | //printf("\r\nSetting in serial mode ...\r\n"); |
| miguelcordero191 | 0:b444ea725ba7 | 269 | *dds_sp_mode = 0; |
| miguelcordero191 | 0:b444ea725ba7 | 270 | *dds_cs = 1; |
| miguelcordero191 | 0:b444ea725ba7 | 271 | |
| miguelcordero191 | 0:b444ea725ba7 | 272 | this->reset(); |
| miguelcordero191 | 0:b444ea725ba7 | 273 | |
| miguelcordero191 | 0:b444ea725ba7 | 274 | //printf("\r\nWritting CR ...\r\n"); |
| miguelcordero191 | 0:b444ea725ba7 | 275 | |
| miguelcordero191 | 0:b444ea725ba7 | 276 | if (not this->__writeControlRegister()){ |
| miguelcordero191 | 0:b444ea725ba7 | 277 | printf("\r\nUnsuccessful DDS initialization"); |
| miguelcordero191 | 0:b444ea725ba7 | 278 | this->isConfig = false; |
| miguelcordero191 | 0:b444ea725ba7 | 279 | return false; |
| miguelcordero191 | 0:b444ea725ba7 | 280 | } |
| miguelcordero191 | 0:b444ea725ba7 | 281 | |
| miguelcordero191 | 0:b444ea725ba7 | 282 | printf("\r\nSuccessfull DDS initialization"); |
| miguelcordero191 | 0:b444ea725ba7 | 283 | |
| miguelcordero191 | 0:b444ea725ba7 | 284 | this->isConfig = true; |
| miguelcordero191 | 0:b444ea725ba7 | 285 | |
| miguelcordero191 | 0:b444ea725ba7 | 286 | return true; |
| miguelcordero191 | 0:b444ea725ba7 | 287 | } |
| miguelcordero191 | 1:7c424a3e12ea | 288 | |
| miguelcordero191 | 1:7c424a3e12ea | 289 | char* DDS::rdMode(){ |
| miguelcordero191 | 0:b444ea725ba7 | 290 | |
| miguelcordero191 | 1:7c424a3e12ea | 291 | char* rd_data; |
| miguelcordero191 | 1:7c424a3e12ea | 292 | char mode; |
| miguelcordero191 | 1:7c424a3e12ea | 293 | |
| miguelcordero191 | 1:7c424a3e12ea | 294 | rd_data = this->__readData(0x07, 4); |
| miguelcordero191 | 1:7c424a3e12ea | 295 | mode = (rd_data[2] & 0x0E) >> 1; |
| miguelcordero191 | 1:7c424a3e12ea | 296 | |
| miguelcordero191 | 1:7c424a3e12ea | 297 | rd_data[0] = mode; |
| miguelcordero191 | 1:7c424a3e12ea | 298 | |
| miguelcordero191 | 1:7c424a3e12ea | 299 | return rd_data; |
| miguelcordero191 | 0:b444ea725ba7 | 300 | } |
| miguelcordero191 | 0:b444ea725ba7 | 301 | |
| miguelcordero191 | 1:7c424a3e12ea | 302 | char* DDS::rdMultiplier(){ |
| miguelcordero191 | 1:7c424a3e12ea | 303 | |
| miguelcordero191 | 1:7c424a3e12ea | 304 | char* rd_data; |
| miguelcordero191 | 1:7c424a3e12ea | 305 | char mult; |
| miguelcordero191 | 1:7c424a3e12ea | 306 | |
| miguelcordero191 | 1:7c424a3e12ea | 307 | rd_data = this->__readData(0x07, 4); |
| miguelcordero191 | 1:7c424a3e12ea | 308 | mult = (rd_data[1] & 0x1F); |
| miguelcordero191 | 1:7c424a3e12ea | 309 | |
| miguelcordero191 | 1:7c424a3e12ea | 310 | rd_data[0] = mult; |
| miguelcordero191 | 1:7c424a3e12ea | 311 | rd_data[1] = ((int)clock >> 8) & 0xff; |
| miguelcordero191 | 1:7c424a3e12ea | 312 | rd_data[2] = (int)clock & 0xff; |
| miguelcordero191 | 1:7c424a3e12ea | 313 | |
| miguelcordero191 | 1:7c424a3e12ea | 314 | return rd_data; |
| miguelcordero191 | 1:7c424a3e12ea | 315 | } |
| miguelcordero191 | 1:7c424a3e12ea | 316 | char* DDS::rdPhase1(){ |
| miguelcordero191 | 1:7c424a3e12ea | 317 | |
| miguelcordero191 | 1:7c424a3e12ea | 318 | char* rd_data; |
| miguelcordero191 | 1:7c424a3e12ea | 319 | |
| miguelcordero191 | 1:7c424a3e12ea | 320 | rd_data = this->__readData(0x00, 2); |
| miguelcordero191 | 1:7c424a3e12ea | 321 | |
| miguelcordero191 | 1:7c424a3e12ea | 322 | return rd_data; |
| miguelcordero191 | 1:7c424a3e12ea | 323 | |
| miguelcordero191 | 1:7c424a3e12ea | 324 | } |
| miguelcordero191 | 1:7c424a3e12ea | 325 | char* DDS::rdPhase2(){ |
| miguelcordero191 | 1:7c424a3e12ea | 326 | |
| miguelcordero191 | 1:7c424a3e12ea | 327 | char* rd_data; |
| miguelcordero191 | 1:7c424a3e12ea | 328 | |
| miguelcordero191 | 1:7c424a3e12ea | 329 | rd_data = this->__readData(0x01, 2); |
| miguelcordero191 | 1:7c424a3e12ea | 330 | |
| miguelcordero191 | 1:7c424a3e12ea | 331 | return rd_data; |
| miguelcordero191 | 1:7c424a3e12ea | 332 | } |
| miguelcordero191 | 1:7c424a3e12ea | 333 | char* DDS::rdFrequency1(){ |
| miguelcordero191 | 1:7c424a3e12ea | 334 | |
| miguelcordero191 | 1:7c424a3e12ea | 335 | char* rd_data; |
| miguelcordero191 | 1:7c424a3e12ea | 336 | |
| miguelcordero191 | 1:7c424a3e12ea | 337 | rd_data = this->__readData(0x02, 6); |
| miguelcordero191 | 1:7c424a3e12ea | 338 | |
| miguelcordero191 | 1:7c424a3e12ea | 339 | return rd_data; |
| miguelcordero191 | 1:7c424a3e12ea | 340 | |
| miguelcordero191 | 1:7c424a3e12ea | 341 | } |
| miguelcordero191 | 1:7c424a3e12ea | 342 | char* DDS::rdFrequency2(){ |
| miguelcordero191 | 1:7c424a3e12ea | 343 | |
| miguelcordero191 | 1:7c424a3e12ea | 344 | char* rd_data; |
| miguelcordero191 | 1:7c424a3e12ea | 345 | |
| miguelcordero191 | 1:7c424a3e12ea | 346 | rd_data = this->__readData(0x03, 6); |
| miguelcordero191 | 1:7c424a3e12ea | 347 | |
| miguelcordero191 | 1:7c424a3e12ea | 348 | return rd_data; |
| miguelcordero191 | 1:7c424a3e12ea | 349 | } |
| miguelcordero191 | 1:7c424a3e12ea | 350 | char* DDS::rdAmplitudeI(){ |
| miguelcordero191 | 1:7c424a3e12ea | 351 | |
| miguelcordero191 | 1:7c424a3e12ea | 352 | char* rd_data; |
| miguelcordero191 | 1:7c424a3e12ea | 353 | |
| miguelcordero191 | 1:7c424a3e12ea | 354 | rd_data = this->__readData(0x08, 2); |
| miguelcordero191 | 1:7c424a3e12ea | 355 | |
| miguelcordero191 | 1:7c424a3e12ea | 356 | return rd_data; |
| miguelcordero191 | 1:7c424a3e12ea | 357 | } |
| miguelcordero191 | 1:7c424a3e12ea | 358 | char* DDS::rdAmplitudeQ(){ |
| miguelcordero191 | 1:7c424a3e12ea | 359 | |
| miguelcordero191 | 1:7c424a3e12ea | 360 | char* rd_data; |
| miguelcordero191 | 1:7c424a3e12ea | 361 | |
| miguelcordero191 | 1:7c424a3e12ea | 362 | rd_data = this->__readData(0x09, 2); |
| miguelcordero191 | 1:7c424a3e12ea | 363 | |
| miguelcordero191 | 1:7c424a3e12ea | 364 | return rd_data; |
| miguelcordero191 | 0:b444ea725ba7 | 365 | } |
| miguelcordero191 | 0:b444ea725ba7 | 366 | |
| miguelcordero191 | 1:7c424a3e12ea | 367 | int DDS::wrMode(char mode){ |
| miguelcordero191 | 0:b444ea725ba7 | 368 | |
| miguelcordero191 | 0:b444ea725ba7 | 369 | this->cr_mode = mode & 0x07; |
| miguelcordero191 | 0:b444ea725ba7 | 370 | |
| miguelcordero191 | 0:b444ea725ba7 | 371 | return this->__writeControlRegister(); |
| miguelcordero191 | 0:b444ea725ba7 | 372 | } |
| miguelcordero191 | 0:b444ea725ba7 | 373 | |
| miguelcordero191 | 1:7c424a3e12ea | 374 | int DDS::wrMultiplier(char multiplier, float clock){ |
| miguelcordero191 | 0:b444ea725ba7 | 375 | |
| miguelcordero191 | 0:b444ea725ba7 | 376 | this->cr_multiplier = multiplier & 0x1F; |
| miguelcordero191 | 0:b444ea725ba7 | 377 | this->frequency = clock; |
| miguelcordero191 | 0:b444ea725ba7 | 378 | |
| miguelcordero191 | 1:7c424a3e12ea | 379 | printf("\r\n mult = %d, clock = %f", multiplier, clock); |
| miguelcordero191 | 1:7c424a3e12ea | 380 | printf("\r\n cr_mult = %d", cr_multiplier); |
| miguelcordero191 | 1:7c424a3e12ea | 381 | |
| miguelcordero191 | 0:b444ea725ba7 | 382 | return this->__writeControlRegister(); |
| miguelcordero191 | 0:b444ea725ba7 | 383 | } |
| miguelcordero191 | 0:b444ea725ba7 | 384 | |
| miguelcordero191 | 1:7c424a3e12ea | 385 | int DDS::wrPhase1(char* phase){ |
| miguelcordero191 | 0:b444ea725ba7 | 386 | |
| miguelcordero191 | 0:b444ea725ba7 | 387 | return this->__writeDataAndVerify(0x00, 2, phase); |
| miguelcordero191 | 0:b444ea725ba7 | 388 | |
| miguelcordero191 | 0:b444ea725ba7 | 389 | } |
| miguelcordero191 | 0:b444ea725ba7 | 390 | |
| miguelcordero191 | 1:7c424a3e12ea | 391 | int DDS::wrPhase2(char* phase){ |
| miguelcordero191 | 0:b444ea725ba7 | 392 | |
| miguelcordero191 | 0:b444ea725ba7 | 393 | return this->__writeDataAndVerify(0x01, 2, phase); |
| miguelcordero191 | 0:b444ea725ba7 | 394 | |
| miguelcordero191 | 0:b444ea725ba7 | 395 | } |
| miguelcordero191 | 0:b444ea725ba7 | 396 | |
| miguelcordero191 | 1:7c424a3e12ea | 397 | int DDS::wrFrequency1(char* freq){ |
| miguelcordero191 | 0:b444ea725ba7 | 398 | |
| miguelcordero191 | 0:b444ea725ba7 | 399 | return this->__writeDataAndVerify(0x02, 6, freq); |
| miguelcordero191 | 0:b444ea725ba7 | 400 | |
| miguelcordero191 | 0:b444ea725ba7 | 401 | } |
| miguelcordero191 | 1:7c424a3e12ea | 402 | int DDS::wrFrequency2(char* freq){ |
| miguelcordero191 | 0:b444ea725ba7 | 403 | |
| miguelcordero191 | 0:b444ea725ba7 | 404 | return this->__writeDataAndVerify(0x03, 6, freq); |
| miguelcordero191 | 0:b444ea725ba7 | 405 | |
| miguelcordero191 | 1:7c424a3e12ea | 406 | } |
| miguelcordero191 | 1:7c424a3e12ea | 407 | |
| miguelcordero191 | 1:7c424a3e12ea | 408 | int DDS::wrAmplitudeI(char* amplitude){ |
| miguelcordero191 | 1:7c424a3e12ea | 409 | |
| miguelcordero191 | 1:7c424a3e12ea | 410 | amplitudeI[0] = amplitude[0]; |
| miguelcordero191 | 1:7c424a3e12ea | 411 | amplitudeI[1] = amplitude[1]; |
| miguelcordero191 | 1:7c424a3e12ea | 412 | |
| miguelcordero191 | 1:7c424a3e12ea | 413 | return this->__writeDataAndVerify(0x08, 2, amplitude); |
| miguelcordero191 | 1:7c424a3e12ea | 414 | |
| miguelcordero191 | 1:7c424a3e12ea | 415 | } |
| miguelcordero191 | 1:7c424a3e12ea | 416 | |
| miguelcordero191 | 1:7c424a3e12ea | 417 | int DDS::wrAmplitudeQ(char* amplitude){ |
| miguelcordero191 | 1:7c424a3e12ea | 418 | |
| miguelcordero191 | 1:7c424a3e12ea | 419 | amplitudeQ[0] = amplitude[0]; |
| miguelcordero191 | 1:7c424a3e12ea | 420 | amplitudeQ[1] = amplitude[1]; |
| miguelcordero191 | 1:7c424a3e12ea | 421 | |
| miguelcordero191 | 1:7c424a3e12ea | 422 | return this->__writeDataAndVerify(0x09, 2, amplitude); |
| miguelcordero191 | 1:7c424a3e12ea | 423 | |
| miguelcordero191 | 1:7c424a3e12ea | 424 | } |
| miguelcordero191 | 1:7c424a3e12ea | 425 | |
| miguelcordero191 | 1:7c424a3e12ea | 426 | int DDS::enableRF(){ |
| miguelcordero191 | 1:7c424a3e12ea | 427 | |
| miguelcordero191 | 1:7c424a3e12ea | 428 | this->rf_enabled = true; |
| miguelcordero191 | 1:7c424a3e12ea | 429 | |
| miguelcordero191 | 1:7c424a3e12ea | 430 | this->wrAmplitudeI(this->amplitudeI); |
| miguelcordero191 | 1:7c424a3e12ea | 431 | |
| miguelcordero191 | 1:7c424a3e12ea | 432 | return this->wrAmplitudeQ(this->amplitudeQ); |
| miguelcordero191 | 1:7c424a3e12ea | 433 | } |
| miguelcordero191 | 1:7c424a3e12ea | 434 | |
| miguelcordero191 | 1:7c424a3e12ea | 435 | int DDS::disableRF(){ |
| miguelcordero191 | 1:7c424a3e12ea | 436 | |
| miguelcordero191 | 1:7c424a3e12ea | 437 | this->rf_enabled = false; |
| miguelcordero191 | 1:7c424a3e12ea | 438 | |
| miguelcordero191 | 1:7c424a3e12ea | 439 | this->wrAmplitudeI("\x00\x00"); |
| miguelcordero191 | 1:7c424a3e12ea | 440 | |
| miguelcordero191 | 1:7c424a3e12ea | 441 | return this->wrAmplitudeQ("\x00\x00"); |
| miguelcordero191 | 1:7c424a3e12ea | 442 | } |
| miguelcordero191 | 1:7c424a3e12ea | 443 | |
| miguelcordero191 | 1:7c424a3e12ea | 444 | int DDS::defaultSettings(){ |
| miguelcordero191 | 1:7c424a3e12ea | 445 | |
| miguelcordero191 | 1:7c424a3e12ea | 446 | this->wrMultiplier(20, 200.0); |
| miguelcordero191 | 1:7c424a3e12ea | 447 | this->wrAmplitudeI("\x0F\xC0"); //0xFC0 produces best SFDR than 0xFFF |
| miguelcordero191 | 1:7c424a3e12ea | 448 | this->wrAmplitudeQ("\x0F\xC0"); //0xFC0 produces best SFDR than 0xFFF |
| miguelcordero191 | 1:7c424a3e12ea | 449 | this->wrFrequency1("\x00\x00\x00\x00\x00\x00"); // 49.92 <> 0x3f 0xe5 0xc9 0x1d 0x14 0xe3 <> 49.92/clock*(2**48) \x3f\xe5\xc9\x1d\x14\xe3 |
| miguelcordero191 | 1:7c424a3e12ea | 450 | this->wrFrequency2("\x00\x00\x00\x00\x00\x00"); |
| miguelcordero191 | 1:7c424a3e12ea | 451 | this->wrPhase1("\x00\x00"); //0 grados |
| miguelcordero191 | 1:7c424a3e12ea | 452 | this->wrPhase2("\x20\x00"); //180 grados <> 0x20 0x00 <> 180/360*(2**14) |
| miguelcordero191 | 1:7c424a3e12ea | 453 | return this->wrMode(4); //BPSK mode |
| miguelcordero191 | 1:7c424a3e12ea | 454 | |
| miguelcordero191 | 1:7c424a3e12ea | 455 | } |
| miguelcordero191 | 1:7c424a3e12ea | 456 | |
| miguelcordero191 | 1:7c424a3e12ea | 457 | char* DDS::newCommand(unsigned short cmd, char* payload, unsigned long payload_len){ |
| miguelcordero191 | 1:7c424a3e12ea | 458 | |
| miguelcordero191 | 1:7c424a3e12ea | 459 | bool success = false; |
| miguelcordero191 | 1:7c424a3e12ea | 460 | char* tx_msg; |
| miguelcordero191 | 1:7c424a3e12ea | 461 | unsigned long tx_msg_len; |
| miguelcordero191 | 1:7c424a3e12ea | 462 | |
| miguelcordero191 | 1:7c424a3e12ea | 463 | tx_msg = ko_msg; |
| miguelcordero191 | 1:7c424a3e12ea | 464 | tx_msg_len = 2; |
| miguelcordero191 | 1:7c424a3e12ea | 465 | |
| miguelcordero191 | 1:7c424a3e12ea | 466 | printf("cmd = %d, payload_len = %d", cmd, payload_len); |
| miguelcordero191 | 1:7c424a3e12ea | 467 | |
| miguelcordero191 | 1:7c424a3e12ea | 468 | printf("\r\nPayload = "); |
| miguelcordero191 | 1:7c424a3e12ea | 469 | for(unsigned long i=0; i< payload_len; i++) |
| miguelcordero191 | 1:7c424a3e12ea | 470 | printf("0x%x ", payload[i]); |
| miguelcordero191 | 1:7c424a3e12ea | 471 | |
| miguelcordero191 | 1:7c424a3e12ea | 472 | switch ( cmd ) |
| miguelcordero191 | 1:7c424a3e12ea | 473 | { |
| miguelcordero191 | 1:7c424a3e12ea | 474 | case 0x01: |
| miguelcordero191 | 1:7c424a3e12ea | 475 | success = this->init(); |
| miguelcordero191 | 1:7c424a3e12ea | 476 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 477 | |
| miguelcordero191 | 1:7c424a3e12ea | 478 | case 0x02: |
| miguelcordero191 | 1:7c424a3e12ea | 479 | if (payload_len == 1){ |
| miguelcordero191 | 1:7c424a3e12ea | 480 | if (payload[0] == 0) |
| miguelcordero191 | 1:7c424a3e12ea | 481 | success = this->disableRF(); |
| miguelcordero191 | 1:7c424a3e12ea | 482 | else |
| miguelcordero191 | 1:7c424a3e12ea | 483 | success = this->enableRF(); |
| miguelcordero191 | 1:7c424a3e12ea | 484 | } |
| miguelcordero191 | 1:7c424a3e12ea | 485 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 486 | |
| miguelcordero191 | 1:7c424a3e12ea | 487 | case 0x10: |
| miguelcordero191 | 1:7c424a3e12ea | 488 | if (payload_len == 3){ |
| miguelcordero191 | 1:7c424a3e12ea | 489 | unsigned short clock = payload[1]*256 + payload[2]; |
| miguelcordero191 | 1:7c424a3e12ea | 490 | success = this->wrMultiplier(payload[0], (float)clock); |
| miguelcordero191 | 1:7c424a3e12ea | 491 | } |
| miguelcordero191 | 1:7c424a3e12ea | 492 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 493 | |
| miguelcordero191 | 1:7c424a3e12ea | 494 | case 0x11: |
| miguelcordero191 | 1:7c424a3e12ea | 495 | if (payload_len == 1){ |
| miguelcordero191 | 1:7c424a3e12ea | 496 | success = this->wrMode(payload[0]); |
| miguelcordero191 | 1:7c424a3e12ea | 497 | } |
| miguelcordero191 | 1:7c424a3e12ea | 498 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 499 | |
| miguelcordero191 | 1:7c424a3e12ea | 500 | case 0x12: |
| miguelcordero191 | 1:7c424a3e12ea | 501 | if (payload_len == 6){ |
| miguelcordero191 | 1:7c424a3e12ea | 502 | success = this->wrFrequency1(payload); |
| miguelcordero191 | 1:7c424a3e12ea | 503 | } |
| miguelcordero191 | 1:7c424a3e12ea | 504 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 505 | |
| miguelcordero191 | 1:7c424a3e12ea | 506 | case 0x13: |
| miguelcordero191 | 1:7c424a3e12ea | 507 | if (payload_len == 6){ |
| miguelcordero191 | 1:7c424a3e12ea | 508 | success = this->wrFrequency2(payload); |
| miguelcordero191 | 1:7c424a3e12ea | 509 | } |
| miguelcordero191 | 1:7c424a3e12ea | 510 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 511 | |
| miguelcordero191 | 1:7c424a3e12ea | 512 | case 0x14: |
| miguelcordero191 | 1:7c424a3e12ea | 513 | if (payload_len == 2){ |
| miguelcordero191 | 1:7c424a3e12ea | 514 | success = this->wrPhase1(payload); |
| miguelcordero191 | 1:7c424a3e12ea | 515 | } |
| miguelcordero191 | 1:7c424a3e12ea | 516 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 517 | |
| miguelcordero191 | 1:7c424a3e12ea | 518 | case 0x15: |
| miguelcordero191 | 1:7c424a3e12ea | 519 | if (payload_len == 2){ |
| miguelcordero191 | 1:7c424a3e12ea | 520 | success = this->wrPhase2(payload); |
| miguelcordero191 | 1:7c424a3e12ea | 521 | } |
| miguelcordero191 | 1:7c424a3e12ea | 522 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 523 | |
| miguelcordero191 | 1:7c424a3e12ea | 524 | case 0x16: |
| miguelcordero191 | 1:7c424a3e12ea | 525 | if (payload_len == 2){ |
| miguelcordero191 | 1:7c424a3e12ea | 526 | success = this->wrAmplitudeI(payload); |
| miguelcordero191 | 1:7c424a3e12ea | 527 | } |
| miguelcordero191 | 1:7c424a3e12ea | 528 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 529 | |
| miguelcordero191 | 1:7c424a3e12ea | 530 | case 0x17: |
| miguelcordero191 | 1:7c424a3e12ea | 531 | if (payload_len == 2){ |
| miguelcordero191 | 1:7c424a3e12ea | 532 | success = this->wrAmplitudeQ(payload); |
| miguelcordero191 | 1:7c424a3e12ea | 533 | } |
| miguelcordero191 | 1:7c424a3e12ea | 534 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 535 | |
| miguelcordero191 | 1:7c424a3e12ea | 536 | case 0x8002: |
| miguelcordero191 | 1:7c424a3e12ea | 537 | if (rf_enabled == 1) |
| miguelcordero191 | 1:7c424a3e12ea | 538 | tx_msg = "\x01"; |
| miguelcordero191 | 1:7c424a3e12ea | 539 | else |
| miguelcordero191 | 1:7c424a3e12ea | 540 | tx_msg = "\x00"; |
| miguelcordero191 | 1:7c424a3e12ea | 541 | |
| miguelcordero191 | 1:7c424a3e12ea | 542 | tx_msg_len = 1; |
| miguelcordero191 | 1:7c424a3e12ea | 543 | |
| miguelcordero191 | 1:7c424a3e12ea | 544 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 545 | |
| miguelcordero191 | 1:7c424a3e12ea | 546 | case 0x8010: |
| miguelcordero191 | 1:7c424a3e12ea | 547 | tx_msg = this->rdMultiplier(); |
| miguelcordero191 | 1:7c424a3e12ea | 548 | tx_msg_len = 3; |
| miguelcordero191 | 1:7c424a3e12ea | 549 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 550 | |
| miguelcordero191 | 1:7c424a3e12ea | 551 | case 0x8011: |
| miguelcordero191 | 1:7c424a3e12ea | 552 | tx_msg = this->rdMode(); |
| miguelcordero191 | 1:7c424a3e12ea | 553 | tx_msg_len = 1; |
| miguelcordero191 | 1:7c424a3e12ea | 554 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 555 | |
| miguelcordero191 | 1:7c424a3e12ea | 556 | case 0x8012: |
| miguelcordero191 | 1:7c424a3e12ea | 557 | tx_msg = this->rdFrequency1(); |
| miguelcordero191 | 1:7c424a3e12ea | 558 | tx_msg_len = 6; |
| miguelcordero191 | 1:7c424a3e12ea | 559 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 560 | |
| miguelcordero191 | 1:7c424a3e12ea | 561 | case 0x8013: |
| miguelcordero191 | 1:7c424a3e12ea | 562 | tx_msg = this->rdFrequency2(); |
| miguelcordero191 | 1:7c424a3e12ea | 563 | tx_msg_len = 6; |
| miguelcordero191 | 1:7c424a3e12ea | 564 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 565 | |
| miguelcordero191 | 1:7c424a3e12ea | 566 | case 0x8014: |
| miguelcordero191 | 1:7c424a3e12ea | 567 | tx_msg = this->rdPhase1(); |
| miguelcordero191 | 1:7c424a3e12ea | 568 | tx_msg_len = 2; |
| miguelcordero191 | 1:7c424a3e12ea | 569 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 570 | |
| miguelcordero191 | 1:7c424a3e12ea | 571 | case 0x8015: |
| miguelcordero191 | 1:7c424a3e12ea | 572 | tx_msg = this->rdPhase2(); |
| miguelcordero191 | 1:7c424a3e12ea | 573 | tx_msg_len = 2; |
| miguelcordero191 | 1:7c424a3e12ea | 574 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 575 | |
| miguelcordero191 | 1:7c424a3e12ea | 576 | case 0x8016: |
| miguelcordero191 | 1:7c424a3e12ea | 577 | tx_msg = this->rdAmplitudeI(); |
| miguelcordero191 | 1:7c424a3e12ea | 578 | tx_msg_len = 2; |
| miguelcordero191 | 1:7c424a3e12ea | 579 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 580 | |
| miguelcordero191 | 1:7c424a3e12ea | 581 | case 0x8017: |
| miguelcordero191 | 1:7c424a3e12ea | 582 | tx_msg = this->rdAmplitudeQ(); |
| miguelcordero191 | 1:7c424a3e12ea | 583 | tx_msg_len = 2; |
| miguelcordero191 | 1:7c424a3e12ea | 584 | break; |
| miguelcordero191 | 1:7c424a3e12ea | 585 | |
| miguelcordero191 | 1:7c424a3e12ea | 586 | default: |
| miguelcordero191 | 1:7c424a3e12ea | 587 | success = false; |
| miguelcordero191 | 1:7c424a3e12ea | 588 | |
| miguelcordero191 | 1:7c424a3e12ea | 589 | } |
| miguelcordero191 | 1:7c424a3e12ea | 590 | |
| miguelcordero191 | 1:7c424a3e12ea | 591 | if (success){ |
| miguelcordero191 | 1:7c424a3e12ea | 592 | tx_msg = ok_msg; |
| miguelcordero191 | 1:7c424a3e12ea | 593 | tx_msg_len = 2; |
| miguelcordero191 | 1:7c424a3e12ea | 594 | } |
| miguelcordero191 | 1:7c424a3e12ea | 595 | |
| miguelcordero191 | 1:7c424a3e12ea | 596 | this->cmd_answer = tx_msg; |
| miguelcordero191 | 1:7c424a3e12ea | 597 | this->cmd_answer_len = tx_msg_len; |
| miguelcordero191 | 1:7c424a3e12ea | 598 | |
| miguelcordero191 | 1:7c424a3e12ea | 599 | return tx_msg; |
| miguelcordero191 | 1:7c424a3e12ea | 600 | } |
| miguelcordero191 | 1:7c424a3e12ea | 601 | |
| miguelcordero191 | 1:7c424a3e12ea | 602 | char* DDS::getCmdAnswer(){ |
| miguelcordero191 | 1:7c424a3e12ea | 603 | |
| miguelcordero191 | 1:7c424a3e12ea | 604 | return this->cmd_answer; |
| miguelcordero191 | 1:7c424a3e12ea | 605 | |
| miguelcordero191 | 1:7c424a3e12ea | 606 | } |
| miguelcordero191 | 1:7c424a3e12ea | 607 | |
| miguelcordero191 | 1:7c424a3e12ea | 608 | unsigned long DDS::getCmdAnswerLen(){ |
| miguelcordero191 | 1:7c424a3e12ea | 609 | |
| miguelcordero191 | 1:7c424a3e12ea | 610 | return this->cmd_answer_len; |
| miguelcordero191 | 1:7c424a3e12ea | 611 | |
| miguelcordero191 | 0:b444ea725ba7 | 612 | } |
