Statistics
| Branch: | Tag: | Revision:

root / host / lib / ic_reg_maps / gen_max2118_regs.py @ 898adebb

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:4]        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
    )