-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathreceive.fs
166 lines (133 loc) · 2.42 KB
/
receive.fs
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
#require CRC16
#require PINDEBUG
#require ]C!
8500 CONSTANT CLOW
6500 CONSTANT CHIGH
\res MCU: STM8L
NVM
\res export CLK_HSICALR CLK_HSITRIMR CLK_HSIUNLCKR
#require 'IDLE
#require TSTAMP
VARIABLE RSTATE
VARIABLE RBUF 2 ALLOT
VARIABLE DAT
VARIABLE VAL
VARIABLE NEWVAL
VARIABLE TLOW
VARIABLE THIGH
: trim ( c -- )
CLK_HSITRIMR
[ $AC CLK_HSIUNLCKR ]C!
[ $35 CLK_HSIUNLCKR ]C!
C!
;
: fast ( -- )
CLK_HSICALR C@ 7 + trim
;
: normal ( -- )
CLK_HSICALR C@ trim
;
: slow ( -- )
CLK_HSICALR C@ 7 - trim
;
: PLL ( -- )
TLOW @ TSTAMP @ < IF
P2H
slow
ELSE THIGH @ TSTAMP @ < IF
P2L
P3L
normal
ELSE
P3H
fast
THEN
THEN
;
: rectask ( -- )
P1H
?RXP IF
PLL
( c ) RSTATE @ 3 AND SWAP
( n c ) OVER RBUF + ( n c a ) C!
( n ) 1+ RSTATE !
ELSE
0 RSTATE !
-1 RBUF C@ CRC16 ( n )
RBUF 1+ C@ CRC16 ( n )
255 AND RBUF 2+ C@ = IF RBUF @ ELSE -1 THEN
VAL ! RBUF @ DAT !
-1 NEWVAL !
THEN
P1L
;
: v NEWVAL @ IF 0 NEWVAL ! HEX val ? dat ? RBUF 2+ C@ . DECIMAL cr THEN ;
: s [ ' v ] LITERAL 'IDLE ! ;
: r 0 'IDLE ! ;
: init
CLOW TLOW !
CHIGH THIGH !
PINDEBUG
[ ' rectask ] LITERAL BG !
s
;
' init 'BOOT !
RAM
\\
#require CRC16
#require PINDEBUG
\res MCU: STM8L051
\res export TIM2_ARRH
#require TSTAMP
9750 CONSTANT BGFAST
9950 CONSTANT BGNORMAL
10150 CONSTANT BGSLOW
8500 CONSTANT CLOW
6500 CONSTANT CHIGH
NVM
#require 'IDLE
VARIABLE RSTATE
VARIABLE RBUF 2 ALLOT
VARIABLE DAT
VARIABLE VAL
VARIABLE TLOW
VARIABLE THIGH
VARIABLE NEWVAL
: sARR ( n -- ) TIM2_ARRH 2C! ;
: PLL ( -- )
TSTAMP @ TLOW OVER < IF
BGFAST sARR
ELSE THIGH < IF
BGNORMAL sARR
ELSE
BGSLOW sARR
THEN
THEN
;
: rectask ( -- )
P1H
?RXP IF
PLL
( c ) RSTATE @ 3 AND SWAP
( n c ) OVER RBUF + ( n c a ) C!
( n ) 1+ RSTATE !
ELSE
0 RSTATE !
-1 RBUF C@ CRC16 ( n )
RBUF 1+ C@ CRC16 ( n )
255 AND RBUF 2+ C@ = IF RBUF @ ELSE -1 THEN
VAL ! RBUF @ DAT !
-1 NEWVAL !
THEN
P1L
;
: v NEWVAL @ IF 0 NEWVAL ! HEX val ? dat ? RBUF 2+ C@ . DECIMAL cr THEN ;
: s [ ' v ] LITERAL 'IDLE ! ;
: r 0 'IDLE ! ;
: init
PINDEBUG
[ ' rectask ] LITERAL BG !
s
;
' init 'BOOT !
RAM