Joaquin Verastegui / jro

Dependents:   JRO_CR2 frdm_test

Fork of jro by Miguel Urco

Committer:
miguelcordero191
Date:
Tue Feb 10 14:28:42 2015 +0000
Revision:
4:de495ce256b8
Parent:
3:f0e6c145b075
Some features were added to library

Who changed what in which revision?

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