OSDN Git Service

4abc21f7378a2ae5ef4bce9380eadb57fbf93832
[fast-forth/master.git] / MSP430-FORTH / SD_430FR5994 / UARTI2CS.4TH
1
2 ; ---------------------------------------------------------
3 ; UARTI2CS.4th for MSP_EXP430FR5994
4 ; ---------------------------------------------------------
5
6     CODE ABORT_UARTI2CS
7     SUB #4,R15
8     MOV R14,2(R15)
9     MOV &$180E,R14
10     BIT #$3C00,R14
11     0<> IF MOV #0,R14 THEN
12     MOV R14,0(R15)
13     MOV &$180A,R14
14     SUB #309,R14
15     COLON
16     $0D EMIT
17     ABORT" FastForth V3.9 please!"
18     ABORT" <-- Ouch! unexpected I2C_FastForth target!"
19     RST_RET
20     ;
21
22     ABORT_UARTI2CS
23
24     MARKER {UARTI2CS}
25     10 ALLOT
26
27     [UNDEFINED] TSTBIT  
28     [IF]
29     CODE TSTBIT
30     MOV @R15+,R9
31     AND @R9,R14
32     MOV @R13+,R0
33     ENDCODE
34     [THEN]
35
36     HDNCODE I2CM_STOP
37     BIS.B #2,&$265
38     MOV R0,R0
39     BIS.B #4,&$265
40     MOV R0,R0
41     BIC.B #2,&$265
42     MOV R0,R0
43     BIC.B #4,&$265
44     MOV @R1+,R0
45     ENDCODE
46
47     CODE REMOVE_U2I
48 BW1
49     BIC.B #1,&$202
50     BIC.B #1,&$204
51     BIC.B #2,&$202
52     BIC.B #2,&$204
53     CALL #I2CM_STOP
54     MOV #6,R10
55     BIC.B R10,&$265
56     BIS.B R10,&$263
57     BIS.B R10,&$267
58     MOV #0,&$3C0
59     MOV #0,&$3C6
60     BIC.B #$80,&$20C
61     BIC.B #$80,&$204
62     BIC.B #$40,&$21A
63     CMP #$4082,&{UARTI2CS}-2
64     0<> IF
65         MOV #{UARTI2CS},R10
66         MOV #$4082,-2(R10)
67         MOV @R10+,&$183E
68         MOV @R10+,&$1840
69         MOV @R10+,&$FFF0
70         MOV @R10+,&$FFDE
71     THEN
72     MOV #1,R14
73     MOV #UART_WARM+4,R0
74     ENDCODE
75
76     HDNCODE I2CM_START
77     BIS.B   #4,&$265
78     BIS.B   &{UARTI2CS}+8,R9
79     MOV R0,R0
80     BIS.B   #2,&$265
81     MOV.B #8,R10
82     BEGIN
83         ADD.B R9,R9
84         U>= IF
85             BIC.B #4,&$265
86         ELSE
87             BIS.B #4,&$265
88         THEN
89         BIC.B #2,&$265
90         BIT.B #4,&$261
91         BIS.B #2,&$265
92         0= IF
93             BIT.B #4,&$265
94             0= IF
95                 BIS.B #6,&$265
96                 BIC.B #6,&I2CSM_IES
97                 BEGIN
98                     BIT.B #6,&I2CSM_IFG
99                     BIC.B #6,&I2CSM_IFG
100                     0<> IF
101                         MOV #9,R10
102                     ELSE
103                         $3C00 ,
104                         $3C00 ,
105                     THEN
106                 SUB #1,R10
107                 0= UNTIL
108                 ADD #2,R1
109                 MOV @R1+,R0
110             THEN
111         THEN
112         SUB #1,R10
113     0= UNTIL
114     BIC.B #4,&$265
115     BIC.B #2,&$265
116     BEGIN
117         BIT.B #2,&$261
118     0<> UNTIL
119     BIT.B #4,&$261
120     BIS.B #2,&$265
121     MOV @R1+,0(R1)
122     MOV @R1+,R0
123     ENDCODE
124
125
126     HDNCODE U2I_TERM_INT
127     ADD #4,R1
128     BEGIN
129         MOV.B &$5CC,R8
130         MOV.B R8,$1CE4(R11)
131         ADD #1,R11
132         CMP.B R8,R12
133     0<> WHILE
134         CMP #4,R10
135         0<> IF
136             BEGIN
137                 BIT #2,&$5DC
138             0<> UNTIL
139             MOV.B R8,&$5CE
140         THEN
141         BEGIN
142             BIT #1,&$5DC
143         0<> UNTIL
144     REPEAT
145     CALL #ACCEPT+$2A
146     BEGIN
147         BIT #1,&$5DC
148     0<> UNTIL
149 BW2
150     MOV.B &$5CC,R12
151     MOV.B R12,$1CE4(R11)
152     PUSH R0
153     MOV #0,R9
154     CALL #I2CM_START
155     0<> ?GOTO FW2
156     BIS.B #1,&$202
157     MOV #$1CE4,R8
158     BEGIN
159         MOV.B @R8,R9
160         MOV.B #8,R10
161         BEGIN
162             ADD.B R9,R9
163             U>= IF
164                 BIC.B #4,&$265
165             ELSE
166                 BIS.B #4,&$265
167             THEN
168             BIC.B #2,&$265
169             MOV R0,R0
170             BIS.B #2,&$265
171             SUB #1,R10
172         0= UNTIL
173         BIC.B #4,&$265
174         BIC.B #2,&$265
175         BEGIN
176             BIT.B #2,&$261
177         0<> UNTIL
178         BIT.B #4,&$261
179         BIS.B #2,&$265
180     0= WHILE
181         CMP.B @R8+,R12
182     0= UNTIL
183     THEN
184     BIC.B #1,&$202
185     GOTO FW1
186     ENDCODE
187
188     HDNCODE 500MS_INT
189     ADD #4,R1
190 FW1
191 FW2
192     PUSH R0
193     BEGIN
194         BIT #8,&$5CA
195         0<> ?GOTO BW1
196         BIT.B #$20,&$240
197         0= ?GOTO BW1
198         BIC.B #2,&$265
199         MOV #1,R9
200             CALL #I2CM_START
201         0<> IF
202             CALL #I2CM_STOP
203             MOV #'.',&$5CE
204             MOV #$4000,R0
205         THEN
206         BIS.B #2,&$202
207         BEGIN
208             BEGIN
209                 BIC.B #4,&$265
210                 MOV.B #8,R10
211                 BEGIN
212                     BIC.B #2,&$265
213                     BIT.B #4,&$261
214                     BIS.B #2,&$265
215                     ADDC.B R9,R9
216                     SUB #1,R10
217                 0= UNTIL
218                 CMP.B #-1,R9
219                 0= IF
220                     MOV #2,R9
221                 THEN
222                 CMP.B #8,R9
223             U>= WHILE
224                 BIS.B #4,&$265
225                 BIC.B #2,&$265
226                 BEGIN
227                     BIT.B #2,&$261
228                 0<> UNTIL
229                 BIS.B #2,&$265
230                 BEGIN
231                     BIT #2,&$5DC
232                 0<> UNTIL
233                 MOV.B R9,&$5CE
234             REPEAT
235             CMP.B #4,R9
236             U>= IF
237                 MOV.B R9,&{UARTI2CS}+9
238                 BIS.B #4,&$265
239             THEN
240             BIC.B #2,&$265
241             BEGIN
242                 BIT.B #2,&$261
243             0<> UNTIL
244             BIT.B #4,&$261
245             BIS.B #2,&$265
246         0<> UNTIL
247         CMP.B #2,R9
248     U>= WHILE
249         0= IF
250             MOV.B #0,&{UARTI2CS}+9
251             CALL #KEY+$8
252             BEGIN
253                 BIC #1,&$5DC
254                 MOV &$1800,R9
255                BEGIN MOV #65,R10
256                    BEGIN SUB #1,R10
257                    0= UNTIL
258                    SUB #1,R9
259                0= UNTIL
260                 BIT #1,&$5DC
261             0= UNTIL
262         THEN    
263     REPEAT
264     CALL #I2CM_STOP
265     BIC.B #2,&$202
266     CMP.B #0,R9
267     0= IF
268         MOV #$4000,R0
269     THEN
270     CALL #KEY+$8
271     BEGIN
272         BIT #1,&$5DC
273     0<> UNTIL
274     CALL #ACCEPT+$2A
275     MOV #0,R11
276     GOTO BW2
277     ENDCODE
278
279     HDNCODE SLEEP_U2I
280     $180E $4000 TSTBIT
281     [IF]    MOV #%1_1001_0100,&$3C0 ; if ACLK=LFXTAL
282     [ELSE]  MOV #%1_0001_0100,&$3C0 ; if ACLK=VLO
283     [THEN]
284     MOV.B &{UARTI2CS}+9,R10
285     MOV #$0D,R12
286     MOV #0,R11
287     BIC #$40,&$21C
288     MOV &{UARTI2CS}+2,R0
289     ENDCODE
290
291     HDNCODE INIT_U2I
292     MOV #4096,&$3D2
293     MOV #$60,&$3C6
294     MOV #4095,&$3D6
295     BIS.B #$80,&$204
296     BIS.B #$80,&$20C
297     BIS.B #$40,&$21A  
298     BIC.B #6,&$267
299     BIC.B #6,&$263
300     BIS.B #1,&$204
301     BIS.B #2,&$204
302     CALL &{UARTI2CS}
303     CMP #$0E,R14
304     0<> IF
305         CMP #$0A,R14
306         U>= ?GOTO BW1
307     THEN
308     BIS.B #$40,&$21C
309     MOV #ALLOT+$8,R0
310     ENDCODE
311
312     : UARTI2CS
313     $0D EMIT $0A EMIT
314     HI2LO
315     MOV @R1+,R13
316     BEGIN
317         BIT #1,&$5CA
318     0= UNTIL
319     CMP #$4082,&{UARTI2CS}-2
320     0= IF
321         MOV #REMOVE_U2I,&{UARTI2CS}-2
322         MOV &$183E,&{UARTI2CS}
323         MOV &$1840,&{UARTI2CS}+2
324         MOV &$FFF0,&{UARTI2CS}+4
325         MOV &$FFDE,&{UARTI2CS}+6
326         MOV R14,&{UARTI2CS}+8
327     THEN
328     MOV #0,R14
329     MOV #INIT_U2I,&$183E
330     MOV #SLEEP_U2I,&$1840
331     MOV #U2I_TERM_INT,&$FFF0
332     MOV #500MS_INT,&$FFDE
333     MOV #INIT_U2I,R0
334     ENDCODE
335
336     RST_SET ECHO    
337
338     $12 UARTI2CS   ; TERATERM(Alt-B) or USB_to_I2C_bridge(SW2) to quit