summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usrp2/firmware/lib/db_xcvr2450.c92
1 files changed, 48 insertions, 44 deletions
diff --git a/usrp2/firmware/lib/db_xcvr2450.c b/usrp2/firmware/lib/db_xcvr2450.c
index 7b5b6e228..fdfeb4519 100644
--- a/usrp2/firmware/lib/db_xcvr2450.c
+++ b/usrp2/firmware/lib/db_xcvr2450.c
@@ -131,7 +131,7 @@ struct db_xcvr2450_tx db_xcvr2450_tx = {
.base.set_gain = xcvr2450_set_gain_tx,
.base.set_tx_enable = xcvr2450_set_tx_enable,
.base.atr_mask = 0x00E0, //CHECK this
- //.base.atr_txval = POWER_UP|MIX_EN,
+ //.base.atr_txval = POWER_UP|MIX_EN,
//.base.atr_rxval = POWER_UP|ANT_SW,
// .base.atr_tx_delay =
// .base.atr_rx_delay =
@@ -149,20 +149,19 @@ send_reg(struct db_xcvr2450_dummy *db, int v){
}
void
-set_reg_txgain(struct db_xcvr2450_dummy *db){
- int reg_txgain = (db->common.d_txgain<<4) | 12;
- send_reg(db, reg_txgain);
-}
-
-void
-set_reg_rxgain(struct db_xcvr2450_dummy *db){
- int reg_rxgain = ( (db->common.d_rx_rf_gain<<9) | (db->common.d_rx_bb_gain<<4) | 11);
- send_reg(db, reg_rxgain);
+set_reg_standby(struct db_xcvr2450_dummy *db){
+ int reg_standby = (
+ (db->common.d_mimo<<17) |
+ (1<<16) |
+ (1<<6) |
+ (1<<5) |
+ (1<<4) | 2);
+ send_reg(db, reg_standby);
}
void
set_reg_int_divider(struct db_xcvr2450_dummy *db){
- int reg_int_divider = (((db->common.d_frac_div & 0x03)<<16) |
+ int reg_int_divider = (((db->common.d_frac_div & 0x03)<<16) |
(db->common.d_int_div<<4) | 3);
send_reg(db, reg_int_divider);
}
@@ -179,37 +178,28 @@ set_reg_bandselpll(struct db_xcvr2450_dummy *db){
(1<<16) |
(1<<15) |
(1<<11) |
- (db->common.d_highband<<10) |
+ (db->common.d_highband<<10) |
(db->common.d_cp_current<<9) |
- (db->common.d_ref_div<<5) |
- (db->common.d_five_gig<<4) | 5);
+ (db->common.d_ref_div<<5) |
+ (db->common.d_five_gig<<4) | 5);
send_reg(db, reg_bandselpll);
}
void
-set_reg_standby(struct db_xcvr2450_dummy *db){
- int reg_standby = ((db->common.d_mimo<<17) |
- (1<<16) |
- (1<<6) |
- (1<<5) |
- (1<<4) | 2);
- send_reg(db, reg_standby);
-}
-
-void
set_reg_cal(struct db_xcvr2450_dummy *db){
// FIXME do calibration
- int reg_cal = (1<<14)|6;
+ int reg_cal = (
+ (1<<14) | 6);
send_reg(db, reg_cal);
}
void
set_reg_lpf(struct db_xcvr2450_dummy *db){
int reg_lpf = (
- (db->common.d_rssi_hbw<<15) |
- (db->common.d_txlpf_bw<<10) |
- (db->common.d_rxlpf_bw<<9) |
- (db->common.d_rxlpf_fine<<4) | 7);
+ (db->common.d_rssi_hbw<<15) |
+ (db->common.d_txlpf_bw<<10) |
+ (db->common.d_rxlpf_bw<<9) |
+ (db->common.d_rxlpf_fine<<4) | 7);
send_reg(db, reg_lpf);
}
@@ -220,9 +210,9 @@ set_reg_rxrssi_ctrl(struct db_xcvr2450_dummy *db){
(db->common.d_rssi_range<<15) |
(db->common.d_rssi_mode<<14) |
(db->common.d_rssi_mux<<12) |
- (1<<9) |
+ (1<<9) |
(db->common.d_rx_hpf<<6) |
- (1<<4) | 8);
+ (1<<4) | 8);
send_reg(db, reg_rxrssi_ctrl);
}
@@ -245,6 +235,21 @@ set_reg_pabias(struct db_xcvr2450_dummy *db){
send_reg(db, reg_pabias);
}
+void
+set_reg_rxgain(struct db_xcvr2450_dummy *db){
+ int reg_rxgain = (
+ (db->common.d_rx_rf_gain<<9) |
+ (db->common.d_rx_bb_gain<<4) | 11);
+ send_reg(db, reg_rxgain);
+}
+
+void
+set_reg_txgain(struct db_xcvr2450_dummy *db){
+ int reg_txgain = (
+ (db->common.d_txgain<<4) | 12);
+ send_reg(db, reg_txgain);
+}
+
/**************************************************
* GPIO
**************************************************/
@@ -258,13 +263,13 @@ set_gpio(struct db_xcvr2450_dummy *db){
// io_tx_while_tx: what to drive onto io_tx_* when transmitting
//
// B1-B7 is ignored as gain is set serially for now.
-
+
int rx_hp, tx_antsel, rx_antsel, tx_pa_sel;
if(db->common.d_rx_hp_pin)
rx_hp = RX_HP;
else
rx_hp = 0;
-
+
if(db->common.d_tx_ant)
tx_antsel = ANTSEL_TX2_RX1;
else
@@ -288,7 +293,7 @@ set_gpio(struct db_xcvr2450_dummy *db){
//rx_set_atr_txval(io_rx_while_tx);
//tx_set_atr_rxval(io_tx_while_rx);
//tx_set_atr_txval(io_tx_while_tx);
-
+
printf("GPIO: RXRX=%04X RXTX=%04X TXRX=%04X TXTX=%04X\n",
io_rx_while_rx, io_rx_while_tx, io_tx_while_rx, io_tx_while_tx);
}
@@ -326,7 +331,7 @@ xcvr2450_init(struct db_base *dbb){
db->common.d_rxlpf_bw = 1; // 0 = 7.5 MHz, 1 = 9.5 MHz, 2 = 14 MHz, 3 = 18 MHz
db->common.d_rxlpf_fine = 2; // 0 = 90%, 1 = 95%, 2 = 100%, 3 = 105%, 4 = 110%
db->common.d_rxvga_ser = 1; // 0 = RXVGA controlled by B7:1, 1=controlled serially
- db->common.d_rssi_range = 1; // 0 = low range (datasheet typo), 1=high range (0.5V - 2.0V)
+ db->common.d_rssi_range = 1; // 0 = low range (datasheet typo), 1=high range (0.5V - 2.0V)
db->common.d_rssi_mode = 1; // 0 = enable follows RXHP, 1 = enabled
db->common.d_rssi_mux = 0; // 0 = RSSI, 1 = TEMP
db->common.d_rx_hp_pin = 0; // 0 = Fc set by rx_hpf, 1 = 600 KHz
@@ -342,9 +347,8 @@ xcvr2450_init(struct db_base *dbb){
db->common.d_pabias = 0; // 0 = 0 uA, 63 = 315uA
db->common.d_rx_rf_gain = 0; // 0 = 0dB, 1 = 0dB, 2 = 15dB, 3 = 30dB
db->common.d_rx_bb_gain = 16; // 0 = min, 31 = max (0 - 62 dB)
-
db->common.d_txgain = 63; // 0 = min, 63 = max
-
+
/*
// Initialize GPIO and ATR
tx_write_io(TX_SAFE_IO, TX_OE_MASK);
@@ -358,7 +362,7 @@ xcvr2450_init(struct db_base *dbb){
rx_set_atr_rxval(RX_SAFE_IO);
rx_set_atr_txval(RX_SAFE_IO);
rx_set_atr_mask(RX_OE_MASK);
- */
+ */
// Initialize chipset
// TODO: perform reset sequence to ensure power up defaults
set_reg_standby(db);
@@ -406,8 +410,8 @@ xcvr2450_set_freq(struct db_base *dbb, u2_fxpt_freq_t freq, u2_fxpt_freq_t *dc){
if(!(freq >= db->base.freq_min && freq <= db->base.freq_max)) {
return false;
}
-
-
+
+
u2_fxpt_freq_t vco_freq;
if(freq > U2_DOUBLE_TO_FXPT_FREQ(3e9)) {
@@ -433,18 +437,18 @@ xcvr2450_set_freq(struct db_base *dbb, u2_fxpt_freq_t freq, u2_fxpt_freq_t *dc){
}
//double vco_freq = target_freq*scaler;
- //double sys_clk = usrp()->fpga_master_clock_freq(); // Usually 64e6
+ //double sys_clk = usrp()->fpga_master_clock_freq(); // Usually 64e6
u2_fxpt_freq_t ref_clk = U2_DOUBLE_TO_FXPT_FREQ(MASTER_CLK_RATE)/db->common.d_ad9515_div;
u2_fxpt_freq_t phdet_freq = ref_clk/db->common.d_ref_div;
-
+
//double div = vco_freq/phdet_freq;
// d_int_div = int(floor(div));
// d_frac_div = int((div-d_int_div)*65536.0);
// double actual_freq = phdet_freq*(d_int_div+(d_frac_div/65536.0))/scaler;
db->common.d_int_div = vco_freq/phdet_freq;
*dc = db->common.d_int_div*phdet_freq*freq/vco_freq;
-
-
+
+
printf("RF=%d VCO=%d RefDiv=%d Phdet=%d Div=%d ActualRF=%d\n",
u2_fxpt_freq_round_to_int(freq), u2_fxpt_freq_round_to_int(vco_freq),
db->common.d_ref_div, u2_fxpt_freq_round_to_int(phdet_freq),