OSDN Git Service

V161
[fast-forth/master.git] / TERMINALBAUDRATE.asm
1
2 ; TERM alias eUSCI_Ax : select baudrate versus frequency
3     .IF FREQUENCY = 0.25
4         .SWITCH TERMINALBAUDRATE
5
6         .CASE 9600
7 ; Configure UART0 @ 38400 bauds / 1MHz
8 ; N=1000000/38400=26.04166... ==> UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=int(frac(N/16)*16)=10, UCBRS0= fn(frac(N))=fn(0.04166)=0x00
9 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
10             MOV     #1,    &TERMBRW
11             MOV.W   #00A1h, &TERMMCTLW
12
13         .CASE 19200  ; PL2303TA baudrate
14 ; Configure UART0 @ 38400 bauds / 500kHz
15 ; N=500000/38400=13.20833 ==> UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.20833)=0x11
16 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
17             MOV     #13,     &TERMBRW
18             MOV.W   #1100h,&TERMMCTLW
19
20         .CASE 31250  ; MIDI interface
21 ; Configure UART0 @ 31250 bauds / 250kHz
22 ; N=250000/31250=8 ==> UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0)=0
23 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
24             MOV     #8,     &TERMBRW
25             MOV.W   #0000h,&TERMMCTLW
26
27         .CASE 38400
28 ; Configure UART0 @ 38400 bauds / 250kHz
29 ; N=250000/38400=6.5124166... ==> UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.512416)=0xAA
30 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
31             MOV     #6,     &TERMBRW
32             MOV.W   #0AA00h,&TERMMCTLW
33
34         .CASE 57600  ; PL2303TA baudrate
35 ; Configure UART0 @ 57600 bauds / 250kHz
36 ; N=250000/57600=4.340277.. ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.340277)=0x49
37 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
38             MOV     #4,     &TERMBRW
39             MOV.W   #04900h,&TERMMCTLW
40
41         .ELSECASE
42             .error "UART0 / 250 kHz : baudrate not implemented"
43         .ENDCASE
44
45
46     .ELSEIF FREQUENCY = 0.5
47         .SWITCH TERMINALBAUDRATE
48         .CASE 9600
49 ; Configure UART0 @ 19200 bauds / 1MHz
50 ; N=1000000/19200=52.0833... ==> UCOS16=1, UCBR0=int(N/16)=3, UCBRF0=int(frac(N/16)*16)=4, UCBRS0= fn(frac(N))=fn(0.0833)=0x02
51 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
52             MOV     #3,    &TERMBRW
53             MOV.W   #0241h,&TERMMCTLW
54
55         .CASE 19200
56 ; Configure UART0 @ 38400 bauds / 1MHz
57 ; N=1000000/38400=26.04166... ==> UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=int(frac(N/16)*16)=10, UCBRS0= fn(frac(N))=fn(0.04166)=0x00
58 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
59             MOV     #1,    &TERMBRW
60             MOV.W   #00A1h, &TERMMCTLW
61
62         .CASE 31250  ; MIDI interface
63 ; Configure UART0 @ 31250 bauds / 500kHz
64 ; N=500000/31250=16 ==> UCOS16=0, UCBR0=int(N)=16, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0)=0
65 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
66             MOV     #16,     &TERMBRW
67             MOV.W   #0000h,&TERMMCTLW
68
69         .CASE 38400  ; PL2303TA baudrate
70 ; Configure UART0 @ 38400 bauds / 500kHz
71 ; N=500000/38400=13.20833 ==> UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.20833)=0x11
72 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
73             MOV     #13,     &TERMBRW
74             MOV.W   #1100h,&TERMMCTLW
75
76         .CASE 57600
77 ; Configure UART0 @ 115200 bauds / 1MHz
78 ; N=1000000/115200=8.68055... ==> UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.68055)=0xD6
79 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
80             MOV     #8,     &TERMBRW
81             MOV.W   #0D600h,&TERMMCTLW
82
83         .CASE 100800  ; PL2303TA baudrate
84 ; Configure UART0 @ 201600 bauds / 1MHz
85 ; N=1000000/201600=4.955401 ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.200396)=0xFE
86 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
87             MOV     #4,     &TERMBRW
88             MOV.W   #0FE00h,&TERMMCTLW
89
90         .CASE 115200
91 ; Configure UART0 @ 230400 bauds / 1MHz
92 ; N=1000000/230400=4.34027... ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.340277)=0x49
93 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
94             MOV     #4,     &TERMBRW
95             MOV.W   #04900h,&TERMMCTLW
96
97         .CASE 134400  ; PL2303TA baudrate
98 ; Configure UART0 @ 268800 bauds / 1MHz
99 ; N=1000000/134400=3.72024 ==> UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.72024)=0xBB
100 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
101             MOV     #3,     &TERMBRW
102             MOV.W   #0BB00h,&TERMMCTLW
103
104 ;        .CASE 161280  ; PL2303TA baudrate
105 ;; Configure UART0 @ 161280 bauds / 500kHz
106 ;; N=500000/161280=3.100198 ==> UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.100198)=0x08
107 ;; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
108 ;            MOV     #3,     &TERMBRW
109 ;            MOV.W   #01100h,&TERMMCTLW
110
111         .ELSECASE
112             .error "UART0 / 500 kHz : baudrate not implemented"
113         .ENDCASE
114
115
116     .ELSEIF FREQUENCY = 1
117         .SWITCH TERMINALBAUDRATE
118         .CASE 9600
119 ; Configure UART0 @ 9600 bauds / 1MHz
120 ; N=1000000/9600=104.166... ==> UCOS16=1, UCBR0=int(N/16)=6, UCBRF0=int(frac(N/16)*16)=8, UCBRS0= fn(frac(N))=fn(0.1666)=0x20
121 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
122             MOV     #6,    &TERMBRW
123             MOV     #2081h, &TERMMCTLW
124
125         .CASE 19200
126 ; Configure UART0 @ 19200 bauds / 1MHz
127 ; N=1000000/19200=52.0833... ==> UCOS16=1, UCBR0=int(N/16)=3, UCBRF0=int(frac(N/16)*16)=4, UCBRS0= fn(frac(N))=fn(0.0833)=0x02
128 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
129             MOV     #3,    &TERMBRW
130             MOV.W   #0241h,&TERMMCTLW
131
132         .CASE 31250  ; MIDI interface
133 ; Configure UART0 @ 31250 bauds / 1MHz
134 ; N=1000000/31250=32 ==> UCOS16=1, UCBR0=int(N/16)=2, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0)=0
135 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
136             MOV     #2,     &TERMBRW
137             MOV.W   #0001h,&TERMMCTLW
138
139         .CASE 38400
140 ; Configure UART0 @ 38400 bauds / 1MHz
141 ; N=1000000/38400=26.04166... ==> UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=int(frac(N/16)*16)=10, UCBRS0= fn(frac(N))=fn(0.04166)=0x00
142 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
143             MOV     #1,    &TERMBRW
144             MOV.W   #00A1h, &TERMMCTLW
145
146         .CASE 57600
147 ; Configure UART0 @ 57600 bauds / 1MHz
148 ; N=1000000/57600=17.301... ==> UCOS16=0, UCBR0=int(N)=17, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.301)=0x4A
149 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
150             MOV     #17,     &TERMBRW
151             MOV.W   #04A00h,&TERMMCTLW
152
153         .CASE 100800  ; PL2303TA baudrate
154 ; Configure UART0 @ 100800 bauds / 1MHz
155 ; N=1000000/100800=9,920634 ==> UCOS16=0, UCBR0=int(N)=9, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.920634)=0xFD
156 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
157             MOV     #9,     &TERMBRW
158             MOV.W   #0FD00h,&TERMMCTLW
159
160         .CASE 115200
161 ; Configure UART0 @ 115200 bauds / 1MHz
162 ; N=1000000/115200=8.68055... ==> UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.68055)=0xD6
163 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
164             MOV     #8,     &TERMBRW
165             MOV.W   #0D600h,&TERMMCTLW
166
167         .CASE 134400  ; PL2303TA baudrate
168 ; Configure UART0 @ 134400 bauds / 1MHz
169 ; N=1000000/134400=7.440476 ==> UCOS16=0, UCBR0=int(N)=7, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.440476)=0x55
170 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
171             MOV     #7,     &TERMBRW
172             MOV.W   #05500h,&TERMMCTLW
173
174         .CASE 161280  ; PL2303TA baudrate
175 ; Configure UART0 @ 161280 bauds / 1MHz
176 ; N=1000000/161280=6.200396 ==> UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.200396)=0x11
177 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
178             MOV     #6,     &TERMBRW
179             MOV.W   #01100h,&TERMMCTLW
180
181         .CASE 201600  ; PL2303TA baudrate
182 ; Configure UART0 @ 201600 bauds / 1MHz
183 ; N=1000000/201600=4.955401 ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.200396)=0xFE
184 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
185             MOV     #4,     &TERMBRW
186             MOV.W   #0FE00h,&TERMMCTLW
187
188         .CASE 230400
189 ; Configure UART0 @ 230400 bauds / 1MHz
190 ; N=1000000/230400=4.34027... ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.340277)=0x49
191 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
192             MOV     #4,     &TERMBRW
193             MOV.W   #04900h,&TERMMCTLW
194
195         .CASE 250000  ; DMX interface
196 ; Configure UART0 @ 250000 bauds / 1MHz
197 ; N=1000000/250000=4 ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0)=0
198 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
199             MOV     #4,     &TERMBRW
200             MOV.W   #0000h,&TERMMCTLW
201
202         .CASE 268800  ; PL2303TA baudrate
203 ; Configure UART0 @ 268800 bauds / 1MHz
204 ; N=1000000/268800=3.72024 ==> UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.72024)=0xBB
205 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
206             MOV     #3,     &TERMBRW
207             MOV.W   #0BB00h,&TERMMCTLW
208
209 ;        .CASE 403200  ; PL2303TA baudrate
210 ;; Configure UART0 @ 403200 bauds / 1MHz
211 ;; N=1000000/403200=2.48016 ==> UCOS16=0, UCBR0=int(N)=2, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.48016)=0x55
212 ;; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
213 ;            MOV     #2,     &TERMBRW
214 ;            MOV.W   #05500h,&TERMMCTLW
215
216
217         .ELSECASE
218             .error "UART0 / 1 MHz : baudrate not implemented"
219         .ENDCASE
220
221     .ELSEIF FREQUENCY = 2
222         .SWITCH TERMINALBAUDRATE
223         .CASE 9600
224 ; Configure UART0 @ 19200 bauds / 4MHz
225 ; N=4000000/38400=208.333... ==> UCOS16=1, UCBR0=int(N/16)=13, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0.33333)=0x49
226 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
227             MOV     #13,    &TERMBRW
228             MOV.W   #4901h, &TERMMCTLW
229
230         .CASE 19200
231 ; Configure UART0 @ 9600 bauds / 1MHz
232 ; N=1000000/9600=104.166... ==> UCOS16=1, UCBR0=int(N/16)=6, UCBRF0=int(frac(N/16)*16)=8, UCBRS0= fn(frac(N))=fn(0.1666)=0x20
233 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
234             MOV     #6,    &TERMBRW
235             MOV     #2081h, &TERMMCTLW
236
237         .CASE 31250  ; MIDI interface
238 ; Configure UART0 @ 31250 bauds / 2MHz
239 ; N=2000000/31250=64 ==> UCOS16=1, UCBR0=int(N/16)=4, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0)=0
240 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
241             MOV     #4,     &TERMBRW
242             MOV.W   #0001h,&TERMMCTLW
243
244         .CASE 38400
245 ; Configure UART0 @ 19200 bauds / 1MHz
246 ; N=1000000/19200=52.0833... ==> UCOS16=1, UCBR0=int(N/16)=3, UCBRF0=int(frac(N/16)*16)=4, UCBRS0= fn(frac(N))=fn(0.0833)=0x02
247 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
248             MOV     #3,    &TERMBRW
249             MOV.W   #0241h,&TERMMCTLW
250
251         .CASE 57600
252 ; Configure UART0 @ 115200 bauds / 4MHz
253 ; N=8000000/230400=34.7222... ==> UCOS16=1, UCBR0=int(N/16)=2, UCBRF0=int(frac(N/16)*16)=2, UCBRS0= fn(frac(N))=fn(0.72222)=0xBB
254 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
255             MOV     #2,     &TERMBRW
256             MOV.W   #0BB21h,&TERMMCTLW
257
258         .CASE 115200
259 ; Configure UART0 @ 57600 bauds / 1MHz
260 ; N=1000000/57600=17.301... ==> UCOS16=0, UCBR0=int(N)=17, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.301)=0x4A
261 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
262             MOV     #17,     &TERMBRW
263             MOV.W   #04A00h,&TERMMCTLW
264
265         .CASE 230400
266 ; Configure UART0 @ 115200 bauds / 1MHz
267 ; N=1000000/115200=8.68055... ==> UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.68055)=0xD6
268 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
269             MOV     #8,     &TERMBRW
270             MOV.W   #0D600h,&TERMMCTLW
271
272         .CASE 250000  ; DMX interface
273 ; Configure UART0 @ 250000 bauds / 2MHz
274 ; N=2000000/250000=8 ==> UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0)=0
275 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
276             MOV     #8,     &TERMBRW
277             MOV.W   #0000h,&TERMMCTLW
278
279         .CASE 268800  ; PL2303TA baudrate
280 ; Configure UART0 @ 134400 bauds / 1MHz
281 ; N=1000000/134400=7.440476 ==> UCOS16=0, UCBR0=int(N)=7, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.440476)=0x55
282 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
283             MOV     #7,     &TERMBRW
284             MOV.W   #05500h,&TERMMCTLW
285
286         .CASE 403200  ; PL2303TA baudrate
287 ; Configure UART0 @ 201600 bauds / 1MHz
288 ; N=1000000/201600=4.955401 ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.200396)=0xFE
289 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
290             MOV     #4,     &TERMBRW
291             MOV.W   #0FE00h,&TERMMCTLW
292
293         .CASE 460800 ; CP2102 baudrate (with programming)
294 ; Configure UART0 @ 921600 bauds / 4MHz
295 ; N = 4000000/460800 = 4.34027... ==> {UCOS16=0, UCBR1=int(N)=4, UCBRF1=dont_care=0  UCBRS1=fn(frac(N))=fn(0.34027)=0x49
296 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
297              MOV     #4,     &TERMBRW
298              MOV.W   #04900h,&TERMMCTLW
299
300         .CASE 614400 ; PL2303TA baudrate
301 ; Configure UART0 @ 2457600 bauds / 8MHz
302 ; N = 8000000/2457600 = 3.25521... ==> {UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.25521)=0x44
303 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
304              MOV     #3,     &TERMBRW
305              MOV.W   #04400h,&TERMMCTLW
306
307 ;        .CASE 806400  ; PL2303TA baudrate
308 ;; Configure UART0 @ 403200 bauds / 1MHz
309 ;; N=1000000/403200=2.48016 ==> UCOS16=0, UCBR0=int(N)=2, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.48016)=0x55
310 ;; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
311 ;            MOV     #2,     &TERMBRW
312 ;            MOV.W   #05500h,&TERMMCTLW
313
314
315         .ELSECASE
316             .error "UART0 / 2 MHz : baudrate not implemented"
317         .ENDCASE
318
319     .ELSEIF FREQUENCY = 4
320         .SWITCH TERMINALBAUDRATE
321         .CASE 9600
322 ; Configure UART0 @ 9600 bauds / 4MHz
323 ; N=4000000/19200=416.666... ==> UCOS16=1, UCBR0=int(N/16)=26, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0.66666)=0xD6
324 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
325             MOV     #26,    &TERMBRW
326             MOV.W   #0D601h,&TERMMCTLW
327
328         .CASE 19200
329 ; Configure UART0 @ 19200 bauds / 4MHz
330 ; N=4000000/38400=208.333... ==> UCOS16=1, UCBR0=int(N/16)=13, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0.33333)=0x49
331 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
332             MOV     #13,    &TERMBRW
333             MOV.W   #4901h, &TERMMCTLW
334
335         .CASE 31250  ; MIDI interface
336 ; Configure UART0 @ 31250 bauds / 4MHz
337 ; N=4000000/31250=128 ==> UCOS16=1, UCBR0=int(N/16)=8, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0)=0
338 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
339             MOV     #8,     &TERMBRW
340             MOV.W   #0001h,&TERMMCTLW
341
342         .CASE 38400
343 ; Configure UART0 @ 38400 bauds / 4MHz
344 ; N=4000000/38400=104.1666... ==> UCOS16=1, UCBR0=int(N/16)=6, UCBRF0=int(frac(N/16)*16)=8, UCBRS0= fn(frac(N))=fn(0.16666)=0x20
345 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
346             MOV     #6,     &TERMBRW
347             MOV.W   #02081h,&TERMMCTLW
348
349         .CASE 57600
350 ; Configure UART0 @ 57600 bauds / 4MHz
351 ; N=8000000/115200=69.444... ==> UCOS16=1, UCBR0=int(N/16)=4, UCBRF0=int(frac(N/16)*16)=5, UCBRS0= fn(frac(N))=fn(0.44444)=0x55
352 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
353             MOV     #4,     &TERMBRW
354             MOV.W   #5551h, &TERMMCTLW
355
356         .CASE 115200
357 ; Configure UART0 @ 115200 bauds / 4MHz
358 ; N=8000000/230400=34.7222... ==> UCOS16=1, UCBR0=int(N/16)=2, UCBRF0=int(frac(N/16)*16)=2, UCBRS0= fn(frac(N))=fn(0.72222)=0xBB
359 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
360             MOV     #2,     &TERMBRW
361             MOV.W   #0BB21h,&TERMMCTLW
362
363         .CASE 230400
364 ; Configure UART0 @ 230400 bauds / 4MHz
365 ; see table "Recommended Settings for Typical Crystals and Baudrates"
366             MOV     #17,    &TERMBRW
367             MOV.W   #04A00h,&TERMMCTLW
368
369         .CASE 250000  ; DMX interface
370 ; Configure UART0 @ 250000 bauds / 4MHz
371 ; N=4000000/250000=16 ==> UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0)=0
372 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
373             MOV     #1,     &TERMBRW
374             MOV.W   #0001h, &TERMMCTLW
375
376         .CASE 460800
377 ; Configure UART0 @ 460800 bauds / 4MHz
378 ; N = 8000000/921600 = 8.680555... ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.68055)=0xD6
379 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
380              MOV     #8,     &TERMBRW
381              MOV.W   #0D600h,&TERMMCTLW
382
383         .CASE 806400  ; PL2303TA baudrate
384 ; Configure UART0 @ 201600 bauds / 1MHz
385 ; N=1000000/201600=4.955401 ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.200396)=0xFE
386 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
387             MOV     #4,     &TERMBRW
388             MOV.W   #0FE00h,&TERMMCTLW
389
390         .CASE 921600 ; CP2102 baudrate (with programming)
391 ; Configure UART0 @ 921600 bauds / 4MHz
392 ; N = 8000000/921600 = 4.34027... ==> {UCOS16=0, UCBR1=int(N)=4, UCBRF1=dont_care=0  UCBRS1=fn(frac(N))=fn(0.34027)=0x49
393 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
394              MOV     #4,     &TERMBRW
395              MOV.W   #04900h,&TERMMCTLW
396
397         .CASE 1228800 ; PL2303TA baudrate
398 ; Configure UART0 @ 2457600 bauds / 8MHz
399 ; N = 8000000/1228800 = 3.25521... ==> {UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.25521)=0x44
400 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
401              MOV     #3,     &TERMBRW
402              MOV.W   #04400h,&TERMMCTLW
403
404
405         .ELSECASE
406             .error "UART0 / 4 MHz : baudrate not implemented"
407         .ENDCASE ; UART0 / 4 MHz baudrates
408
409
410     .ELSEIF FREQUENCY = 8
411         .SWITCH TERMINALBAUDRATE
412         .CASE 9600
413 ; Configure UART0 @ 9600 bauds / 8MHz
414 ; N=8000000/9600=833.333... ==> UCOS16=1, UCBR0=int(N/16)=52, UCBRF0=int(frac(N/16)*16)=1, UCBRS0= fn(frac(N))=fn(0.33333)=0x49
415             MOV     #52,    &TERMBRW
416             MOV     #4911h, &TERMMCTLW
417
418         .CASE 19200
419 ; Configure UART0 @ 19200 bauds / 8MHz
420 ; N=8000000/19200=416.666... ==> UCOS16=1, UCBR0=int(N/16)=26, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0.66666)=0xD6
421 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
422             MOV     #26,    &TERMBRW
423             MOV.W   #0D601h,&TERMMCTLW
424
425         .CASE 31250  ; MIDI interface
426 ; Configure UART0 @ 31250 bauds / 8MHz
427 ; N=8000000/31250=256 ==> UCOS16=1, UCBR0=int(N/16)=16, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0)=0
428 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
429             MOV     #16,     &TERMBRW
430             MOV.W   #0001h,&TERMMCTLW
431
432         .CASE 38400
433 ; Configure UART0 @ 38400 bauds / 8MHz
434 ; N=8000000/38400=208.333... ==> UCOS16=1, UCBR0=int(N/16)=13, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0.33333)=0x49
435 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
436             MOV     #13,    &TERMBRW
437             MOV.W   #4901h, &TERMMCTLW
438
439         .CASE 57600
440 ; Configure UART0 @ 57600 bauds / 8MHz
441 ; N=8000000/57600=138.888... ==> UCOS16=1, UCBR0=int(N/16)=8, UCBRF0=int(frac(N/16)*16)=10, UCBRS0= fn(frac(N))=fn(0.88888)=0xF7
442 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
443             MOV     #8,     &TERMBRW
444             MOV.W   #0F7A1h,&TERMMCTLW
445
446         .CASE 115200
447 ; Configure UART0 @ 115200 bauds / 8MHz
448 ; N=8000000/115200=69.444... ==> UCOS16=1, UCBR0=int(N/16)=4, UCBRF0=int(frac(N/16)*16)=5, UCBRS0= fn(frac(N))=fn(0.44444)=0x55
449 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
450             MOV     #4,     &TERMBRW
451             MOV.W   #5551h, &TERMMCTLW
452
453         .CASE 230400
454 ; Configure UART0 @ 230400 bauds / 8MHz
455 ; N=8000000/230400=34.7222... ==> UCOS16=1, UCBR0=int(N/16)=2, UCBRF0=int(frac(N/16)*16)=2, UCBRS0= fn(frac(N))=fn(0.72222)=0xBB
456 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
457             MOV     #2,     &TERMBRW
458             MOV.W   #0BB21h,&TERMMCTLW
459
460         .CASE 250000  ; DMX interface
461 ; Configure UART0 @ 250000 bauds / 8MHz
462 ; N=8000000/250000=32 ==> UCOS16=1, UCBR0=int(N/16)=2, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0)=0
463 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
464             MOV     #2,     &TERMBRW
465             MOV.W   #0001h, &TERMMCTLW
466
467         .CASE 460800
468 ; Configure UART0 @ 460800 bauds / 8MHz
469 ; see table "Recommended Settings for Typical Crystals and Baudrates"
470             MOV     #17,    &TERMBRW
471             MOV.W   #04A00h,&TERMMCTLW
472
473         .CASE 614400 ; PL2303TA baudrate
474 ; Configure UART0 @ 614400 bauds / 8MHz
475 ; N = 8000000/614400 = 13.02083... ==> {UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.02083)=0x02
476 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
477              MOV     #13,     &TERMBRW
478              MOV.W   #00200h,&TERMMCTLW
479
480         .CASE 806400  ; PL2303TA baudrate
481 ; Configure UART0 @ 100800 bauds / 1MHz
482 ; N=1000000/100800=9,920634 ==> UCOS16=0, UCBR0=int(N)=9, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.920634)=0xFD
483 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
484             MOV     #9,     &TERMBRW
485             MOV.W   #0FD00h,&TERMMCTLW
486
487         .CASE 921600
488 ; Configure UART0 @ 921600 bauds / 8MHz
489 ; N = 8000000/921600 = 8.680555... ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.68055)=0xD6
490 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
491              MOV     #8,     &TERMBRW
492              MOV.W   #0D600h,&TERMMCTLW
493
494         .CASE 1000000
495 ; Configure UART0 @ 2000000 bauds / 16MHz
496 ; N = 16000000/2000000 = 8 ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.00000)=0x00
497             MOV     #8 ,    &TERMBRW
498             MOV.W   #00000h,&TERMMCTLW
499
500         .CASE 1228800 ; PL2303TA baudrate
501 ; Configure UART0 @ 1228800 bauds / 8MHz
502 ; N = 8000000/1228800 = 6.510416... ==> {UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.510416)=0xAA
503 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
504              MOV     #6,     &TERMBRW
505              MOV.W   #0AA00h,&TERMMCTLW
506
507         .CASE 1382400 ; CP2102 baudrate
508 ; Configure UART0 @ 1382400 bauds / 8MHz
509 ; N = 8000000/1382400 = 5.787037... ==> {UCOS16=0, UCBR0=int(N)=5, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.787037)=0xED
510             MOV     #5,    &TERMBRW
511             MOV.W   #0DD00h,&TERMMCTLW
512
513         .CASE 1843200 ; CP2102 baudrate (with programming)
514 ; Configure UART0 @ 1843200 bauds / 8MHz
515 ; N = 16000000/1843200 = 4.34027... ==> {UCOS16=0, UCBR1=int(N)=4, UCBRF1=dont_care=0  UCBRS1=fn(frac(N))=fn(0.34027)=0x49
516 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
517              MOV     #4,     &TERMBRW
518              MOV.W   #04900h,&TERMMCTLW
519
520         .CASE 2457600 ; PL2303TA baudrate
521 ; Configure UART0 @ 2457600 bauds / 8MHz
522 ; N = 8000000/1228800 = 3.25521... ==> {UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.25521)=0x44
523 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
524              MOV     #3,     &TERMBRW
525              MOV.W   #04400h,&TERMMCTLW
526
527         .ELSECASE
528             .error "UART0 / 8 MHz : baudrate not implemented"
529         .ENDCASE ; UART0 / 8 MHz baudrates
530
531
532     .ELSEIF FREQUENCY = 16
533         .SWITCH TERMINALBAUDRATE
534         .CASE 9600
535 ; Configure UART0 @ 9600 bauds / 16MHz
536 ; N=16000000/9600=1666.666... ==> UCOS16=1, UCBR0=int(N/16)=104, UCBRF0=int(frac(N/16)*16)=2, UCBRS0= fn(frac(N))=fn(0.66666)=0xD6
537 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
538             MOV     #104,    &TERMBRW
539             MOV     #0D621h, &TERMMCTLW
540
541         .CASE 19200
542 ; Configure UART0 @ 19200 bauds / 16MHz
543 ; N=16000000/19200=833.333... ==> UCOS16=1, UCBR0=int(N/16)=52, UCBRF0=int(frac(N/16)*16)=1, UCBRS0= fn(frac(N))=fn(0.33333)=0x49
544 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
545             MOV     #52,    &TERMBRW
546             MOV     #4911h, &TERMMCTLW
547
548         .CASE 31250  ; MIDI interface
549 ; Configure UART0 @ 31250 bauds / 8MHz
550 ; N=16000000/31250=512 ==> UCOS16=1, UCBR0=int(N/16)=32, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0)=0
551 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
552             MOV     #32,     &TERMBRW
553             MOV.W   #0001h,&TERMMCTLW
554
555         .CASE 38400
556 ; Configure UART0 @ 38400 bauds / 16MHz
557 ; N=16000000/19200=416.666... ==> UCOS16=1, UCBR0=int(N/16)=26, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0.66666)=0xD6
558 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
559             MOV     #26,    &TERMBRW
560             MOV.W   #0D601h,&TERMMCTLW
561
562         .CASE 57600
563 ; Configure UART0 @ 57600 bauds / 16MHz
564 ; N=16000000/57600=277.777... ==> UCOS16=1, UCBR0=int(N/16)=17, UCBRF0=int(frac(N/16)*16)=5, UCBRS0= fn(frac(N))=fn(0.77777)=0xDD
565 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
566             MOV     #17,     &TERMBRW
567             MOV.W   #0DD51h,&TERMMCTLW
568
569         .CASE 115200
570 ; Configure UART0 @ 115200 bauds / 16MHz
571 ; N=16000000/115200=138.888... ==> UCOS16=1, UCBR0=int(N/16)=8, UCBRF0=int(frac(N/16)*16)=10, UCBRS0= fn(frac(N))=fn(0.88888)=0xF7
572 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
573             MOV     #8,     &TERMBRW
574             MOV.W   #0F7A1h,&TERMMCTLW
575
576         .CASE 230400
577 ; Configure UART0 @ 230400 bauds / 16MHz
578 ; N=16000000/230400=69.444... ==> UCOS16=1, UCBR0=int(N/16)=4, UCBRF0=int(frac(N/16)*16)=5, UCBRS0= fn(frac(N))=fn(0.44444)=0x55
579 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
580             MOV     #4,     &TERMBRW
581             MOV.W   #5551h, &TERMMCTLW
582
583         .CASE 250000  ; DMX interface
584 ; Configure UART0 @ 250000 bauds / 16MHz
585 ; N=16000000/250000=64 ==> UCOS16=1, UCBR0=int(N/16)=4, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0)=0
586 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
587             MOV     #4,     &TERMBRW
588             MOV.W   #0001h, &TERMMCTLW
589
590         .CASE 460800
591 ; Configure UART0 @ 460800 bauds / 16MHz
592 ; N=16000000/460800=34.7222... ==> UCOS16=1, UCBR0=int(N/16)=2, UCBRF0=int(frac(N/16)*16)=2, UCBRS0= fn(frac(N))=fn(0.72222)=0xBB
593 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
594             MOV     #2,     &TERMBRW
595             MOV.W   #0BB21h,&TERMMCTLW
596
597         .CASE 500000 ; CP2102 baudrate
598 ; Configure UART0 @ 500000 bauds / 16MHz
599 ; N = 16000000/500000 = 32 ==> {UCOS16=1, UCBR0=int(N/16)=2, UCBRF1=0  UCBRS0=fn(frac(N))=fn(0.00000)=0x00
600 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
601 ;            MOV     #2,  &TERMBRW
602 ;            MOV.W   #00001h,&TERMMCTLW
603
604         .CASE 921600
605 ; Configure UART0 @ 921600 bauds / 16MHz
606 ; see "Configure UART1 @ 460800 bauds / 8MHz"
607             MOV     #17,    &TERMBRW
608             MOV.W   #04A00h,&TERMMCTLW
609
610         .CASE 1000000
611 ; Configure UART0 @ 1000000 bauds / 16MHz
612 ; N = 16000000/1000000 = 16 ==> {UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=0  UCBRS0=fn(frac(N))=fn(0.00000)=0x00
613 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
614             MOV     #1,    &TERMBRW
615             MOV.W   #00001h,&TERMMCTLW
616
617         .CASE 1228800 ; PL2303TA baudrate
618 ; Configure UART0 @ 614400 bauds / 8MHz
619 ; N = 8000000/614400 = 13.02083... ==> {UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.02083)=0x02
620 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
621              MOV     #13,     &TERMBRW
622              MOV.W   #00200h,&TERMMCTLW
623
624         .CASE 1382400 ; CP2102 baudrate (with programming)
625 ; Configure UART0 @ 1382400 bauds / 16MHz
626 ; N = 16000000/1382400 = 11.574074... ==> {UCOS16=0, UCBR0=int(N)=11, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.68055)=0x6B
627             MOV     #11,    &TERMBRW
628             MOV.W   #06B00h,&TERMMCTLW
629
630         .CASE 1843200 ; CP2102 baudrate (with programming)
631 ; Configure UART0 @ 1843200 bauds / 16MHz
632 ; N = 16000000/1843200 = 8.680555... ==> {UCOS16=0, UCBR1=int(N)=8, UCBRF1=dont_care=0  UCBRS1=fn(frac(N))=fn(0.68055)=0xD6
633 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
634              MOV     #8,     &TERMBRW
635              MOV.W   #0D600h,&TERMMCTLW
636
637         .CASE 2000000
638 ; Configure UART0 @ 2000000 bauds / 16MHz
639 ; N = 16000000/2000000 = 8 ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.00000)=0x00
640             MOV     #8 ,    &TERMBRW
641             MOV.W   #00000h,&TERMMCTLW
642
643         .CASE 2457600 ; PL2303TA baudrate
644 ; Configure UART0 @ 1228800 bauds / 8MHz
645 ; N = 8000000/1228800 = 6.510416... ==> {UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.510416)=0xAA
646 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
647              MOV     #6,     &TERMBRW
648              MOV.W   #0AA00h,&TERMMCTLW
649
650         .CASE 2764800
651 ; Configure UART0 @ 2764800 bauds / 16MHz
652 ; N = 16000000/2764800 = 5.787037... ==> {UCOS16=0, UCBR0=int(N)=5, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.787037)=0xED
653             MOV     #5,    &TERMBRW
654             MOV.W   #0DD00h,&TERMMCTLW
655
656         .CASE 3000000 ; PL2303TA baudrate
657 ; Configure UART0 @ 3000000 bauds / 16MHz
658 ; N = 16000000/3000000 = 5.333333... ==> {UCOS16=0, UCBR0=int(N)=5, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.333333)=0x49
659 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
660              MOV     #5,     &TERMBRW
661              MOV.W   #04900h,&TERMMCTLW
662
663         .CASE 4000000 ; CP2102 baudrate
664 ; Configure UART0 @ 4000000 bauds / 16MHz
665 ; N = 16000000/4000000 = 4... ==> {UCOS16=0, UCBR0=int(N)=0, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.0000000)=0
666 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
667              MOV     #4,     &TERMBRW
668              MOV.W   #0,&TERMMCTLW
669
670         .ELSECASE
671             .error "UART0 / 16 MHz : baudrate not implemented"
672         .ENDCASE ; UART0 / 16 MHz baudrates
673
674     .ELSEIF FREQUENCY = 24
675         .SWITCH TERMINALBAUDRATE
676         .CASE 9600
677 ; Configure UART0 @ 9600 bauds / 24MHz
678 ; N=24000000/9600=2500 ==> UCOS16=1, UCBR0=int(N/16)=156, UCBRF0=int(frac(N/16)*16)=4, UCBRS0= fn(frac(N))=(fn(0))=0x00
679 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
680             MOV     #156,    &TERMBRW
681             MOV     #0041h, &TERMMCTLW
682
683         .CASE 19200
684 ; Configure UART0 @ 19200 bauds / 24MHz
685 ; N=24000000/19200=1250 ==> UCOS16=1, UCBR0=int(N/16)=78, UCBRF0=int(frac(N/16)*16)=2, UCBRS0= fn(frac(N))=fn(0)=0x00
686 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
687             MOV     #78,    &TERMBRW
688             MOV     #0021h, &TERMMCTLW
689
690         .CASE 31250  ; MIDI interface
691 ; Configure UART0 @ 31250 bauds / 8MHz
692 ; N=24000000/31250=768 ==> UCOS16=1, UCBR0=int(N/16)=48, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0)=0
693 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
694             MOV     #48,     &TERMBRW
695             MOV.W   #0001h,&TERMMCTLW
696
697         .CASE 38400
698 ; Configure UART0 @ 38400 bauds / 24MHz
699 ; N=24000000/19200=625 ==> UCOS16=1, UCBR0=int(N/16)=39, UCBRF0=int(frac(N/16)*16)=1, UCBRS0= fn(frac(N))=fn(0)=0x00
700 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
701             MOV     #39,    &TERMBRW
702             MOV.W   #0011h,&TERMMCTLW
703
704         .CASE 57600
705 ; Configure UART0 @ 57600 bauds / 24MHz
706 ; N=24000000/57600=416.666... ==> UCOS16=1, UCBR0=int(N/16)=26, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0.666)=0xD6
707 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
708             MOV     #26,     &TERMBRW
709             MOV.W   #0D601h,&TERMMCTLW
710
711         .CASE 115200
712 ; Configure UART0 @ 115200 bauds / 24MHz
713 ; N=24000000/115200=208.333... ==> UCOS16=1, UCBR0=int(N/16)=13, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0.333)=0x49
714 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
715             MOV     #13,     &TERMBRW
716             MOV.W   #04901h,&TERMMCTLW
717
718         .CASE 230400
719 ; Configure UART0 @ 230400 bauds / 24MHz
720 ; N=24000000/230400=104.1666... ==> UCOS16=1, UCBR0=int(N/16)=6, UCBRF0=int(frac(N/16)*16)=8, UCBRS0= fn(frac(N))=fn(0.1666)=0x20
721 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
722             MOV     #6,     &TERMBRW
723             MOV.W   #2081h, &TERMMCTLW
724
725         .CASE 250000  ; DMX interface
726 ; Configure UART0 @ 250000 bauds / 24MHz
727 ; N=24000000/250000=96 ==> UCOS16=1, UCBR0=int(N/16)=6, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0)=0
728 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
729             MOV     #6,     &TERMBRW
730             MOV.W   #0001h, &TERMMCTLW
731
732         .CASE 460800
733 ; Configure UART0 @ 460800 bauds / 24MHz
734 ; N=24000000/460800=52.08333... ==> UCOS16=1, UCBR0=int(N/16)=3, UCBRF0=int(frac(N/16)*16)=4, UCBRS0= fn(frac(N))=fn(0.0833)=0x02
735 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
736             MOV     #3,     &TERMBRW
737             MOV.W   #0241h,&TERMMCTLW
738
739         .CASE 500000 ; CP2102 baudrate
740 ; Configure UART0 @ 500000 bauds / 24MHz
741 ; N = 24000000/500000 = 48 ==> {UCOS16=1, UCBR0=int(N/16)=3, UCBRF0=int(frac(N/16)*16)=0  UCBRS0=fn(frac(N))=fn(0.00000)=0x00
742 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
743 ;            MOV     #3,  &TERMBRW
744 ;            MOV.W   #0001h,&TERMMCTLW
745
746         .CASE 921600
747 ; Configure UART0 @ 921600 bauds / 24MHz
748 ; N = 24000000/921600 = 26.041666... ==> {UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=int(frac(N/16)*16)=10  UCBRS0=fn(frac(N))=fn(0.0416)=0x00
749 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
750             MOV     #1,     &TERMBRW
751             MOV.W   #00A1h,&TERMMCTLW
752
753         .CASE 1000000
754 ; Configure UART0 @ 1000000 bauds / 24MHz
755 ; N = 24000000/1000000 = 24 ==> {UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=int(frac(N/16)*16)=4,  UCBRS0=fn(frac(N))=fn(0.000)=0x00
756 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
757             MOV     #1,     &TERMBRW
758             MOV.W   #0041h,&TERMMCTLW
759
760         .CASE 1382400
761 ; Configure UART0 @ 1382400 bauds / 24MHz
762 ; N = 24000000/1382400 = 17.36111... ==> {UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=int(frac(N/16)*16)=1,  UCBRS0=fn(frac(N))=fn(0.3611)=0x4A
763             MOV     #1,     &TERMBRW
764             MOV.W   #04A11h,&TERMMCTLW
765
766         .CASE 1843200
767 ; Configure UART0 @ 1843200 bauds / 24MHz
768 ; N = 24000000/1843200 = 13.08203...  {UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.08203)=0x02
769 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
770              MOV     #13,    &TERMBRW
771              MOV.W   #0200h,&TERMMCTLW
772
773         .CASE 2457600 ; PL2303TA baudrate
774 ; Configure UART0 @ 2457600 bauds / 24MHz
775 ; N = 24000000/2457600 = 9.765625... ==> {UCOS16=0, UCBR0=int(N)=9, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.765625)=0xDD
776 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
777              MOV     #9,     &TERMBRW
778              MOV.W   #0DD00h,&TERMMCTLW
779
780         .CASE 3000000 ; PL2303TA baudrate
781 ; Configure UART0 @ 3000000 bauds / 24MHz
782 ; N = 24000000/3000000 = 8 ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.00000)=0x00
783             MOV     #8,    &TERMBRW
784             MOV.W   #0000h,&TERMMCTLW
785
786         .CASE 6000000 ; PL2303TA baudrate
787 ; Configure UART0 @ 6000000 bauds / 24MHz
788 ; N = 24000000/6000000 = 4 ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.00000)=0x00
789             MOV     #4,    &TERMBRW
790             MOV.W   #0000h,&TERMMCTLW
791
792         .ELSECASE
793             .error "UART0 / 24 MHz : baudrate not implemented"
794         .ENDCASE ; UART0 / 24MHz baudrates
795
796     .ELSEIF 
797         .error "UART0 frequency not implemented"
798     .ENDIF ; frequency
799