Revision 5c0d3d30 host/lib/usrp/usrp1/dsp_impl.cpp
| b/host/lib/usrp/usrp1/dsp_impl.cpp | ||
|---|---|---|
| 29 | 29 |
/*********************************************************************** |
| 30 | 30 |
* RX DDC Initialization |
| 31 | 31 |
**********************************************************************/ |
| 32 |
void usrp1_impl::rx_ddc_init(void)
|
|
| 32 |
void usrp1_impl::rx_dsp_init(void)
|
|
| 33 | 33 |
{
|
| 34 |
_rx_ddc_proxy = wax_obj_proxy::make(
|
|
| 35 |
boost::bind(&usrp1_impl::rx_ddc_get, this, _1, _2),
|
|
| 36 |
boost::bind(&usrp1_impl::rx_ddc_set, this, _1, _2));
|
|
| 34 |
_rx_dsp_proxy = wax_obj_proxy::make(
|
|
| 35 |
boost::bind(&usrp1_impl::rx_dsp_get, this, _1, _2),
|
|
| 36 |
boost::bind(&usrp1_impl::rx_dsp_set, this, _1, _2));
|
|
| 37 | 37 |
|
| 38 |
rx_ddc_set(DSP_PROP_HOST_RATE, double(64e6/10));
|
|
| 38 |
rx_dsp_set(DSP_PROP_HOST_RATE, double(64e6/10)); //FIXME magic number
|
|
| 39 | 39 |
} |
| 40 | 40 |
|
| 41 | 41 |
/*********************************************************************** |
| 42 | 42 |
* RX DDC Get |
| 43 | 43 |
**********************************************************************/ |
| 44 |
void usrp1_impl::rx_ddc_get(const wax::obj &key, wax::obj &val)
|
|
| 44 |
void usrp1_impl::rx_dsp_get(const wax::obj &key, wax::obj &val)
|
|
| 45 | 45 |
{
|
| 46 | 46 |
switch(key.as<dsp_prop_t>()){
|
| 47 | 47 |
case DSP_PROP_NAME: |
| ... | ... | |
| 53 | 53 |
return; |
| 54 | 54 |
|
| 55 | 55 |
case DSP_PROP_FREQ_SHIFT: |
| 56 |
val = _ddc_freq;
|
|
| 56 |
val = _rx_dsp_freq;
|
|
| 57 | 57 |
return; |
| 58 | 58 |
|
| 59 | 59 |
case DSP_PROP_CODEC_RATE: |
| ... | ... | |
| 61 | 61 |
return; |
| 62 | 62 |
|
| 63 | 63 |
case DSP_PROP_HOST_RATE: |
| 64 |
val = _clock_ctrl->get_master_clock_freq()/_ddc_decim;
|
|
| 64 |
val = _clock_ctrl->get_master_clock_freq()/_rx_dsp_decim;
|
|
| 65 | 65 |
return; |
| 66 | 66 |
|
| 67 | 67 |
default: UHD_THROW_PROP_GET_ERROR(); |
| ... | ... | |
| 90 | 90 |
return (unsigned int) v; |
| 91 | 91 |
} |
| 92 | 92 |
|
| 93 |
void usrp1_impl::rx_ddc_set(const wax::obj &key, const wax::obj &val)
|
|
| 93 |
void usrp1_impl::rx_dsp_set(const wax::obj &key, const wax::obj &val)
|
|
| 94 | 94 |
{
|
| 95 | 95 |
switch(key.as<dsp_prop_t>()) {
|
| 96 | 96 |
case DSP_PROP_FREQ_SHIFT: {
|
| 97 | 97 |
double new_freq = val.as<double>(); |
| 98 |
_iface->poke32(FR_RX_FREQ_0, compute_freq_word(64e6, new_freq)); |
|
| 99 |
_ddc_freq = new_freq;
|
|
| 98 |
_iface->poke32(FR_RX_FREQ_0, compute_freq_word(64e6, new_freq)); //FIXME magic rate
|
|
| 99 |
_tx_dsp_freq = new_freq;
|
|
| 100 | 100 |
return; |
| 101 | 101 |
} |
| 102 | 102 |
case DSP_PROP_HOST_RATE: {
|
| ... | ... | |
| 110 | 110 |
return; |
| 111 | 111 |
} |
| 112 | 112 |
|
| 113 |
_ddc_decim = rate;
|
|
| 114 |
_iface->poke32(FR_DECIM_RATE, _ddc_decim/2 - 1);
|
|
| 113 |
_rx_dsp_decim = rate;
|
|
| 114 |
_iface->poke32(FR_DECIM_RATE, _rx_dsp_decim/2 - 1);
|
|
| 115 | 115 |
} |
| 116 | 116 |
return; |
| 117 | 117 |
|
| ... | ... | |
| 123 | 123 |
/*********************************************************************** |
| 124 | 124 |
* TX DUC Initialization |
| 125 | 125 |
**********************************************************************/ |
| 126 |
void usrp1_impl::tx_duc_init(void)
|
|
| 126 |
void usrp1_impl::tx_dsp_init(void)
|
|
| 127 | 127 |
{
|
| 128 |
_tx_duc_proxy = wax_obj_proxy::make(
|
|
| 129 |
boost::bind(&usrp1_impl::tx_duc_get, this, _1, _2),
|
|
| 130 |
boost::bind(&usrp1_impl::tx_duc_set, this, _1, _2));
|
|
| 128 |
_tx_dsp_proxy = wax_obj_proxy::make(
|
|
| 129 |
boost::bind(&usrp1_impl::tx_dsp_get, this, _1, _2),
|
|
| 130 |
boost::bind(&usrp1_impl::tx_dsp_set, this, _1, _2));
|
|
| 131 | 131 |
|
| 132 | 132 |
//initial config and update |
| 133 |
tx_duc_set(DSP_PROP_HOST_RATE, double(64e6/10));
|
|
| 133 |
tx_dsp_set(DSP_PROP_HOST_RATE, double(64e6/10)); //FIXME magic number
|
|
| 134 | 134 |
} |
| 135 | 135 |
|
| 136 | 136 |
/*********************************************************************** |
| 137 | 137 |
* TX DUC Get |
| 138 | 138 |
**********************************************************************/ |
| 139 |
void usrp1_impl::tx_duc_get(const wax::obj &key, wax::obj &val)
|
|
| 139 |
void usrp1_impl::tx_dsp_get(const wax::obj &key, wax::obj &val)
|
|
| 140 | 140 |
{
|
| 141 | 141 |
switch(key.as<dsp_prop_t>()) {
|
| 142 | 142 |
case DSP_PROP_NAME: |
| ... | ... | |
| 148 | 148 |
return; |
| 149 | 149 |
|
| 150 | 150 |
case DSP_PROP_FREQ_SHIFT: |
| 151 |
val = _duc_freq;
|
|
| 151 |
val = _tx_dsp_freq;
|
|
| 152 | 152 |
return; |
| 153 | 153 |
|
| 154 | 154 |
case DSP_PROP_CODEC_RATE: |
| ... | ... | |
| 156 | 156 |
return; |
| 157 | 157 |
|
| 158 | 158 |
case DSP_PROP_HOST_RATE: |
| 159 |
val = _clock_ctrl->get_master_clock_freq() * 2 / _duc_interp;
|
|
| 159 |
val = _clock_ctrl->get_master_clock_freq() * 2 / _tx_dsp_interp;
|
|
| 160 | 160 |
return; |
| 161 | 161 |
|
| 162 | 162 |
default: UHD_THROW_PROP_GET_ERROR(); |
| ... | ... | |
| 167 | 167 |
/*********************************************************************** |
| 168 | 168 |
* TX DUC Set |
| 169 | 169 |
**********************************************************************/ |
| 170 |
void usrp1_impl::tx_duc_set(const wax::obj &key, const wax::obj &val)
|
|
| 170 |
void usrp1_impl::tx_dsp_set(const wax::obj &key, const wax::obj &val)
|
|
| 171 | 171 |
{
|
| 172 | 172 |
switch(key.as<dsp_prop_t>()) {
|
| 173 | 173 |
|
| 174 | 174 |
case DSP_PROP_FREQ_SHIFT: {
|
| 175 | 175 |
double new_freq = val.as<double>(); |
| 176 |
_codec_ctrl->set_duc_freq(new_freq); |
|
| 177 |
_duc_freq = new_freq;
|
|
| 176 |
_codec_ctrls[DBOARD_SLOT_A]->set_duc_freq(new_freq);
|
|
| 177 |
_tx_dsp_freq = new_freq;
|
|
| 178 | 178 |
return; |
| 179 | 179 |
} |
| 180 |
|
|
| 181 |
//TODO freq prop secondary: DBOARD_SLOT_B codec... |
|
| 182 |
|
|
| 180 | 183 |
case DSP_PROP_HOST_RATE: {
|
| 181 | 184 |
unsigned int rate = |
| 182 | 185 |
_clock_ctrl->get_master_clock_freq() * 2 / val.as<double>(); |
| ... | ... | |
| 187 | 190 |
return; |
| 188 | 191 |
} |
| 189 | 192 |
|
| 190 |
_duc_interp = rate;
|
|
| 191 |
_iface->poke32(FR_INTERP_RATE, _duc_interp / 4 - 1);
|
|
| 193 |
_tx_dsp_interp = rate;
|
|
| 194 |
_iface->poke32(FR_INTERP_RATE, _tx_dsp_interp / 4 - 1);
|
|
| 192 | 195 |
return; |
| 193 | 196 |
} |
| 194 | 197 |
default: UHD_THROW_PROP_SET_ERROR(); |
Also available in: Unified diff