1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
#!/usr/bin/env python
#
# Copyright 2010 Ettus Research LLC
# Copyright 2018 Ettus Research, a National Instruments Company
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
########################################################################
# Template for raw text data describing registers
# name addr[bit range inclusive] default optional enums
########################################################################
REGS_TMPL="""\
########################################################################
## Note: offsets given from perspective of data bits (excludes address)
########################################################################
##
########################################################################
## Standby (2)
########################################################################
_set_to_1_2_0 2[0] 1
_set_to_1_2_1 2[1] 1
_set_to_1_2_2 2[2] 1
pa_bias_dac 2[10] 0
voltage_ref 2[11] 0
_set_to_1_2_12 2[12] 1
mimo_select 2[13] 0 normal, mimo
########################################################################
## Integer Divider Ratio (3)
########################################################################
int_div_ratio_word 3[0:7] 0xa2
frac_div_ratio_lsb 3[12:13] 0
########################################################################
## Fractional Divider Ratio (4)
########################################################################
frac_div_ratio_msb 4[0:13] 0
########################################################################
## Band Select and PLL (5)
########################################################################
band_select 5[0] 0 2_4ghz, 5ghz
ref_divider 5[1:3] 1
pll_cp_select 5[5] 1 2ma, 4ma
band_select_802_11a 5[6] 0 4_9ghz_to_5_35ghz, 5_47ghz_to_5_875ghz
vco_bandswitch 5[7] 0 disable, automatic
vco_spi_bandswitch 5[8] 0 fsm, spi
vco_sub_band 5[9:10] 0
_set_to_1_5_11 5[11] 1
_set_to_1_5_12 5[12] 1
band_sel_mimo 5[13] 0 normal, mimo
########################################################################
## Calibration (6)
########################################################################
rx_cal_mode 6[0] 0 dis, enb
tx_cal_mode 6[1] 0 dis, enb
_set_to_1_6_10 6[10] 1
iq_cal_gain 6[11:12] 3 8db, 18db, 24db, 34db
########################################################################
## Lowpass Filter (7)
########################################################################
rx_lpf_fine_adj 7[0:2] 2 90, 95, 100, 105, 110
rx_lpf_coarse_adj 7[3:4] 1 7_5mhz, 9_5mhz, 14mhz, 18mhz
tx_lpf_coarse_adj 7[5:6] 1 12mhz=1, 18mhz=2, 24mhz=3
rssi_high_bw 7[11] 0 2mhz, 6mhz
########################################################################
## Rx Control/RSSI (8)
########################################################################
_set_to_1_8_0 8[0] 1
rx_highpass 8[2] 1 100hz, 30khz
_set_to_1_8_5 8[5] 1
rssi_pin_fcn 8[8] 0 rssi, temp
rssi_op_mode 8[10] 0 rssi_rxhp, enabled
rssi_output_range 8[11] 0 low, high
rx_vga_gain_spi 8[12] 0 io, spi
########################################################################
## Tx Linearity/Baseband Gain (9)
########################################################################
tx_baseband_gain 9[0:1] 0 0db, 2db, 3_5db, 5db
tx_upconv_linearity 9[2:3] 0 50, 63, 78, 100
tx_vga_linearity 9[6:7] 0 50, 63, 78, 100
pa_driver_linearity 9[8:9] 2 50, 63, 78, 100
tx_vga_gain_spi 9[10] 0 io, spi
########################################################################
## PA Bias DAC (10)
########################################################################
pa_bias_dac_out_curr 10[0:5] 0
pa_bias_dac_delay 10[6:9] 0xf
########################################################################
## Rx Gain (11)
########################################################################
rx_vga_gain 11[0:4] 0x1f
rx_lna_gain 11[5:6] 3
########################################################################
## Tx VGA Gain (12)
########################################################################
tx_vga_gain 12[0:5] 0
"""
########################################################################
# Template for methods in the body of the struct
########################################################################
BODY_TMPL="""\
uint32_t get_reg(uint8_t addr){
uint16_t reg = 0;
switch(addr){
% for addr in sorted(set(map(lambda r: r.get_addr(), regs))):
case ${addr}:
% for reg in filter(lambda r: r.get_addr() == addr, regs):
reg |= (uint16_t(${reg.get_name()}) & ${reg.get_mask()}) << ${reg.get_shift()};
% endfor
break;
% endfor
}
return (uint32_t(reg) << 4) | (addr & 0xf);
}
"""
if __name__ == '__main__':
import common; common.generate(
name='max2829_regs',
regs_tmpl=REGS_TMPL,
body_tmpl=BODY_TMPL,
file=__file__,
)
|