source: PlatformSupport/CustomPeripherals/pcores/radio_controller_v1_30_a/src/radio_controller_basic.c

Last change on this file was 891, checked in by murphpo, 16 years ago

updated radio controller 1.20 for better compatibility with faster PLB46

File size: 19.4 KB
Line 
1// Copyright (c) 2006 Rice University
2// All Rights Reserved
3// This code is covered by the Rice-WARP license
4// See http://warp.rice.edu/license/ for details
5
6/**
7 * \file radio_controller_basic.c
8 * \brief Code file for the most basic functions that are needed for communication with the radio boards.
9 *
10 * @version 1.09
11 * @author Siddharth Gupta
12 *
13 * Basic drivers for radio controller. Has all the basic functions related to sending
14 * and receiving bits over the air and changing the center frequency of transmission.
15 */
16
17/***************************** Include Files *******************************/
18
19#include "radio_controller_basic.h"
20
21/****************************** Functions **********************************/
22
23/**
24 * @brief Start of time reset function.
25 *
26 * Reset all the radio boards including the radio and DAC chips along with their associated registers.
27 * Goes through a set of instructions to achieve a reset of the radios. This must be called at the start of time
28 * and affects all connected radio boards.
29 *
30 * @param baseaddress Base address of the radio_controller core; usually defined as XPAR_RADIO_CONTROLLER_0_BASEADDR by XPS
31 * @param clkRatio Ratio of bus clock to SPI clock; use 1 for 40MHz bus, 2 for 80MHz bus
32 */
33void WarpRadio_v1_Reset(unsigned int* baseaddress, unsigned int clkRatio) {
34
35    radio_controller_baseaddr = baseaddress;
36
37    RADIO_CONTROLLER_mWriteSlaveReg5((volatile)radio_controller_baseaddr, 0x3410);          // Set the value of the Control Register to 0x00003410 for DACs
38    RADIO_CONTROLLER_mWriteSlaveReg6((volatile)radio_controller_baseaddr, clkRatio);        // Set the value for the Divider Register to 0x00000001
39
40    RADIO_CONTROLLER_mWriteSlaveReg7((volatile)radio_controller_baseaddr, (SLAVEMASKDAC & (RADIO1_ADDR | RADIO2_ADDR | RADIO3_ADDR | RADIO4_ADDR)));        // Select all DACs
41
42    RADIO_CONTROLLER_mWriteSlaveReg1((volatile)radio_controller_baseaddr, RAD_TX_DAC_RESET_MASK); // Turn on DacReset
43    RADIO_CONTROLLER_mWriteSlaveReg1((volatile)radio_controller_baseaddr, (RADIO_CONTROLLER_mReadSlaveReg1((volatile)radio_controller_baseaddr) & ~(RAD_TX_DAC_RESET_MASK))); // Turn off DacReset
44
45    transmitdac(0x0004);                    // Transmit a value of 0x04 for Register 0 for DAC to use only 1 refernce register
46
47
48    RADIO_CONTROLLER_mWriteSlaveReg5((volatile)radio_controller_baseaddr, 0x3412);          // Set the value of the Control Register to 0x00003412 for Radio
49    RADIO_CONTROLLER_mWriteSlaveReg6((volatile)radio_controller_baseaddr, clkRatio-1);      // Set the value for the Divider Register to 0x00000000
50
51    RADIO_CONTROLLER_mWriteSlaveReg7((volatile)radio_controller_baseaddr, (SLAVEMASK & (RADIO1_ADDR | RADIO2_ADDR | RADIO3_ADDR | RADIO4_ADDR)));       // Select the radios that will be affected by this function call in store in Slave Select
52
53    // Go through reset procedure
54    RADIO_CONTROLLER_mWriteSlaveReg0((volatile)radio_controller_baseaddr, ~(RAD_SHDN_MASK | RAD_SHDN_CON_MASK | RAD_TXEN_MASK | RAD_TXEN_CON_MASK | RAD_RXEN_MASK | RAD_RXEN_CON_MASK | RAD_RXHP_MASK | RAD_RXHP_CON_MASK));
55    RADIO_CONTROLLER_mWriteSlaveReg0((volatile)radio_controller_baseaddr, (RADIO_CONTROLLER_mReadSlaveReg0((volatile)radio_controller_baseaddr) | RAD_SHDN_MASK)); // Asset Shutdown
56    RADIO_CONTROLLER_mWriteSlaveReg0((volatile)radio_controller_baseaddr, (RADIO_CONTROLLER_mReadSlaveReg0((volatile)radio_controller_baseaddr) | (RAD_TXEN_MASK | RAD_RXEN_MASK))); // Enable Rx and Tx
57    RADIO_CONTROLLER_mWriteSlaveReg0((volatile)radio_controller_baseaddr, (RADIO_CONTROLLER_mReadSlaveReg0((volatile)radio_controller_baseaddr) & ~(RAD_TXEN_MASK | RAD_RXEN_MASK))); // Disable Rx and Tx
58    RADIO_CONTROLLER_mWriteSlaveReg0((volatile)radio_controller_baseaddr, (RADIO_CONTROLLER_mReadSlaveReg0((volatile)radio_controller_baseaddr) & ~RAD_SHDN_MASK)); // De-asset Shutdown
59
60    // Start initialization
61    RADIO_CONTROLLER_mWriteSlaveReg0((volatile)radio_controller_baseaddr, (RADIO_CONTROLLER_mReadSlaveReg0((volatile)radio_controller_baseaddr) | RAD_RXHP_CON_MASK)); // Set RxHP control to HW
62    RADIO_CONTROLLER_mWriteSlaveReg1((volatile)radio_controller_baseaddr, (RADIO_CONTROLLER_mReadSlaveReg1((volatile)radio_controller_baseaddr) | RAD_24PA_MASK)); // Antsw[1] to 1 and enable 2.4GHz amplifier
63    RADIO_CONTROLLER_mWriteSlaveReg1((volatile)radio_controller_baseaddr, (RADIO_CONTROLLER_mReadSlaveReg1((volatile)radio_controller_baseaddr) & ~RAD_ADC_RX_DCS_MASK)); // DCS to 0
64    RADIO_CONTROLLER_mWriteSlaveReg2((volatile)radio_controller_baseaddr, 0x00000000 & ~(RAD_ADC_RX_PWDNA_MASK | RAD_ADC_RX_PWDNB_MASK | RAD_RSSI_ADC_SLEEP_MASK)); // Enable all ADCs
65
66    transmit(0x0C218);          // Set value of 0x0C21 to register 8 in the radio
67    REG_RAD1_RX_CONTROL = (short)0x0C21;            // Update local copies of the registers in the radio
68    REG_RAD2_RX_CONTROL = (short)0x0C21;
69    REG_RAD3_RX_CONTROL = (short)0x0C21;
70    REG_RAD4_RX_CONTROL = (short)0x0C21;
71
72    // Setup for 20MHz radio reference clock
73    transmit(0x18225);
74    REG_RAD1_BAND_SELECT = (short)0x1822;
75    REG_RAD2_BAND_SELECT = (short)0x1822;
76    REG_RAD3_BAND_SELECT = (short)0x1822;
77    REG_RAD4_BAND_SELECT = (short)0x1822;
78
79    // Setup for 40MHz radio reference clock
80    //transmit(0x18245);
81    //REG_RAD1_BAND_SELECT = (short)0x1824;
82    //REG_RAD2_BAND_SELECT = (short)0x1824;
83    //REG_RAD3_BAND_SELECT = (short)0x1824;
84    //REG_RAD4_BAND_SELECT = (short)0x1824;
85
86    unsigned int reg2 = REG_RAD1_STANDBY | 0x2000;
87    transmit(((reg2<<4)+0x0002));
88    REG_RAD1_STANDBY = (short)reg2;
89    REG_RAD2_STANDBY = (short)reg2;
90    REG_RAD3_STANDBY = (short)reg2;
91    REG_RAD4_STANDBY = (short)reg2;
92
93    unsigned int reg5 = REG_RAD1_BAND_SELECT | 0x2000;
94    transmit(((reg5<<4)+0x0005));
95    REG_RAD1_BAND_SELECT = (short)reg5;
96    REG_RAD2_BAND_SELECT = (short)reg5;
97    REG_RAD3_BAND_SELECT = (short)reg5;
98    REG_RAD4_BAND_SELECT = (short)reg5;
99
100    unsigned int reg9 = REG_RAD1_TX_LINEARITY | 0x0003;
101    transmit(((reg9<<4)+0x0009));
102    REG_RAD1_TX_LINEARITY = (short)reg9;
103    REG_RAD2_TX_LINEARITY = (short)reg9;
104    REG_RAD3_TX_LINEARITY = (short)reg9;
105    REG_RAD4_TX_LINEARITY = (short)reg9;
106
107    //Setup the deault TxTiming values for all four radios
108    //Field assignments in these four registers (everything endian-swapped):
109    // bits[0:7]: delay for gain ramp start (default = 100 cycles)
110    // bits[8:15] delay for power amp start (default = 0 cycles)
111    // bits[16:23] delay for radio TxEn start (default = 0 cycles)
112    RADIO_CONTROLLER_mWriteSlaveReg13((volatile)radio_controller_baseaddr,(unsigned int)( (100 << 24) + (0 << 16) + (0 << 8) ) );
113    RADIO_CONTROLLER_mWriteSlaveReg14((volatile)radio_controller_baseaddr,(unsigned int)( (100 << 24) + (0 << 16) + (0 << 8) ) );
114    RADIO_CONTROLLER_mWriteSlaveReg15((volatile)radio_controller_baseaddr,(unsigned int)( (100 << 24) + (0 << 16) + (0 << 8) ) );
115    RADIO_CONTROLLER_mWriteSlaveReg16((volatile)radio_controller_baseaddr,(unsigned int)( (100 << 24) + (0 << 16) + (0 << 8) ) );
116
117    //Setup the deault TxGainTiming values for all four radios
118    // bits[0:5]: target gain (default = 0x3f = max Tx gain)
119    // bits[6:9]: gain step (default = 0xF = max gain step)
120    // bits[10:13]: gain time step (default = 2 = min gain time step)
121    // bits[16:27]: delay for TxStart (default = 200 cycles)
122    RADIO_CONTROLLER_mWriteSlaveReg9((volatile)radio_controller_baseaddr,(unsigned int)((0x3F << 26) | (0xF << 22) | ((2) << 18) | (200 << 4)));
123    RADIO_CONTROLLER_mWriteSlaveReg10((volatile)radio_controller_baseaddr,(unsigned int)((0x3F << 26) | (0xF << 22) | ((2) << 18) | (200 << 4)));
124    RADIO_CONTROLLER_mWriteSlaveReg11((volatile)radio_controller_baseaddr,(unsigned int)((0x3F << 26) | (0xF << 22) | ((2) << 18) | (200 << 4)));
125    RADIO_CONTROLLER_mWriteSlaveReg12((volatile)radio_controller_baseaddr,(unsigned int)((0x3F << 26) | (0xF << 22) | ((2) << 18) | (200 << 4)));
126
127    return;
128}
129
130/**
131 * @brief Enable transmit mode on radios.
132 *
133 * Enables the transmit enable mode on the radios specified. Before transmit is turned on the recieve
134 * mode is turned off. Enables the TxEnable state machine that also controls turning on of the amplifiers.
135 *
136 * @param radios Refers to the radios in the slots whose transmit mode is turned on.
137 */
138void WarpRadio_v1_TxEnable(unsigned int radios) {
139
140    unsigned int tmpReg = 0;
141   
142    //Swap the antenna switch to map the Tx port to antenna port 1
143    RADIO_CONTROLLER_mWriteSlaveReg1((volatile)radio_controller_baseaddr, (RADIO_CONTROLLER_mReadSlaveReg1((volatile)radio_controller_baseaddr) | (radios & RAD_ANTSW_MASK)));
144
145    //Read the current radio controller Tx/Rx mode register into a temporary variable
146    tmpReg = RADIO_CONTROLLER_mReadSlaveReg0((volatile)radio_controller_baseaddr);
147
148    //De-assert the RxEnable bits for the selected radios (no harm if they're already disabled)
149    tmpReg = tmpReg & ~(radios & RAD_RXEN_MASK);
150
151    //Assert the TxEnable bits for the selected radios (no harm if they're already enabled)
152    tmpReg = tmpReg | (radios & RAD_TXEN_MASK);
153
154    //Write the update register contents back to the radio controller
155    RADIO_CONTROLLER_mWriteSlaveReg0((volatile)radio_controller_baseaddr, tmpReg);
156
157    return;
158}
159
160
161/**
162 * @brief Enable recieve mode on radios.
163 *
164 * Enables the recieve mode in the radio board. On calling this function the transmit mode is forcibly turned off.
165 *
166 * @param radios Refers to the radios in the slots that will have their recieve mode turned on.
167 */
168void WarpRadio_v1_RxEnable(unsigned int radios) {
169
170    unsigned int tmpReg = 0;
171   
172    //Swap the antenna switch to map the Rx port to antenna port 1
173    RADIO_CONTROLLER_mWriteSlaveReg1((volatile)radio_controller_baseaddr, (RADIO_CONTROLLER_mReadSlaveReg1((volatile)radio_controller_baseaddr) & ~(radios & RAD_ANTSW_MASK)));
174
175    //Read the current radio controller Tx/Rx mode register into a temporary variable
176    tmpReg = RADIO_CONTROLLER_mReadSlaveReg0((volatile)radio_controller_baseaddr);
177
178    //De-assert the TxEnable bits for the selected radios (no harm if they're already disabled)
179    tmpReg = tmpReg & ~(radios & RAD_TXEN_MASK);
180
181    //Assert the RxEnable bits for the selected radios (no harm if they're already enabled)
182    tmpReg = tmpReg | (radios & RAD_RXEN_MASK);
183
184    //Write the update register contents back to the radio controller
185    RADIO_CONTROLLER_mWriteSlaveReg0((volatile)radio_controller_baseaddr, tmpReg);
186
187    return;
188}
189
190/**
191 * @brief Disable transmit or receive mode.
192 *
193 * Disables the receive and/or transmit modes in the radios specified.
194 *
195 * @param radios Refers to the radios in the slots that are affected.
196 */
197void WarpRadio_v1_TxRxDisable(unsigned int radios) {
198
199    RADIO_CONTROLLER_mWriteSlaveReg0((volatile)radio_controller_baseaddr, (RADIO_CONTROLLER_mReadSlaveReg0((volatile)radio_controller_baseaddr) & ~(radios & (RAD_TXEN_MASK | RAD_RXEN_MASK)))); // Disable Tx and Rx
200}
201
202/**
203 * @brief Tune the radio to a frequency in the 2.4GHz band.
204 *
205 * Function used to shift the center frequency on the radio within the 2.4GHz band. Also enables the
206 * 2.4GHz amplifier for the transmit state machine.
207 *      -# 2412MHz
208 *      -# 2417MHz
209 *      -# 2422MHz
210 *      -# 2427MHz
211 *      -# 2432MHz
212 *      -# 2437MHz
213 *      -# 2442MHz
214 *      -# 2447MHz
215 *      -# 2452MHz
216 *      -# 2457MHz
217 *      -# 2462MHz
218 *      -# 2467MHz
219 *      -# 2472MHz
220 *      -# 2484MHz
221 *
222 * @param freqset The frequency channel to use, selected from above list
223 * @param radios Defines which radios are affected by this function call.
224 * @return Returns INVALID_FREQ if given frequency set is not valid.
225 */
226int WarpRadio_v1_SetCenterFreq2GHz(char freqset, unsigned int radios) {
227
228    RADIO_CONTROLLER_mWriteSlaveReg7((volatile)radio_controller_baseaddr, (SLAVEMASK & radios));            // Select Radios affected by this function
229
230    unsigned int reg3;
231    unsigned int reg4;
232    unsigned int reg5;
233    int retval;                         // Return value from the function
234    unsigned int mask2g = 0xFF3E;       // Mask to set frequency band to 2.4Ghz
235
236    switch(freqset) {                   // Switch on the frequency set given as input.
237        case(1) : {
238            reg3 = 0x00A03;             // Set a value of 0x00A0 for Register 3
239            reg4 = 0x33334;             // Set a value of 0x3333 for Register 4
240            retval = 2412;              // Set the return value to the frequency that has been set.
241            break;
242        }
243        case(2) : {
244            reg3 = 0x20A13;
245            reg4 = 0x08884;
246            retval = 2417;
247            break;
248        }
249        case(3) : {
250            reg3 = 0x30A13;
251            reg4 = 0x1DDD4;
252            retval = 2422;
253            break;
254        }
255        case(4) : {
256            reg3 = 0x00A13;
257            reg4 = 0x33334;
258            retval = 2427;
259            break;
260        }
261        case(5) : {
262            reg3 = 0x20A23;
263            reg4 = 0x08884;
264            retval = 2432;
265            break;
266        }
267        case(6) : {
268            reg3 = 0x30A23;
269            reg4 = 0x1DDD4;
270            retval = 2437;
271            break;
272        }
273        case(7) : {
274            reg3 = 0x00A23;
275            reg4 = 0x33334;
276            retval = 2442;
277            break;
278        }
279        case(8) : {
280            reg3 = 0x20A33;
281            reg4 = 0x08884;
282            retval = 2447;
283            break;
284        }
285        case(9) : {
286            reg3 = 0x30A33;
287            reg4 = 0x1DDD4;
288            retval = 2452;
289            break;
290        }
291        case(10) : {
292            reg3 = 0x00A33;
293            reg4 = 0x33334;
294            retval = 2457;
295            break;
296        }
297        case(11) : {
298            reg3 = 0x20A43;
299            reg4 = 0x08884;
300            retval = 2462;
301            break;
302        }
303        case(12) : {
304            reg3 = 0x30A43;
305            reg4 = 0x1DDD4;
306            retval = 2467;
307            break;
308        }
309        case(13) : {
310            reg3 = 0x00A43;
311            reg4 = 0x33334;
312            retval = 2472;
313            break;
314        }
315        case(14) : {
316            reg3 = 0x10A53;
317            reg4 = 0x26664;
318            retval = 2484;
319            break;
320        }
321        default : {
322            retval = INVALID_FREQ;
323        }
324    }
325
326    if(retval != -1) {                      // Check if an invalid freqency set has been provided and if so do not change freqency
327
328        transmit(reg3);         // Transmit the new register 3 value
329        transmit(reg4);         // Transmit the new register 4 value
330
331        reg3 = reg3>>4;                     // Bit shift the register values to the right and remove the register number from the
332        reg4 = reg4>>4;                     // value.
333
334        if((radios & RAD1MASK) > 0) {   // Check if the Slave is in use
335
336            reg5 = REG_RAD1_BAND_SELECT & mask2g;                   // Pick up local copy of the register and set the band to 2.4Ghz
337
338            transRadio(0x0001, ((reg5<<4)+0x0005));     // Transmit new register 5 value and add the register number as last 4 bits
339
340            REG_RAD1_BAND_SELECT = (short)reg5;                     // Set local copies of registers to new values.
341            REG_RAD1_INTEGER_DIVIDER_RATIO = (short)reg3;
342            REG_RAD1_FRACTIONAL_DIVIDER_RATIO = (short)reg4;
343        }
344        if((radios & RAD2MASK) > 0) {   // Check if the Slave is in use
345
346            reg5 = REG_RAD2_BAND_SELECT & mask2g;                   // Pick up local copy of the register and set the band to 2.4Ghz
347
348            transRadio(0x0002, ((reg5<<4)+0x0005));     // Transmit new register 5 value and add the register number as last 4 bits
349
350            REG_RAD2_BAND_SELECT = (short)reg5;                     // Set local copies of registers to new values.
351            REG_RAD2_INTEGER_DIVIDER_RATIO = (short)reg3;
352            REG_RAD2_FRACTIONAL_DIVIDER_RATIO = (short)reg4;
353        }
354        if((radios & RAD3MASK) > 0) {   // Check if the Slave is in use
355
356            reg5 = REG_RAD3_BAND_SELECT & mask2g;                   // Pick up local copy of the register and set the band to 2.4Ghz
357
358            transRadio(0x0004, ((reg5<<4)+0x0005));     // Transmit new register 5 value and add the register number as last 4 bits
359
360            REG_RAD3_BAND_SELECT = (short)reg5;                     // Set local copies of registers to new values.
361            REG_RAD3_INTEGER_DIVIDER_RATIO = (short)reg3;
362            REG_RAD3_FRACTIONAL_DIVIDER_RATIO = (short)reg4;
363        }
364        if((radios & RAD4MASK) > 0) {   // Check if the Slave is in use
365
366            reg5 = REG_RAD4_BAND_SELECT & mask2g;                   // Pick up local copy of the register and set the band to 2.4Ghz
367
368            transRadio(0x0008, ((reg5<<4)+0x0005));     // Transmit new register 5 value and add the register number as last 4 bits
369
370            REG_RAD4_BAND_SELECT = (short)reg5;                     // Set local copies of registers to new values.
371            REG_RAD4_INTEGER_DIVIDER_RATIO = (short)reg3;
372            REG_RAD4_FRACTIONAL_DIVIDER_RATIO = (short)reg4;
373        }
374    }
375
376
377    RADIO_CONTROLLER_mWriteSlaveReg1((volatile)radio_controller_baseaddr, (RADIO_CONTROLLER_mReadSlaveReg1((volatile)radio_controller_baseaddr) & ~(radios & RAD_5PA_MASK))); // Disable 5GHz amp
378    RADIO_CONTROLLER_mWriteSlaveReg1((volatile)radio_controller_baseaddr, (RADIO_CONTROLLER_mReadSlaveReg1((volatile)radio_controller_baseaddr) | (radios & RAD_24PA_MASK))); // Enable 2.4GHz amp
379
380    return retval;      // Return either the new freqency that has been set or return -1 to indicate that the frequency set given was invalid
381}
382
383
384/**
385 * @brief Read DIPSW of a radio.
386 *
387 * Returns the DIPSW values of the radio specified. Can return value for only one of the radios at one time.
388 *
389 * @param radio Radio from which to read the value.
390 */
391char WarpRadio_v1_DIPSW(unsigned int radio) {
392
393    if((radio & RAD1MASK) > 0) {        // Check to make sure if Radio 1 is being used
394        return ((RADIO_CONTROLLER_mReadSlaveReg3((volatile)radio_controller_baseaddr) & RAD_DIPSW_L_MASK) >> 10);
395    }
396    else if((radio & RAD2MASK) > 0) {       // Check to make sure if Radio 2 is being used
397        return ((RADIO_CONTROLLER_mReadSlaveReg3((volatile)radio_controller_baseaddr) & RAD_DIPSW_H_MASK) >> 26);
398    }
399    else if((radio & RAD3MASK) > 0) {       // Check to make sure if Radio 3 is being used
400        return ((RADIO_CONTROLLER_mReadSlaveReg4((volatile)radio_controller_baseaddr) & RAD_DIPSW_L_MASK) >> 10);
401    }
402    else if((radio & RAD4MASK) > 0) {       // Check to make sure if Radio 4 is being used
403        return ((RADIO_CONTROLLER_mReadSlaveReg4((volatile)radio_controller_baseaddr) & RAD_DIPSW_H_MASK) >> 26);
404    }
405    else {
406        return 0;
407    }
408}
409
410/**
411 * @brief Adjust DC offset for DAC.
412 *
413 * Adjust the DC Offset on the I and Q channels of the DAC. Only the I or Q can be adjusted at one time.
414 * Value must be within the defined range to be correctly written to the DAC registers.
415 *
416 * @param chan ICHAN or QCHAN, referring to the I channel or the Q channel.
417 * @param value DC offset value to be written. Ranges from -1023 to 1024.
418 * @param radios Radios that have their offset value set.
419 * @return INVALID_MODE if the mode is incorrect, OUT_OF_RANGE is the value given
420 * is out of the range that can be supported, WARP_SUCCESS if successful change.
421 */
422int WarpRadio_v1_DACOffsetAdj(char chan, short value, unsigned int radios) {
423
424    RADIO_CONTROLLER_mWriteSlaveReg5((volatile)radio_controller_baseaddr, 0x3410);          // Set the value of the Control Register to 0x00003410 for DACs
425    RADIO_CONTROLLER_mWriteSlaveReg6((volatile)radio_controller_baseaddr, 0x00000001);      // Set the value for the Divider Register to 0x00000001
426
427    RADIO_CONTROLLER_mWriteSlaveReg7((volatile)radio_controller_baseaddr, (SLAVEMASKDAC & radios));     // Select the dacs that need to be affected
428
429    if (value > 1023 || value < -1024) {            // Make sure the value is in range.
430        return OUT_OF_RANGE;
431    }
432
433    short reg8;
434    if (value < 0) {                                // If the value is negative then store set the first bit of second register
435        reg8 = 0x0080;                              // to 1
436    }
437    else {
438        reg8 = 0x0000;                              // Or if positive set it to 0.
439    }
440
441    value = abs(value);
442
443    short reg7 = ((value & 0x03FC) >> 2);           // b9:b2 of the value are the 8 bits in the first register
444    reg8 = reg8 + (value & 0x0003);                 // b1:b0 of the value are the last 2 bits in the second register
445
446    if (chan == ICHAN) {
447        transmitdac((0x0700 + reg7));       // if I channel then store the first register to Register 7
448        transmitdac((0x0800 + reg8));       // and the second register to Register 8
449    }
450    else if (chan == QCHAN) {
451        transmitdac((0x0B00 + reg7));       // if I channel then store the first register to Register B
452        transmitdac((0x0C00 + reg8));       // and the second register to Register C
453    }
454    else {
455        return INVALID_MODE;
456    }
457
458    RADIO_CONTROLLER_mWriteSlaveReg5((volatile)radio_controller_baseaddr, 0x3412);          // Set the value of the Control Register to 0x00003412 for Radio
459    RADIO_CONTROLLER_mWriteSlaveReg6((volatile)radio_controller_baseaddr, 0x00000000);      // Set the value for the Divider Register to 0x00000000
460
461    return WARP_SUCCESS;
462}
463
Note: See TracBrowser for help on using the repository browser.