1 | # Python code to generate arrays of PLL tuning register values for MAX2829 |
---|
2 | |
---|
3 | def calc_div_ratio_24(center_freq): |
---|
4 | return (center_freq * 4.0/3.0) / 20.0 |
---|
5 | |
---|
6 | def calc_div_ratio_5(center_freq): |
---|
7 | return (center_freq * 4.0/5.0) / 20.0 |
---|
8 | |
---|
9 | def calc_div_ratio_int(div_ratio): |
---|
10 | return int(div_ratio) |
---|
11 | |
---|
12 | def calc_div_ratio_frac_as_int(div_ratio): |
---|
13 | return int(div_ratio * 2**16) |
---|
14 | |
---|
15 | def calc_reg34_vals(div_ratio): |
---|
16 | # Each divider ratio is represented as a UFix26_16 (10 integer bits, 16 fractional bits) |
---|
17 | # reg3: |
---|
18 | # [13:12]: 2LSB of fractional part of div ratio |
---|
19 | # [11: 8]: Zeros |
---|
20 | # [ 9: 0]: Integer part (UFix10_0) of div ratio |
---|
21 | # reg4: |
---|
22 | # [13: 0]: 14MSB of fractional part of div ratio |
---|
23 | |
---|
24 | dr_i = calc_div_ratio_int(div_ratio) |
---|
25 | df_fi = calc_div_ratio_frac_as_int(div_ratio) |
---|
26 | |
---|
27 | reg3 = (dr_i & 0x3FF) | ((df_fi & 0x3) << 12) |
---|
28 | reg4 = ((df_fi & 0xFFFC) >> 2) |
---|
29 | |
---|
30 | return (reg3, reg4) |
---|
31 | |
---|
32 | center_freqs_24 = [2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447, 2452, 2457, 2462, 2467, 2472, 2484] |
---|
33 | div_ratios_24 = list(map(calc_div_ratio_24, center_freqs_24)) |
---|
34 | regs = list(map(calc_reg34_vals, div_ratios_24)) |
---|
35 | |
---|
36 | c_l1 = 'static u16 rc_tuningParams_24GHz_freqs[{0}] = {{ {1} }};'.format(len(center_freqs_24), ', '.join(map(str, center_freqs_24))) |
---|
37 | c_l2 = 'static u16 rc_tuningParams_24GHz_reg3[{0}] = {{ {1} }};'.format(len(center_freqs_24), ', '.join(map(hex, [x[0] for x in regs]))) |
---|
38 | c_l3 = 'static u16 rc_tuningParams_24GHz_reg4[{0}] = {{ {1} }};'.format(len(center_freqs_24), ', '.join(map(hex, [x[1] for x in regs]))) |
---|
39 | |
---|
40 | print(c_l1 + '\n' + c_l2 + '\n' + c_l3 + '\n') |
---|
41 | |
---|
42 | center_freqs_5 = [ 5180, 5190, 5200, 5220, 5230, 5240, 5260, 5270, 5280, 5300, |
---|
43 | 5310, 5320, 5500, 5510, 5520, 5540, 5550, 5560, 5580, 5590, |
---|
44 | 5600, 5620, 5630, 5640, 5660, 5670, 5680, 5700, 5710, 5720, |
---|
45 | 5745, 5755, 5765, 5785, 5795, 5805, 5825, 5860, 5870, 5875, |
---|
46 | 5880, 5885, 5890, 5865] |
---|
47 | |
---|
48 | div_ratios_5 = list(map(calc_div_ratio_5, center_freqs_5)) |
---|
49 | regs = list(map(calc_reg34_vals, div_ratios_5)) |
---|
50 | |
---|
51 | c_l1 = 'static u16 rc_tuningParams_5GHz_freqs[{0}] = {{ {1} }};'.format(len(center_freqs_5), ', '.join(map(str, center_freqs_5))) |
---|
52 | c_l2 = 'static u16 rc_tuningParams_5GHz_reg3[{0}] = {{ {1} }};'.format(len(center_freqs_5), ', '.join(map(hex, [x[0] for x in regs]))) |
---|
53 | c_l3 = 'static u16 rc_tuningParams_5GHz_reg4[{0}] = {{ {1} }};'.format(len(center_freqs_5), ', '.join(map(hex, [x[1] for x in regs]))) |
---|
54 | |
---|
55 | print(c_l1 + '\n' + c_l2 + '\n' + c_l3 + '\n') |
---|
56 | |
---|
57 | if 0: |
---|
58 | # Print doxygen-style table of channel indexes and center frequencies |
---|
59 | # Can be copy/pasted into doxygen comment above radio_controller_setCenterFrequency |
---|
60 | |
---|
61 | print('2.4GHz <br> Chan | Freq <br> (MHz) | | 5GHz <br> Chan | Freq <br> (MHz)') |
---|
62 | print('--- | ----- | - | --- | -----') |
---|
63 | |
---|
64 | # Want lines like: |
---|
65 | # ' 1 | 2412 | | 1 | 5180' |
---|
66 | # ' 14 | 2484 | | 14 | 5510' |
---|
67 | # ' | | | 22 | 5620' |
---|
68 | for ii in range(len(center_freqs_5)): |
---|
69 | if(ii < len(center_freqs_24)): |
---|
70 | print('{0} | {1} | | {0} | {2}'.format(ii+1, center_freqs_24[ii], center_freqs_5[ii])) |
---|
71 | else: |
---|
72 | print('- | - | | {0} | {1}'.format(ii+1, center_freqs_5[ii])) |
---|
73 | |
---|
74 | if 0: |
---|
75 | # Print wiki-style table output, to be copy-pasted into warplab command doc string |
---|
76 | |
---|
77 | # ||||= 2.4GHz =||||= 5GHz =|| |
---|
78 | # || Chan || Freq || Chan || Freq || |
---|
79 | # || 1 || 2412 || 1 || 5180 || |
---|
80 | # || || || 12 || 5560 || |
---|
81 | |
---|
82 | print(' % ||||= 2.4GHz =||||= 5GHz =||') |
---|
83 | print(' % || Chan || Freq || Chan || Freq ||') |
---|
84 | |
---|
85 | for ii in range(len(center_freqs_5)): |
---|
86 | if(ii < len(center_freqs_24)): |
---|
87 | print(' % || {0} || {1} || {0} || {2} ||'.format(ii+1, center_freqs_24[ii], center_freqs_5[ii])) |
---|
88 | else: |
---|
89 | print(' % || || || {0} || {1} ||'.format(ii+1, center_freqs_5[ii])) |
---|
90 | |
---|