OSDN Git Service

fb338a6013cbead984c25ce4847aade8723b2def
[fast-forth/master.git] / MSP430-FORTH / MSP_EXP430FR5994 / UARTI2CS.4TH
1 ; ----------------------------------------------------------------------
2 ; UARTI2CS.4th for MSP_EXP430FR5994
3 ; ----------------------------------------------------------------------
4
5 CODE ABORT_UARTI2CS
6 SUB #4,R15
7 MOV R14,2(R15)
8 MOV &$1812,R14
9 BIT #$7800,R14
10 0<> IF MOV #0,R14 THEN
11 MOV R14,0(R15)
12 MOV &$180E,R14
13 SUB #308,R14
14 COLON
15 $0D EMIT
16 ABORT" FastForth V3.8 please!"
17 ABORT" <-- Ouch! unexpected I2C_FastForth target!"
18 PWR_STATE
19 ;
20
21 ABORT_UARTI2CS
22
23 [DEFINED] {UARTI2CS} 
24 [IF] {UARTI2CS}
25 [THEN]
26
27 MARKER {UARTI2CS}
28 8 ALLOT
29
30 [UNDEFINED] CONSTANT [IF]
31 : CONSTANT 
32 CREATE
33 HI2LO
34 MOV R14,-2(R10)
35 MOV @R15+,R14
36 MOV @R1+,R13
37 MOV @R13+,R0
38 ENDCODE
39 [THEN]
40
41 $FFA2 CONSTANT I2CS_ADR
42
43 HDNCODE I2CSTOP
44 BIS.B #2,&$265
45 MOV R0,R0
46 BIS.B #4,&$265
47 MOV R0,R0
48 BIC.B #2,&$265
49 MOV R0,R0
50 BIC.B #4,&$265
51 MOV @R1+,R0
52 ENDCODE
53
54 HDNCODE STOP_U2I
55 BW1
56 CMP #$40AA,&{UARTI2CS}+8
57 0<> IF
58     CALL #I2CSTOP
59     MOV #6,R10
60     BIC.B R10,&$265
61     BIS.B R10,&$263
62     BIS.B R10,&$267
63     MOV #0,&$3C0
64     MOV #{UARTI2CS}+10,R10
65     MOV #$40AA,-2(R10)
66     MOV @R10+,&WARM+2
67     MOV @R10+,&$FFF0
68     MOV @R10+,&$FFF4
69     MOV #1,R14
70 THEN
71 MOV @R1+,R0
72 ENDCODE
73
74
75
76 HDNCODE U2I_TERM_INT
77 ADD #4,R1
78 MOV &{UARTI2CS}+16,R10
79 MOV #$1CE4,R11
80 MOV #$0D,R12
81 BEGIN
82     MOV.B &$5CC,R8
83     ADD #1,R11
84     MOV.B R8,-1(R11)
85     CMP.B R8,R12
86 0<> WHILE
87     CMP #0,R10
88     0= IF
89         BEGIN
90             BIT #2,&$5DC
91         0<> UNTIL
92         MOV.B R8,&$5CE
93     THEN
94     BEGIN
95         BIT #1,&$5DC
96     0<> UNTIL
97 REPEAT
98 CALL #$41C8
99 BEGIN
100     BIT #1,&$5DC
101 0<> UNTIL
102 BW2
103 MOV.B &$5CC,R12
104 MOV.B R12,0(R11)
105 BW3
106 BIS.B   #4,&$265
107 MOV.B   &I2CS_ADR,R9
108 MOV     #$1CE4,R8
109 MOV R0,R0
110 BIS.B   #2,&$265
111 BEGIN
112     MOV.B #8,R10
113     BEGIN
114         ADD.B R9,R9
115         U>= IF
116             BIC.B #4,&$265
117         ELSE
118             BIS.B #4,&$265
119         THEN
120         BIC.B #2,&$265
121         BEGIN
122             BIT.B #2,&$261
123         0<> UNTIL
124         BIS.B #2,&$265
125         SUB #1,R10
126     0= UNTIL
127     BIC.B #4,&$265
128     BIC.B #2,&$265
129     MOV R0,R0
130     BIT.B #4,&$261
131     BIS.B #2,&$265
132 0= WHILE
133     CMP R12,R11
134 0<> WHILE
135     MOV.B @R8+,R9
136     MOV R9,R11
137 REPEAT
138 THEN
139 GOTO FW1
140 ENDCODE
141
142
143 HDNCODE HALF_S_INT
144 ADD #4,R1
145 FW1
146 BW3
147 CMP #0,&$1812
148 0>= IF
149   MOV #%0001_0101_0110,&$3C0
150 ELSE
151   MOV #%0001_1101_0110,&$3C0
152 THEN
153 BEGIN
154     BIC.B #2,&$265
155     BIT #8,&$5CA
156     0<> ?GOTO BW1
157     BIS.B   #4,&$265
158     MOV.B   &I2CS_ADR,R8
159     BIS.B   #1,R8
160     $3C00 ,
161     BIS.B   #2,&$265
162     MOV.B #8,R10
163     BEGIN
164         ADD.B R8,R8
165         U>= IF
166            BIC.B #4,&$265
167         ELSE
168            BIS.B #4,&$265
169         THEN
170         BIC.B #2,&$265
171         MOV R0,R0
172         BIS.B #2,&$265
173         SUB #1,R10
174     0= UNTIL
175     BIC.B   #4,&$265
176     BIC.B   #2,&$265
177     BEGIN
178         BIT.B #2,&$261
179     0<> UNTIL
180     BIT.B   #4,&$261
181     BIS.B   #2,&$265
182     0<> IF
183         CALL #I2CSTOP
184         MOV #$4000,R0
185     THEN
186     BEGIN
187         BEGIN
188             BIC.B #4,&$265
189             MOV.B #8,R10
190             BEGIN
191                BIC.B #2,&$265
192                MOV R0,R0
193                BIT.B #4,&$261
194                BIS.B #2,&$265
195                ADDC.B R9,R9
196                SUB #1,R10
197             0= UNTIL
198             CMP.B #-1,R9
199             0= IF
200                 MOV #2,R9
201             THEN
202             CMP.B #8,R9
203         U>= WHILE
204             BEGIN
205                 BIT #2,&$5DC
206             0<> UNTIL
207             BIS.B #4,&$265
208             BIC.B #2,&$265
209             BEGIN
210                 BIT.B #2,&$261
211             0<> UNTIL
212             MOV.B R9,&$5CE
213             BIS.B #2,&$265
214         REPEAT
215         CMP.B #4,R9
216         U>= IF
217             MOV #0,&{UARTI2CS}+16
218             0= IF
219                 MOV #-1,&{UARTI2CS}+16
220             THEN
221             BIS.B #4,&$265
222         THEN
223         BIC.B #2,&$265
224         BEGIN
225             BIT.B #2,&$261
226         0<> UNTIL
227         BIT.B #4,&$261
228         BIS.B #2,&$265
229     0<> UNTIL
230     CMP.B #2,R9
231 U>= WHILE
232     0= IF
233         MOV #0,&{UARTI2CS}+16
234         CALL #$41C6
235         BEGIN
236             BIC #1,&$5DC
237             MOV &$1800,R8
238             BEGIN MOV #32,R10
239                 BEGIN SUB #1,R10
240                 0= UNTIL
241                 SUB #1,R8
242             0= UNTIL
243             BIT #1,&$5DC
244         0= UNTIL
245     THEN
246 REPEAT
247 CALL #I2CSTOP
248 CMP.B #1,R9
249 0= IF
250     MOV #$1CE4,R11
251     CALL #$41C6
252     BEGIN
253         BIT #1,&$5DC
254     0<> UNTIL
255     CALL #$41C8
256     GOTO BW2
257 THEN
258 MOV #$4000,R0
259 ENDCODE
260
261 HDNCODE INI_U2I
262 CALL &{UARTI2CS}+10
263 CMP #$0E,R14
264 0<> IF
265     CMP #$0A,R14
266     U>= ?GOTO BW1
267 THEN
268 BIT.B #$20,&$240
269 0= ?GOTO BW1
270 MOV #0,&$1808
271 MOV #$800,&$3D2
272 BIC.B #6,&$267
273 BIC.B #6,&$263
274 GOTO BW3
275 ENDCODE
276
277 : UARTI2CS
278 CR I2CS_ADR !
279 HI2LO
280 CMP #$40AA,&{UARTI2CS}+8
281 0= IF
282     MOV #STOP_U2I,&{UARTI2CS}+8
283     MOV &WARM+2,&{UARTI2CS}+10
284     MOV &$FFF0,&{UARTI2CS}+12
285     MOV &$FFF4,&{UARTI2CS}+14
286
287     MOV #0,&{UARTI2CS}+16
288     MOV #INI_U2I,&WARM+2
289     MOV #U2I_TERM_INT,&$FFF0
290     MOV #HALF_S_INT,&$FFF4
291
292 THEN
293 MOV #WARM,R0
294 ENDCODE           
295
296 RST_HERE ECHO
297 18 UARTI2CS     ; TERATERM(Alt-B) or I2C_Master($20+RST) to quit