13
13
14
14
# For IP940
15
15
CLOCK = 33333333
16
- OVERSAMPLE = 16
17
16
PRE_FRAC = 8
18
17
18
+ rate_list = [
19
+ 921600 ,
20
+ 460800 ,
21
+ 230400 ,
22
+ 115200 ,
23
+ 153600 ,
24
+ 78600 ,
25
+ 57600 ,
26
+ 38400 ,
27
+ 19200 ,
28
+ 9600 ,
29
+ 4800 ,
30
+ 3600 ,
31
+ 2400 ,
32
+ 2000 ,
33
+ 1800 ,
34
+ 1200 ,
35
+ 600 ,
36
+ 300 ,
37
+ ]
38
+
39
+ oversample_list = [
40
+ 16
41
+ ]
42
+
19
43
20
44
class Target :
21
45
def __init__ (self , rate ):
@@ -35,9 +59,10 @@ def consider(self, sc, divisor, prescaler):
35
59
def __str__ (self ):
36
60
if self .best_error == self .rate :
37
61
return f"{ self .rate } : not available"
38
- return (f"{ self .rate :10d} : "
39
- f"sc { self .sc } divisor { self .divisor >> 8 } ,{ self .divisor % 256 } prescaler { self .prescaler } "
40
- f"=> { self .best_rate } error { self .best_error } / { self .best_error / self .rate * 100 :.2f} %" )
62
+ # return (f"{self.rate:10d}: "
63
+ # f"TCR {self.sc % 16:#04x} DLx {self.divisor >> 8:#04x},{self.divisor % 256:#04x} CPR {self.prescaler:#04x} "
64
+ # f"=> {self.best_rate} error {self.best_error} / {self.best_error / self.rate * 100:.2f}%")
65
+ return (f"B{ self .rate } , { self .prescaler :#04x} , { self .divisor >> 8 :#04x} , { self .divisor & 0xff :#04x} , { self .sc & 0xf :#04x} " )
41
66
42
67
43
68
def integer_sqrt (n ):
@@ -50,19 +75,21 @@ def integer_sqrt(n):
50
75
51
76
52
77
def guess (target ):
53
- n = (CLOCK * PRE_FRAC ) // (target .rate * OVERSAMPLE )
54
- lf = integer_sqrt (n )
55
- while lf > 0 :
56
- hf = n // lf
57
- if (lf >= 8 ) and (lf < 256 ):
58
- target .consider (OVERSAMPLE , hf , lf )
59
- target .consider (OVERSAMPLE , hf + 1 , lf )
60
- elif (hf >= 8 ) and (hf < 256 ):
61
- target .consider (OVERSAMPLE , lf , hf )
62
- target .consider (OVERSAMPLE , lf , hf + 1 )
63
- lf -= 1
78
+ for oversample in oversample_list :
79
+ n = (CLOCK * PRE_FRAC ) // (target .rate * oversample )
80
+ lf = integer_sqrt (n )
81
+ while lf > 0 :
82
+ hf = n // lf
83
+ if (lf >= 8 ) and (lf < 256 ):
84
+ target .consider (oversample , hf , lf )
85
+ target .consider (oversample , hf + 1 , lf )
86
+ elif (hf >= 8 ) and (hf < 256 ):
87
+ target .consider (oversample , lf , hf )
88
+ target .consider (oversample , lf , hf + 1 )
89
+ lf -= 1
64
90
65
91
66
- for target in [Target (9600 ), Target (115200 ), Target (2062500 )]:
92
+ for rate in rate_list :
93
+ target = Target (rate )
67
94
guess (target )
68
95
print (target )
0 commit comments