root / host / lib / ic_reg_maps / gen_max2118_regs.py @ ce5940f8
History | View | Annotate | Download (5.4 kB)
| 1 |
#!/usr/bin/env python
|
|---|---|
| 2 |
#
|
| 3 |
# Copyright 2010 Ettus Research LLC
|
| 4 |
#
|
| 5 |
# This program is free software: you can redistribute it and/or modify
|
| 6 |
# it under the terms of the GNU General Public License as published by
|
| 7 |
# the Free Software Foundation, either version 3 of the License, or
|
| 8 |
# (at your option) any later version.
|
| 9 |
#
|
| 10 |
# This program is distributed in the hope that it will be useful,
|
| 11 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 12 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 13 |
# GNU General Public License for more details.
|
| 14 |
#
|
| 15 |
# You should have received a copy of the GNU General Public License
|
| 16 |
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
| 17 |
#
|
| 18 |
|
| 19 |
########################################################################
|
| 20 |
# Template for raw text data describing write registers
|
| 21 |
# name addr[bit range inclusive] default optional enums
|
| 22 |
########################################################################
|
| 23 |
WRITE_REGS_TMPL="""\
|
| 24 |
########################################################################
|
| 25 |
## Note: offsets given from perspective of data bits (excludes address)
|
| 26 |
########################################################################
|
| 27 |
##
|
| 28 |
########################################################################
|
| 29 |
## N-Divider MSB (0) Write
|
| 30 |
########################################################################
|
| 31 |
div2 0[7] 0 div4, div2
|
| 32 |
n_divider_msb 0[0:6] 3
|
| 33 |
########################################################################
|
| 34 |
## N-Divider LSB (1) Write
|
| 35 |
########################################################################
|
| 36 |
n_divider_lsb 1[0:7] 0xB6
|
| 37 |
~n_divider n_divider_lsb, n_divider_msb
|
| 38 |
########################################################################
|
| 39 |
## R, Charge Pump, and VCO (2) Write
|
| 40 |
########################################################################
|
| 41 |
#set $r_divider_names = ', '.join(map(lambda x: 'div' + str(2**(x+1)), range(0,8)))
|
| 42 |
r_divider 2[5:7] 1 $r_divider_names
|
| 43 |
#set $cp_current_bias = ', '.join(map(lambda x: 'i_cp_%dua'%(50*2**x), range(0,4)))
|
| 44 |
cp_current 2[3:4] 3 $cp_current_bias
|
| 45 |
osc_band 2[0:2] 5
|
| 46 |
########################################################################
|
| 47 |
## I/Q Filter DAC (3) Write
|
| 48 |
########################################################################
|
| 49 |
##unused 3[7] 0
|
| 50 |
f_dac 3[0:6] 0x7F ## filter tuning dac, depends on m
|
| 51 |
########################################################################
|
| 52 |
## LPF Divider DAC (4) Write
|
| 53 |
########################################################################
|
| 54 |
adl_vco_adc_latch 4[7] 0 disabled, enabled
|
| 55 |
ade_vco_ade_read 4[6] 0 disabled, enabled
|
| 56 |
dl_output_drive 4[5] 0 iq_590m_vpp, iq_1_vpp
|
| 57 |
m_divider 4[0:4] 2 ## filter tuning counter
|
| 58 |
########################################################################
|
| 59 |
## GC2 and Diag (5) Write
|
| 60 |
########################################################################
|
| 61 |
diag 5[5:7] 0 normal, cp_i_source, cp_i_sink, cp_high_z, unused, n_and_filt, r_and_gc2, m_div
|
| 62 |
gc2 5[0:4] 0x1F ## Step Size: 0-1: 0dB, 2-22: 1dB, 23-31: 0.5dB
|
| 63 |
"""
|
| 64 |
|
| 65 |
########################################################################
|
| 66 |
# Template for raw text data describing read registers
|
| 67 |
# name addr[bit range inclusive] default optional enums
|
| 68 |
########################################################################
|
| 69 |
READ_REGS_TMPL="""\
|
| 70 |
########################################################################
|
| 71 |
## Status (0) Read
|
| 72 |
########################################################################
|
| 73 |
pwr 0[6] 0 not_reset, reset
|
| 74 |
adc 0[2:5] 0 ## VCO tuning voltage, Lock Status
|
| 75 |
########################################################################
|
| 76 |
## I/Q Filter DAC (1) Read
|
| 77 |
########################################################################
|
| 78 |
filter_dac 1[0:6] 0 ## I/Q Filter tuning DAC, current
|
| 79 |
"""
|
| 80 |
|
| 81 |
########################################################################
|
| 82 |
# Template for methods in the body of the struct
|
| 83 |
########################################################################
|
| 84 |
BODY_TMPL="""\
|
| 85 |
boost::uint8_t get_reg(boost::uint8_t addr){
|
| 86 |
boost::uint8_t reg = 0;
|
| 87 |
switch(addr){
|
| 88 |
#for $addr in sorted(set(map(lambda r: r.get_addr(), $regs)))
|
| 89 |
case $addr:
|
| 90 |
#for $reg in filter(lambda r: r.get_addr() == addr, $regs)
|
| 91 |
reg |= (boost::uint8_t($reg.get_name()) & $reg.get_mask()) << $reg.get_shift();
|
| 92 |
#end for
|
| 93 |
break;
|
| 94 |
#end for
|
| 95 |
}
|
| 96 |
return boost::uint8_t(reg);
|
| 97 |
}
|
| 98 |
|
| 99 |
void set_reg(boost::uint8_t addr, boost::uint8_t reg){
|
| 100 |
switch(addr){
|
| 101 |
#for $addr in sorted(set(map(lambda r: r.get_addr(), $regs)))
|
| 102 |
case $addr:
|
| 103 |
#for $reg in filter(lambda r: r.get_addr() == addr, $regs)
|
| 104 |
$reg.get_name() = $(reg.get_type())((reg >> $reg.get_shift()) & $reg.get_mask());
|
| 105 |
#end for
|
| 106 |
break;
|
| 107 |
#end for
|
| 108 |
}
|
| 109 |
}
|
| 110 |
"""
|
| 111 |
|
| 112 |
if __name__ == '__main__': |
| 113 |
import common; common.generate( |
| 114 |
name='max2118_write_regs',
|
| 115 |
regs_tmpl=WRITE_REGS_TMPL, |
| 116 |
body_tmpl=BODY_TMPL, |
| 117 |
file=__file__, |
| 118 |
) |
| 119 |
|
| 120 |
import common; common.generate( |
| 121 |
name='max2118_read_regs',
|
| 122 |
regs_tmpl=READ_REGS_TMPL, |
| 123 |
body_tmpl=BODY_TMPL, |
| 124 |
file=__file__, |
| 125 |
append=True,
|
| 126 |
) |