[5431] | 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] |
---|
[6317] | 33 | div_ratios_24 = list(map(calc_div_ratio_24, center_freqs_24)) |
---|
| 34 | regs = list(map(calc_reg34_vals, div_ratios_24)) |
---|
[5431] | 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 | |
---|
[5512] | 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, |
---|
[5569] | 46 | 5880, 5885, 5890, 5865] |
---|
[5431] | 47 | |
---|
[6317] | 48 | div_ratios_5 = list(map(calc_div_ratio_5, center_freqs_5)) |
---|
| 49 | regs = list(map(calc_reg34_vals, div_ratios_5)) |
---|
[5431] | 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') |
---|
[5612] | 56 | |
---|
[6120] | 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 |
---|
[5612] | 60 | |
---|
[6120] | 61 | print('2.4GHz <br> Chan | Freq <br> (MHz) | | 5GHz <br> Chan | Freq <br> (MHz)') |
---|
| 62 | print('--- | ----- | - | --- | -----') |
---|
[5612] | 63 | |
---|
[6120] | 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 | |
---|
[6316] | 74 | if 0: |
---|
[6120] | 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 | |
---|