From b369d0f020f324b872099fcdbe321f5eac2f98bb Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Fri, 4 Jun 2010 17:35:48 -0700 Subject: usrp2 regs naming convention --- host/lib/usrp/usrp2/dsp_impl.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'host/lib/usrp/usrp2/dsp_impl.cpp') diff --git a/host/lib/usrp/usrp2/dsp_impl.cpp b/host/lib/usrp/usrp2/dsp_impl.cpp index 195a9bc53..0d70811dd 100644 --- a/host/lib/usrp/usrp2/dsp_impl.cpp +++ b/host/lib/usrp/usrp2/dsp_impl.cpp @@ -98,11 +98,11 @@ void usrp2_impl::init_ddc_config(void){ void usrp2_impl::update_ddc_config(void){ //set the decimation - _iface->poke32(FR_DSP_RX_DECIM_RATE, calculate_cic_word(_ddc_decim)); + _iface->poke32(U2_REG_DSP_RX_DECIM_RATE, calculate_cic_word(_ddc_decim)); //set the scaling static const boost::int16_t default_rx_scale_iq = 1024; - _iface->poke32(FR_DSP_RX_SCALE_IQ, + _iface->poke32(U2_REG_DSP_RX_SCALE_IQ, calculate_iq_scale_word(default_rx_scale_iq, default_rx_scale_iq) ); } @@ -141,7 +141,7 @@ void usrp2_impl::ddc_set(const wax::obj &key, const wax::obj &val){ case DSP_PROP_FREQ_SHIFT:{ double new_freq = val.as(); - _iface->poke32(FR_DSP_RX_FREQ, + _iface->poke32(U2_REG_DSP_RX_FREQ, calculate_freq_word_and_update_actual_freq(new_freq, get_master_clock_freq()) ); _ddc_freq = new_freq; //shadow @@ -184,10 +184,10 @@ void usrp2_impl::update_duc_config(void){ boost::int16_t scale = rint((4096*std::pow(2, ceil(log2(interp_cubed))))/(1.65*interp_cubed)); //set the interpolation - _iface->poke32(FR_DSP_TX_INTERP_RATE, calculate_cic_word(_duc_interp)); + _iface->poke32(U2_REG_DSP_TX_INTERP_RATE, calculate_cic_word(_duc_interp)); //set the scaling - _iface->poke32(FR_DSP_TX_SCALE_IQ, calculate_iq_scale_word(scale, scale)); + _iface->poke32(U2_REG_DSP_TX_SCALE_IQ, calculate_iq_scale_word(scale, scale)); } /*********************************************************************** @@ -224,7 +224,7 @@ void usrp2_impl::duc_set(const wax::obj &key, const wax::obj &val){ case DSP_PROP_FREQ_SHIFT:{ double new_freq = val.as(); - _iface->poke32(FR_DSP_TX_FREQ, + _iface->poke32(U2_REG_DSP_TX_FREQ, calculate_freq_word_and_update_actual_freq(new_freq, get_master_clock_freq()) ); _duc_freq = new_freq; //shadow -- cgit v1.2.3 From 038d6eac61ea28aea85b0ee525e683d9dadbce08 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Fri, 4 Jun 2010 18:25:53 -0700 Subject: moved dsp update logic into prop setter, added code to init dsp rates and freqs --- host/lib/usrp/usrp2/dsp_impl.cpp | 60 +++++++++++++++++--------------------- host/lib/usrp/usrp2/usrp2_impl.hpp | 2 -- 2 files changed, 26 insertions(+), 36 deletions(-) (limited to 'host/lib/usrp/usrp2/dsp_impl.cpp') diff --git a/host/lib/usrp/usrp2/dsp_impl.cpp b/host/lib/usrp/usrp2/dsp_impl.cpp index 0d70811dd..330638cb1 100644 --- a/host/lib/usrp/usrp2/dsp_impl.cpp +++ b/host/lib/usrp/usrp2/dsp_impl.cpp @@ -91,20 +91,8 @@ void usrp2_impl::init_ddc_config(void){ ); //initial config and update - _ddc_decim = default_decim; - _ddc_freq = 0; - update_ddc_config(); -} - -void usrp2_impl::update_ddc_config(void){ - //set the decimation - _iface->poke32(U2_REG_DSP_RX_DECIM_RATE, calculate_cic_word(_ddc_decim)); - - //set the scaling - static const boost::int16_t default_rx_scale_iq = 1024; - _iface->poke32(U2_REG_DSP_RX_SCALE_IQ, - calculate_iq_scale_word(default_rx_scale_iq, default_rx_scale_iq) - ); + ddc_set(DSP_PROP_FREQ_SHIFT, double(0)); + ddc_set(DSP_PROP_HOST_RATE, double(get_master_clock_freq()/default_decim)); } /*********************************************************************** @@ -151,7 +139,15 @@ void usrp2_impl::ddc_set(const wax::obj &key, const wax::obj &val){ case DSP_PROP_HOST_RATE:{ double extact_rate = get_master_clock_freq()/val.as(); _ddc_decim = pick_closest_rate(extact_rate, _allowed_decim_and_interp_rates); - update_ddc_config(); + + //set the decimation + _iface->poke32(U2_REG_DSP_RX_DECIM_RATE, calculate_cic_word(_ddc_decim)); + + //set the scaling + static const boost::int16_t default_rx_scale_iq = 1024; + _iface->poke32(U2_REG_DSP_RX_SCALE_IQ, + calculate_iq_scale_word(default_rx_scale_iq, default_rx_scale_iq) + ); } return; @@ -170,24 +166,8 @@ void usrp2_impl::init_duc_config(void){ ); //initial config and update - _duc_interp = default_interp; - _duc_freq = 0; - update_duc_config(); -} - -void usrp2_impl::update_duc_config(void){ - // Calculate CIC interpolation (i.e., without halfband interpolators) - size_t tmp_interp = calculate_cic_word(_duc_interp) & 0xff; - - // Calculate closest multiplier constant to reverse gain absent scale multipliers - double interp_cubed = std::pow(double(tmp_interp), 3); - boost::int16_t scale = rint((4096*std::pow(2, ceil(log2(interp_cubed))))/(1.65*interp_cubed)); - - //set the interpolation - _iface->poke32(U2_REG_DSP_TX_INTERP_RATE, calculate_cic_word(_duc_interp)); - - //set the scaling - _iface->poke32(U2_REG_DSP_TX_SCALE_IQ, calculate_iq_scale_word(scale, scale)); + duc_set(DSP_PROP_FREQ_SHIFT, double(0)); + duc_set(DSP_PROP_HOST_RATE, double(get_master_clock_freq()/default_interp)); } /*********************************************************************** @@ -234,7 +214,19 @@ void usrp2_impl::duc_set(const wax::obj &key, const wax::obj &val){ case DSP_PROP_HOST_RATE:{ double extact_rate = get_master_clock_freq()/val.as(); _duc_interp = pick_closest_rate(extact_rate, _allowed_decim_and_interp_rates); - update_duc_config(); + + // Calculate CIC interpolation (i.e., without halfband interpolators) + size_t tmp_interp = calculate_cic_word(_duc_interp) & 0xff; + + // Calculate closest multiplier constant to reverse gain absent scale multipliers + double interp_cubed = std::pow(double(tmp_interp), 3); + boost::int16_t scale = rint((4096*std::pow(2, ceil(log2(interp_cubed))))/(1.65*interp_cubed)); + + //set the interpolation + _iface->poke32(U2_REG_DSP_TX_INTERP_RATE, calculate_cic_word(_duc_interp)); + + //set the scaling + _iface->poke32(U2_REG_DSP_TX_SCALE_IQ, calculate_iq_scale_word(scale, scale)); } return; diff --git a/host/lib/usrp/usrp2/usrp2_impl.hpp b/host/lib/usrp/usrp2/usrp2_impl.hpp index 6ad151a0a..77148ee62 100644 --- a/host/lib/usrp/usrp2/usrp2_impl.hpp +++ b/host/lib/usrp/usrp2/usrp2_impl.hpp @@ -198,14 +198,12 @@ private: size_t _ddc_decim; double _ddc_freq; void init_ddc_config(void); - void update_ddc_config(void); void issue_ddc_stream_cmd(const uhd::stream_cmd_t &stream_cmd); //methods and shadows for the duc dsp size_t _duc_interp; double _duc_freq; void init_duc_config(void); - void update_duc_config(void); //properties interface for ddc void ddc_get(const wax::obj &, wax::obj &); -- cgit v1.2.3