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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
|
#!/usr/bin/env python
#
# Copyright 2019 Ettus Research, a National Instruments Brand
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
"""
Register map for LMX2572
"""
########################################################################
# Template for raw text data describing registers
# name addr[bit range inclusive] default optional enums
########################################################################
REGS_TMPL = """\
########################################################################
## address 0
########################################################################
powerdown 0[0] 0 normal_operation, power_down
reset 0[1] 0 normal_operation, reset
muxout_ld_sel 0[2] 1 register_readback, lock_detect
fcal_en 0[3] 1 invalid, enable
reg0_reserved0 0[4] 1
fcal_lpfd_adj 0[5:6] 0
fcal_hpfd_adj 0[7:8] 0
out_mute 0[9] 1 disabled, muted
reg0_reserved1 0[10] 0
add_hold 0[11] 0
reg0_reserved2 0[12:13] 0x2
vco_phase_sync_en 0[14] 0 normal_operation, phase_sync_mode
ramp_en 0[15] 0 normal_operation, frequency_ramping
########################################################################
## address 1
########################################################################
cal_clk_div 1[0:2] 0
reg1_reserved0 1[3:15] 0x101
########################################################################
## address 2
########################################################################
reg2_reserved0 2[0:15] 0x500
########################################################################
## address 3
########################################################################
reg3_reserved0 3[0:15] 0x782
########################################################################
## address 4
########################################################################
reg4_reserved0 4[0:15] 0xA43
########################################################################
## address 5
########################################################################
reg5_reserved0 5[0:10] 0xC8
ipbuf_term 5[11] 0 normal_operation, internally_terminated
ipbuf_type 5[12] 1 differential, single_ended
reg5_reserved1 5[13:15] 1
########################################################################
## address 6
########################################################################
reg6_reserved0 6[0:10] 0x2
ldo_dly 6[11:15] 0x19
########################################################################
## address 7
########################################################################
reg7_reserved0 7[0:13] 0xB2
out_force 7[14] 0 use_out_mute, no_mute
reg7_reserved1 7[15] 0
########################################################################
## address 8
########################################################################
reg8_reserved0 8[0:10] 0
vco_capctrl_force 8[11] 0 normal_operation, use_vco_capctrl
reg8_reserved1 8[12:13] 0x2
vco_daciset_force 8[14] 0 normal_operation, use_vco_daciset
reg8_reserved2 8[15] 0
########################################################################
## address 9
########################################################################
reg9_reserved0 9[0:11] 0x4
osc_2x 9[12] 0 disabled, enabled
reg9_reserved1 9[13] 0
mult_hi 9[14] 0 less_than_equal_to_100M, greater_than_100M
reg9_reserved2 9[15] 0
########################################################################
## address 10
########################################################################
reg10_reserved0 10[0:6] 0x78
mult 10[7:11] 1
reg10_reserved1 10[12:15] 1
########################################################################
## address 11
########################################################################
reg11_reserved0 11[0:3] 0x8
pll_r 11[4:11] 1
reg11_reserved1 11[12:15] 0xB
########################################################################
## address 12
########################################################################
pll_r_pre 12[0:11] 1
reg12_reserved0 12[12:15] 0x5
########################################################################
## address 13
########################################################################
reg13_reserved0 13[0:15] 0x4000
########################################################################
## address 14
########################################################################
reg14_reserved0 14[0:2] 0x0
cpg 14[3:6] 0x8
reg14_reserved1 14[7:15] 0x30
########################################################################
## address 15
########################################################################
reg15_reserved0 15[0:15] 0x60E
########################################################################
## address 16
########################################################################
vco_daciset 16[0:8] 0x80
reg16_reserved0 16[9:15] 0
########################################################################
## address 17
########################################################################
vco_daciset_strt 17[0:8] 0x96
reg17_reserved0 17[9:15] 0
########################################################################
## address 18
########################################################################
reg18_reserved0 18[0:15] 0x64
########################################################################
## address 19
########################################################################
vco_capctrl 19[0:7] 0xB7
reg19_reserved0 19[8:15] 0x27
########################################################################
## address 20
########################################################################
reg20_reserved0 20[0:9] 0x48
vco_sel_force 20[10] 0 disabled, enabled
vco_sel 20[11:13] 0x6
reg20_reserved1 20[14:15] 1
########################################################################
## address 21
########################################################################
reg21_reserved0 21[0:15] 0x409
########################################################################
## address 22
########################################################################
reg22_reserved0 22[0:15] 1
########################################################################
## address 23
########################################################################
reg23_reserved0 23[0:15] 0x7C
########################################################################
## address 24
########################################################################
reg24_reserved0 24[0:15] 0x71A
########################################################################
## address 25
########################################################################
reg25_reserved0 25[0:15] 0x624
########################################################################
## address 26
########################################################################
reg26_reserved0 26[0:15] 0x808
########################################################################
## address 27
########################################################################
reg27_reserved0 27[0:15] 0x2
########################################################################
## address 28
########################################################################
reg28_reserved0 28[0:15] 0x488
########################################################################
## address 29
########################################################################
reg29_reserved0 29[0:15] 0x18C6
########################################################################
## address 30
########################################################################
reg30_reserved0 30[0:15] 0x18C6
########################################################################
## address 31
########################################################################
reg31_reserved0 31[0:15] 0xC3E6
########################################################################
## address 32
########################################################################
reg32_reserved0 32[0:15] 0x5BF
########################################################################
## address 33
########################################################################
reg33_reserved0 33[0:15] 0x1E01
########################################################################
## address 34
########################################################################
pll_n_upper_3_bits 34[0:2] 0
reg34_reserved0 34[3:15] 0x2
########################################################################
## address 35
########################################################################
reg35_reserved0 35[0:15] 0x4
########################################################################
## address 36
########################################################################
pll_n_lower_16_bits 36[0:15] 0x28
########################################################################
## address 37
########################################################################
reg37_reserved0 37[0:7] 0x5
pfd_dly_sel 37[8:13] 0x2
reg37_reserved1 37[14] 0
mash_seed_en 37[15] 0 disabled, enabled
########################################################################
## address 38
########################################################################
pll_den_upper 38[0:15] 0xFFFF
########################################################################
## address 39
########################################################################
pll_den_lower 39[0:15] 0xFFFF
########################################################################
## address 40
########################################################################
mash_seed_upper 40[0:15] 0
########################################################################
## address 41
########################################################################
mash_seed_lower 41[0:15] 0
########################################################################
## address 42
########################################################################
pll_num_upper 42[0:15] 0
########################################################################
## address 43
########################################################################
pll_num_lower 43[0:15] 0
########################################################################
## address 44
########################################################################
mash_order 44[0:2] 0x2 interger_mode, first_order, second_order, third_order, fourth_order
reg44_reserved0 44[3:4] 0
mash_reset_n 44[5] 1 reset, normal_operation
outa_pd 44[6] 0 normal_operation, power_down
outb_pd 44[7] 1 normal_operation, power_down
outa_pwr 44[8:13] 0x22
reg44_reserved1 44[14:15] 0
########################################################################
## address 45
########################################################################
outb_pwr 45[0:5] 0x22
register45_reserved0 45[6:10] 0x18
outa_mux 45[11:12] 0 channel_divider, vco, not_used, high_impedance
register45_reserved1 45[13:15] 0x6
########################################################################
## address 46
########################################################################
outb_mux 46[0:1] 0 channel_divider, vco, sysref, high_impedance
register46_reserved0 46[2:15] 0x1FC
########################################################################
## address 47
########################################################################
reg47_reserved0 47[0:15] 0x300
########################################################################
## address 48
########################################################################
reg48_reserved0 48[0:15] 0x3E0
########################################################################
## address 49
########################################################################
reg49_reserved0 49[0:15] 0x4180
########################################################################
## address 50
########################################################################
reg50_reserved0 50[0:15] 0x80
########################################################################
## address 51
########################################################################
reg51_reserved0 51[0:15] 0x80
########################################################################
## address 52
########################################################################
reg52_reserved0 52[0:15] 0x420
########################################################################
## address 53
########################################################################
reg53_reserved0 53[0:15] 0
########################################################################
## address 54
########################################################################
reg54_reserved0 54[0:15] 0
########################################################################
## address 55
########################################################################
reg55_reserved0 55[0:15] 0
########################################################################
## address 56
########################################################################
reg56_reserved0 56[0:15] 0
########################################################################
## address 57
########################################################################
reg57_reserved0 57[0:15] 0
########################################################################
## address 58
########################################################################
reg58_reserved0 58[0:8] 1
inpin_fmt 58[9:11] 0 SYNC_EQUALS_SYSREFREQ_EQUALS_CMOS, SYNC_EQUALS_LVDS_SYSREFREQ_EQUAL_CMOS, SYNC_EQUALS_CMOS_SYSREFREQ_EQUAL_LVDS, SYNC_EQUALS_SYSREFREQ_EQUALS_LVDS, SYNC_EQUALS_SYSREFREQ_EQUALS_CMOS2, SYNC_EQUALS_LVDSFILTERED_SYSREFREQ_EQUALS_CMOS, SYNC_EQUALS_CMOS_SYSREFREQ_EQUALS_LVDSFILTERED, SYNC_EQUALS_SYSREFREQ_EQUALS_LVDSFILTERED
inpin_lvl 58[12:13] 0 vin_divide_by_4, vin, vin_divide_by_2, invalid
inpin_hyst 58[14] 0 disabled, enabled
inpin_ignore 58[15] 1
########################################################################
## address 59
########################################################################
ld_type 59[0] 1 vcocal, vtune_and_vcocal
reg59_reserved0 59[1:15] 0
########################################################################
## address 60
########################################################################
ld_dly 60[0:15] 0x3E8
########################################################################
## address 61
########################################################################
reg61_reserved0 61[0:15] 0xA8
########################################################################
## address 62
########################################################################
reg62_reserved0 62[0:9] 0xAF
dblbuf_en_0 62[10] 0 disabled, enabled
dblbuf_en_1 62[11] 0 disabled, enabled
dblbuf_en_2 62[12] 0 disabled, enabled
dblbuf_en_3 62[13] 0 disabled, enabled
dblbuf_en_4 62[14] 0 disabled, enabled
dblbuf_en_5 62[15] 0 disabled, enabled
########################################################################
## address 63
########################################################################
reg63_reserved0 63[0:15] 0
########################################################################
## address 64
########################################################################
reg64_reserved0 64[0:15] 0x1388
########################################################################
## address 65
########################################################################
reg65_reserved0 65[0:15] 0
########################################################################
## address 66
########################################################################
reg66_reserved0 6[0:15] 0x1F4
########################################################################
## address 67
########################################################################
reg67_reserved0 67[0:15] 0
########################################################################
## address 68
########################################################################
reg68_reserved0 68[0:15] 0x3E8
########################################################################
## address 69
########################################################################
mash_rst_count_upper 69[0:15] 0
########################################################################
## address 70
########################################################################
mash_rst_count_lower 70[0:15] 0xC350
########################################################################
## address 71
########################################################################
reg71_reserved0 71[0:1] 1
sysref_repeat 71[2] 0 master_mode, repeater_mode
sysref_en 71[3] 0 disabled, enabled
sysref_pulse 71[4] 0 disabled, enabled
sysref_div_pre 71[5:7] 0x4 divide_by_2=2, divide_by_4=4
reg71_reserved1 71[8:15] 0
########################################################################
## address 72
########################################################################
sysref_div 72[0:10] 1
reg72_reserved0 72[11:15] 0
########################################################################
## address 73
########################################################################
jesd_dac1_ctrl 73[0:5] 0x3F
jesd_dac2_ctrl 73[6:11] 0
reg73_reserved0 73[12:15] 0
########################################################################
## address 74
########################################################################
jesd_dac3_ctrl 74[0:5] 0
jesd_dac4_ctrl 74[6:11] 0
sysref_pulse_cnt 74[12:15] 0
########################################################################
## address 75
########################################################################
reg75_reserved0 75[0:5] 0
chdiv 75[6:10] 0 divide_by_2=0, divide_by_4=1, divide_by_8=3, divide_by_16=5, divide_by_32=7, divide_by_64=9, divide_by_128=12, divide_by_256=14
reg75_reserved1 75[11:15] 1
########################################################################
## address 76
########################################################################
reg76_reserved0 76[0:15] 0xC
########################################################################
## address 77
########################################################################
reg77_reserved0 77[0:15] 0
########################################################################
## address 78
########################################################################
reg78_reserved0 78[0] 0
vco_capctrl_strt 78[1:8] 0x32
quick_recal_en 78[9] 0
reg78_reserved1 78[10] 0
ramp_thresh_33rd 78[11] 0
reg78_reserved2 78[12:15] 0
########################################################################
## address 79
########################################################################
ramp_thresh_upper 79[0:15] 0
########################################################################
## address 80
########################################################################
ramp_thresh_lower 80[0:15] 0
########################################################################
## address 81
########################################################################
ramp_limit_high_33rd 81[0] 0
reg81_reserved0 81[1:15] 0
########################################################################
## address 82
########################################################################
ramp_limit_high_upper 82[0:15] 0
########################################################################
## address 83
########################################################################
ramp_limit_high_lower 83[0:15] 0
########################################################################
## address 84
########################################################################
ramp_limit_low_33rd 84[0] 0
reg84_reserved0 84[1:15] 0
########################################################################
## address 85
########################################################################
ramp_limit_low_upper 85[0:15] 0
########################################################################
## address 86
########################################################################
ramp_limit_low_lower 86[0:15] 0
########################################################################
## address 87
########################################################################
reg87_reserved0 87[0:15] 0
########################################################################
## address 88
########################################################################
reg88_reserved0 88[0:15] 0
########################################################################
## address 89
########################################################################
reg89_reserved0 89[0:15] 0
########################################################################
## address 90
########################################################################
reg90_reserved0 90[0:15] 0
########################################################################
## address 91
########################################################################
reg91_reserved0 91[0:15] 0
########################################################################
## address 92
########################################################################
reg92_reserved0 92[0:15] 0
########################################################################
## address 93
########################################################################
reg93_reserved0 93[0:15] 0
########################################################################
## address 94
########################################################################
reg94_reserved0 94[0:15] 0
########################################################################
## address 95
########################################################################
reg95_reserved0 95[0:15] 0
########################################################################
## address 96
########################################################################
reg96_reserved0 96[0:1] 0
ramp_burst_count 96[2:14] 0
ramp_burst_en 96[15] 0 disabled, enabled
########################################################################
## address 97
########################################################################
ramp_burst_trig 97[0:1] 0 ramp_transistion=0, trigger_a=1, trigger_b=2
reg97_reserved0 97[2] 0
ramp_triga 97[3:6] 0 disabled=0, rampclk_rising_edge=1, rampdir_rising_edge=2, always_triggered=4, rampclk_falling_edge=9, rampdir_falling_edge=10
ramp_trgb 97[7:10] 0 disabled=0, rampclk_rising_edge=1, rampdir_rising_edge=2, always_triggered=4, rampclk_falling_edge=9, rampdir_falling_edge=10
reg97_reserved1 97[11:14] 0
ramp0_rst 97[15] 0 disabled, reset
########################################################################
## address 98
########################################################################
ramp0_dly 98[0] 0
reg98_reserved0 98[1] 0
ramp0_inc_upper_14 98[15:2] 0
########################################################################
## address 99
########################################################################
ramp0_inc_lower 99[0:15] 0
########################################################################
## address 100
########################################################################
ramp0_len 100[0:15] 0
########################################################################
## address 101
########################################################################
ramp0_next_trig 101[0:1] 0 timeout_counter, trigger_a, trigger_b
reg101_reserved0 101[2:3] 0
ramp0_next 101[4] 0 ramp0, ramp1
ramp1_rst 101[5] 0 disabled, reset
ramp1_dly 101[6] 0
reg101_reserved1 101[7:15] 0
########################################################################
## address 102
########################################################################
ramp1_inc_upper_14 102[13:0] 0
reg102_reserved0 102[14:15] 0
########################################################################
## address 103
########################################################################
ramp1_inc_lower 103[0:15] 0
########################################################################
## address 104
########################################################################
ramp1_len 104[0:15] 0
########################################################################
## address 105
########################################################################
ramp1_next_trig 105[0:1] 0 timeout_counter, trigger_a, trigger_b
reg105_reserved0 105[2:3] 0
ramp1_next 105[4] 0 ramp0, ramp1
ramp_manual 105[5] 0 automatic_ramping, manual_ramping
ramp_dly_cnt 105[6:15] 0x111
########################################################################
## address 106
########################################################################
ramp_scale_count 106[0:2] 0x7
reg106_reserved0 106[3] 0
ramp_trig_cal 106[4] 0 disabled, enabled
reg106_reserved1 106[5:15] 0
########################################################################
## address 114
########################################################################
fsk_mode_sel 114[0:1] 0 unused=0,fsk_spi=2, fsk_spi_fast=3
fsk_spi_dev_sel 114[2:4] 0
fsk_spi_level 114[5:6] 0 disabled, 2fsk, 4fsk, 8fsk
reg114_reserved0 114[7:9] 0
fsk_en 114[10] 0 disabled, enabled
reg114_reserved1 114[11:15] 0xF
########################################################################
## address 115
########################################################################
reg115_reserved0 115[0:2] 0
fsk_dev_scale 115[3:7] 0
reg115_reserved1 115[8:15] 0
########################################################################
## address 116
########################################################################
fsk_dev0 116[0:15] 0
########################################################################
## address 117
########################################################################
fsk_dev1 117[0:15] 0
########################################################################
## address 118
########################################################################
fsk_dev2 118[0:15] 0
########################################################################
## address 119
########################################################################
fsk_dev3 119[0:15] 0
########################################################################
## address 120
########################################################################
fsk_dev4 120[0:15] 0
########################################################################
## address 121
########################################################################
fsk_dev5 121[0:15] 0
########################################################################
## address 122
########################################################################
fsk_dev6 122[0:15] 0
########################################################################
## address 123
########################################################################
fsk_dev7 123[0:15] 0
########################################################################
## address 124
########################################################################
fsk_spi_dev 124[0:15] 0
########################################################################
## address 125
########################################################################
reg125 125[0:16] 0x2288
"""
########################################################################
# Template for methods in the body of the struct
########################################################################
BODY_TMPL = """\
uint16_t get_reg(int 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 reg;
}
std::set<uint8_t> get_ro_regs()
{
return {107, 108, 109, 110, 111, 112, 113};
}
int get_num_regs()
{
return 126;
}
"""
PY_BODY_TMPL = """\
def get_reg(self, addr):
reg = 0
% for addr in sorted(set(map(lambda r: r.get_addr(), regs))):
<% if_state = 'if' if loop.index == 0 else 'elif' %>
${if_state} addr == ${addr}:
% for reg in filter(lambda r: r.get_addr() == addr, regs):
% if reg.get_enums():
reg |= (self.${reg.get_name()}.value & ${reg.get_mask()}) << ${reg.get_shift()}
% else:
reg |= (self.${reg.get_name()} & ${reg.get_mask()}) << ${reg.get_shift()}
% endif
% endfor
% endfor
return reg
"""
if __name__ == '__main__':
import common
common.generate(
name='lmx2572_regs',
regs_tmpl=REGS_TMPL,
body_tmpl=BODY_TMPL,
py_body_tmpl=PY_BODY_TMPL,
file=__file__,
)
|