OSDN Git Service

f00d2d58486d41797d7a17e6efb5296ae5dd5eb1
[fast-forth/master.git] / MSP430-FORTH / CHNGBAUD.f
1 \ -*- coding: utf-8 -*-
2
3 ; ------------
4 ; CHNGBAUD.f
5 ; ------------
6 \
7 \ to see kernel options, download FastForthSpecs.f
8 \ FastForth kernel options: nothing
9 \
10 \ TARGET SELECTION
11 \ MSP_EXP430FR5739  MSP_EXP430FR5969    MSP_EXP430FR5994    MSP_EXP430FR6989
12 \ MSP_EXP430FR4133  MSP_EXP430FR2433    MSP_EXP430FR2355    CHIPSTICK_FR2433
13 \
14
15 PWR_STATE
16
17 [UNDEFINED] CONSTANT [IF]
18 \ https://forth-standard.org/standard/core/CONSTANT
19 \ CONSTANT <name>     n --                      define a Forth CONSTANT 
20 : CONSTANT 
21 DEFER
22 HI2LO
23 MOV @RSP+,IP
24 MOV #DOCON,-4(W)        \   CFA = DOCON
25 MOV TOS,-2(W)           \   PFA = n
26 MOV @PSP+,TOS
27 MOV @IP+,PC
28 ENDCODE
29 [THEN]
30
31 [UNDEFINED] BL [IF]
32 \ https://forth-standard.org/standard/core/BL
33 \ BL      -- char            an ASCII space
34 #32 CONSTANT BL
35 [THEN]
36
37 [UNDEFINED] SPACE [IF]
38 \ https://forth-standard.org/standard/core/SPACE
39 \ SPACE   --               output a space
40 : SPACE
41 BL EMIT ;
42 [THEN]
43
44 [UNDEFINED] R@ [IF]
45 \ https://forth-standard.org/standard/core/RFetch
46 \ R@    -- x     R: x -- x   fetch from return stack
47 CODE R@
48 SUB #2,PSP
49 MOV TOS,0(PSP)
50 MOV @RSP,TOS
51 MOV @IP+,PC
52 ENDCODE
53 [THEN]
54
55 [UNDEFINED] < [IF]
56 \ https://forth-standard.org/standard/core/less
57 \ <      n1 n2 -- flag        test n1<n2, signed
58 CODE <
59     SUB @PSP+,TOS   \ 1 TOS=n2-n1
60     S< ?GOTO FW1    \ 2 signed
61     0<> IF          \
62 BW1     MOV #-1,TOS \ 1 flag Z = 0
63     THEN
64     MOV @IP+,PC
65 ENDCODE
66
67 \ https://forth-standard.org/standard/core/more
68 \ >     n1 n2 -- flag         test n1>n2, signed
69 CODE >
70     SUB @PSP+,TOS   \ 2 TOS=n2-n1
71     S< ?GOTO BW1    \ 2 --> +5
72 FW1 AND #0,TOS      \ 1 flag Z = 1
73     MOV @IP+,PC
74 ENDCODE
75 [THEN]
76
77 [UNDEFINED] UM/MOD [IF]
78 \ https://forth-standard.org/standard/core/UMDivMOD
79 \ UM/MOD   udlo|udhi u1 -- r q   unsigned 32/16->r16 q16
80 CODE UM/MOD
81     PUSH #DROP      \
82     MOV #<#,X       \ X = addr of <#
83     ADD #8,X        \ X = addr of MUSMOD
84     MOV X,PC        \ execute MUSMOD then RET to DROP
85 ENDCODE
86 [THEN]
87
88 : MCLK.
89 0 1000 UM/MOD .
90 ;
91
92 : ESC #27 EMIT ;
93
94 : BAD_MHz
95     1 ABORT"  only for 1,4,8,16,24 MHz MCLK!"
96 ;
97
98 : BAD_SPEED
99 SPACE ESC ." [7m"   \ set reverse video
100 ." with MCLK = " MCLK. 1 ABORT" MHz? don't dream!"
101 ;
102
103 : <> = 0= ;
104
105 : CHNGBAUD                  \ only for 8, 16, 24 MHz
106 PWR_STATE                   \ to remove this created word (garbage collector)
107
108 42              \ number of terminal lines   
109 0 DO CR LOOP    \ don't erase any line of source
110
111 ESC ." [1J"     \ erase up (42 empty lines)
112 ESC ." [H"      \ cursor home
113
114 FREQ_KHZ @ >R               \ r-- target MCLCK frequency in MHz
115 ." target MCLK = " R@ MCLK. ." MHz" CR
116 ." choose your baudrate:" CR
117 ." 0 --> 6 MBds" CR
118 ." 1 --> 5 MBds" CR
119 ." 2 --> 4 MBds" CR      \ linux driver max speed
120 ." 3 --> 2457600 Bds" CR
121 ." 4 --> 921600 Bds" CR
122 ." 5 --> 460800 Bds" CR
123 ." 6 --> 230400 Bds" CR
124 ." 7 --> 115200 Bds" CR
125 ." other --> abort" CR
126 ." your choice: "
127 KEY
128
129 #48 - ?DUP 0=               \ select 6MBds ?
130 IF  ." 6 MBds"              \ add this to the current line
131     R@ #24000 <              \ < 24MHz ?
132     IF  R@ BAD_SPEED
133     THEN
134     R@ #24000 <>             \ 24 MHz ?
135     IF  BAD_MHz             \ no: --> abort
136     THEN                
137     $4                      \ TERM_BRW
138     $0                      \ TERM_MCTLW
139 ELSE 1 - ?DUP 0=            \ select 5MBds ?
140     IF  ." 5 MBds"
141         R@ #16000 <         \ < 16MHz ?
142         IF  R@ BAD_SPEED    \ abort
143         THEN
144         R@ #16000 =
145         IF  $3              \ TERM_BRW
146             $2100           \ TERM_MCTLW
147         ELSE R@ #24000 <>
148             IF  BAD_MHz
149             THEN
150             $4              \ TERM_BRW
151             $EE00           \ TERM_MCTLW
152         THEN
153     ELSE 1 - ?DUP 0=            \ select 4MBds ?
154         IF  ." 4 MBds"
155             R@ #16000 <
156             IF  R@ BAD_SPEED    \ abort
157             THEN
158             R@ #16000 =
159                 IF  $4          \ TERM_BRW
160                     $0          \ TERM_MCTLW
161                 ELSE R@ #24000 <>
162                     IF  BAD_MHz
163                     THEN
164                     $6          \ TERM_BRW
165                     $0          \ TERM_MCTLW
166                 THEN
167         ELSE 1 - ?DUP 0=            \ select 2457600 ?
168             IF  ." 2457600 Bds"
169                 R@ #8000 <           \ < 8MHz ?
170                 IF  R@ BAD_SPEED    \ abort
171                 THEN
172                 R@ #8000 =
173                 IF  $3              \ TERM_BRW
174                     $4400           \ TERM_MCTLW
175                 ELSE R@ #16000 =
176                     IF  $6          \ TERM_BRW
177                         $AA00       \ TERM_MCTLW
178                     ELSE R@ #24000 <>
179                         IF  BAD_MHz
180                         THEN
181                         $9          \ TERM_BRW
182                         $DD00       \ TERM_MCTLW
183                     THEN
184                 THEN
185             ELSE 1 - ?DUP 0=                \ select 921600 ?
186                 IF  ." 921600 Bds"
187                     R@ #4000 <
188                     IF  R@ BAD_SPEED        \ abort 
189                     THEN
190                     R@ #4000 =              \ 4MHz ?
191                     IF  4                   \ TERM_BRW
192                         $4900               \ TERM_MCTLW
193                     ELSE
194                         R@ #8000 =
195                         IF  8               \ TERM_BRW
196                             $D600           \ TERM_MCTLW
197                         ELSE R@ #16000 =
198                             IF  $11         \ TERM_BRW
199                                 $4A00       \ TERM_MCTLW
200                             ELSE R@ #24000 <>
201                                 IF  BAD_MHz
202                                 THEN
203                                 $1          \ TERM_BRW
204                                 $00A1       \ TERM_MCTLW
205                             THEN
206                         THEN
207                     THEN
208                 ELSE 1 - ?DUP 0=                \ select 230400 ?
209                     IF  ." 460800 Bds"
210                         R@ #4000 <
211                         IF  R@ BAD_SPEED        \ abort 
212                         THEN
213                         R@ #4000  =
214                         IF  8                  \ TERM_BRW
215                             $D600               \ TERM_MCTLW
216                         ELSE
217                             R@ #8000  =
218                             IF  17               \ TERM_BRW
219                                 $4A00           \ TERM_MCTLW
220                             ELSE R@ #16000 =
221                                 IF  2           \ TERM_BRW
222                                     $BB21       \ TERM_MCTLW
223                                 ELSE R@ #24000 <>
224                                     IF  BAD_MHz
225                                     THEN
226                                     6           \ TERM_BRW
227                                     $0001       \ TERM_MCTLW
228                                 THEN
229                             THEN
230                         THEN
231                     ELSE 1 - ?DUP 0=                \ select 230400 ?
232                         IF  ." 230400 Bds"
233                             R@ #1000 <
234                             IF  R@ BAD_SPEED        \ abort 
235                             THEN
236                             R@ #1000 =
237                             IF  4
238                                 $4900
239                             ELSE
240                                 R@ #4000  =
241                                 IF  17                  \ TERM_BRW
242                                     $4A00               \ TERM_MCTLW
243                                 ELSE
244                                     R@ #8000  =
245                                     IF  2               \ TERM_BRW
246                                         $BB21           \ TERM_MCTLW
247                                     ELSE R@ #16000 =
248                                         IF  4           \ TERM_BRW
249                                             $5551       \ TERM_MCTLW
250                                         ELSE R@ #24000 <>
251                                             IF  BAD_MHz
252                                             THEN
253                                             3           \ TERM_BRW
254                                             $0241       \ TERM_MCTLW
255                                         THEN
256                                     THEN
257                                 THEN
258                             THEN
259                         ELSE 1 - ?DUP 0=                \ select 115200 ?
260                             IF  ." 115200 Bds"
261                                 R@ #1000  =
262                                 IF  8
263                                     $D600
264                                 ELSE
265                                     R@ #4000  =
266                                     IF  2                   \ TERM_BRW
267                                         $BB21               \ TERM_MCTLW
268                                     ELSE
269                                         R@ #8000  =
270                                         IF  4               \ TERM_BRW
271                                             $5551           \ TERM_MCTLW
272                                         ELSE R@ #16000 =
273                                             IF  8           \ TERM_BRW
274                                                 $F7A1       \ TERM_MCTLW
275                                             ELSE R@ #24000 <>
276                                                 IF  BAD_MHz
277                                                 THEN
278                                                 $0D         \ TERM_BRW
279                                                 $4901       \ TERM_MCTLW
280                                             THEN
281                                         THEN
282                                     THEN
283                                 THEN
284                             ELSE                    \ other selected 
285                                 ." abort" CR ABORT
286                             THEN
287                         THEN
288                     THEN
289                 THEN
290             THEN
291         THEN
292     THEN
293 THEN
294 TERMMCTLW_RST !             \ set UCAxMCTLW value in FRAM
295 TERMBRW_RST !               \ set UCAxBRW value in FRAM
296 R> DROP                     \ clear stacks
297 CR ESC ." [7m"              \ escape sequence to set reverse video
298 ." Change baudrate in Teraterm, save its setup then reset target."
299 ;
300
301 ECHO CHNGBAUD