OSDN Git Service

af115484cc4b1f783ce73546998296732526ae60
[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
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 ;        .CASE 921600
315 ;; Configure UART0 @ 921600 bauds / 2MHz
316 ;; N = 2000000/921600 = 2.170138... ==> {UCOS16=0, UCBR1=int(N)=2, UCBRF1=dont_care=0  UCBRS1=fn(frac(N))=fn(0.170138)=0x11
317 ;; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
318 ;             MOV     #2,     &TERMBRW
319 ;             MOV.W   #01100h,&TERMMCTLW
320
321
322         .ELSECASE
323             .error "UART0 / 2 MHz : baudrate not implemented"
324         .ENDCASE
325
326     .ELSEIF FREQUENCY = 4
327         .SWITCH TERMINALBAUDRATE
328         .CASE 9600
329 ; Configure UART0 @ 9600 bauds / 4MHz
330 ; 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
331 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
332             MOV     #26,    &TERMBRW
333             MOV.W   #0D601h,&TERMMCTLW
334
335         .CASE 19200
336 ; Configure UART0 @ 19200 bauds / 4MHz
337 ; 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
338 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
339             MOV     #13,    &TERMBRW
340             MOV.W   #4901h, &TERMMCTLW
341
342         .CASE 31250  ; MIDI interface
343 ; Configure UART0 @ 31250 bauds / 4MHz
344 ; 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
345 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
346             MOV     #8,     &TERMBRW
347             MOV.W   #0001h,&TERMMCTLW
348
349         .CASE 38400
350 ; Configure UART0 @ 38400 bauds / 4MHz
351 ; 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
352 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
353             MOV     #6,     &TERMBRW
354             MOV.W   #02081h,&TERMMCTLW
355
356         .CASE 57600
357 ; Configure UART0 @ 57600 bauds / 4MHz
358 ; 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
359 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
360             MOV     #4,     &TERMBRW
361             MOV.W   #5551h, &TERMMCTLW
362
363         .CASE 115200
364 ; Configure UART0 @ 115200 bauds / 4MHz
365 ; 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
366 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
367             MOV     #2,     &TERMBRW
368             MOV.W   #0BB21h,&TERMMCTLW
369
370         .CASE 230400
371 ; Configure UART0 @ 230400 bauds / 4MHz
372 ; see table "Recommended Settings for Typical Crystals and Baudrates"
373             MOV     #17,    &TERMBRW
374             MOV.W   #04A00h,&TERMMCTLW
375
376         .CASE 250000  ; DMX interface
377 ; Configure UART0 @ 250000 bauds / 4MHz
378 ; 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
379 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
380             MOV     #1,     &TERMBRW
381             MOV.W   #0001h, &TERMMCTLW
382
383         .CASE 460800
384 ; Configure UART0 @ 460800 bauds / 4MHz
385 ; N = 8000000/921600 = 8.680555... ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.68055)=0xD6
386 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
387              MOV     #8,     &TERMBRW
388              MOV.W   #0D600h,&TERMMCTLW
389
390         .CASE 806400  ; PL2303TA baudrate
391 ; Configure UART0 @ 201600 bauds / 1MHz
392 ; N=1000000/201600=4.955401 ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.200396)=0xFE
393 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
394             MOV     #4,     &TERMBRW
395             MOV.W   #0FE00h,&TERMMCTLW
396
397         .CASE 921600 ; CP2102 baudrate
398 ; Configure UART0 @ 921600 bauds / 4MHz
399 ; N = 8000000/921600 = 4.34027... ==> {UCOS16=0, UCBR1=int(N)=4, UCBRF1=dont_care=0  UCBRS1=fn(frac(N))=fn(0.34027)=0x49
400 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
401              MOV     #4,     &TERMBRW
402              MOV.W   #04900h,&TERMMCTLW
403
404         .CASE 1228800 ; PL2303TA baudrate
405 ; Configure UART0 @ 2457600 bauds / 8MHz
406 ; N = 8000000/1228800 = 3.25521... ==> {UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.25521)=0x44
407 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
408              MOV     #3,     &TERMBRW
409              MOV.W   #04400h,&TERMMCTLW
410
411
412         .ELSECASE
413             .error "UART0 / 4 MHz : baudrate not implemented"
414         .ENDCASE ; UART0 / 4 MHz baudrates
415
416
417     .ELSEIF FREQUENCY = 8
418         .SWITCH TERMINALBAUDRATE
419         .CASE 9600
420 ; Configure UART0 @ 9600 bauds / 8MHz
421 ; 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
422             MOV     #52,    &TERMBRW
423             MOV     #4911h, &TERMMCTLW
424
425         .CASE 19200
426 ; Configure UART0 @ 19200 bauds / 8MHz
427 ; 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
428 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
429             MOV     #26,    &TERMBRW
430             MOV.W   #0D601h,&TERMMCTLW
431
432         .CASE 31250  ; MIDI interface
433 ; Configure UART0 @ 31250 bauds / 8MHz
434 ; 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
435 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
436             MOV     #16,     &TERMBRW
437             MOV.W   #0001h,&TERMMCTLW
438
439         .CASE 38400
440 ; Configure UART0 @ 38400 bauds / 8MHz
441 ; 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
442 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
443             MOV     #13,    &TERMBRW
444             MOV.W   #4901h, &TERMMCTLW
445
446         .CASE 57600
447 ; Configure UART0 @ 57600 bauds / 8MHz
448 ; 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
449 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
450             MOV     #8,     &TERMBRW
451             MOV.W   #0F7A1h,&TERMMCTLW
452
453         .CASE 115200
454 ; Configure UART0 @ 115200 bauds / 8MHz
455 ; 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
456 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
457             MOV     #4,     &TERMBRW
458             MOV.W   #5551h, &TERMMCTLW
459
460         .CASE 230400
461 ; Configure UART0 @ 230400 bauds / 8MHz
462 ; 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
463 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
464             MOV     #2,     &TERMBRW
465             MOV.W   #0BB21h,&TERMMCTLW
466
467         .CASE 250000  ; DMX interface
468 ; Configure UART0 @ 250000 bauds / 8MHz
469 ; 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
470 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
471             MOV     #2,     &TERMBRW
472             MOV.W   #0001h, &TERMMCTLW
473
474         .CASE 460800
475 ; Configure UART0 @ 460800 bauds / 8MHz
476 ; see table "Recommended Settings for Typical Crystals and Baudrates"
477             MOV     #17,    &TERMBRW
478             MOV.W   #04A00h,&TERMMCTLW
479
480         .CASE 614400 ; PL2303TA baudrate
481 ; Configure UART0 @ 614400 bauds / 8MHz
482 ; N = 8000000/614400 = 13.02083... ==> {UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.02083)=0x02
483 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
484              MOV     #13,     &TERMBRW
485              MOV.W   #00200h,&TERMMCTLW
486
487         .CASE 806400  ; PL2303TA baudrate
488 ; Configure UART0 @ 100800 bauds / 1MHz
489 ; N=1000000/100800=9,920634 ==> UCOS16=0, UCBR0=int(N)=9, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.920634)=0xFD
490 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
491             MOV     #9,     &TERMBRW
492             MOV.W   #0FD00h,&TERMMCTLW
493
494         .CASE 921600
495 ; Configure UART0 @ 921600 bauds / 8MHz
496 ; N = 8000000/921600 = 8.680555... ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.68055)=0xD6
497 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
498              MOV     #8,     &TERMBRW
499              MOV.W   #0D600h,&TERMMCTLW
500
501         .CASE 1000000
502 ; Configure UART0 @ 2000000 bauds / 16MHz
503 ; N = 16000000/2000000 = 8 ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.00000)=0x00
504             MOV     #8 ,    &TERMBRW
505             MOV.W   #00000h,&TERMMCTLW
506
507         .CASE 1228800 ; PL2303TA baudrate
508 ; Configure UART0 @ 1228800 bauds / 8MHz
509 ; N = 8000000/1228800 = 6.510416... ==> {UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.510416)=0xAA
510 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
511              MOV     #6,     &TERMBRW
512              MOV.W   #0AA00h,&TERMMCTLW
513
514         .CASE 1382400 ; CP2102 baudrate
515 ; Configure UART0 @ 1382400 bauds / 8MHz
516 ; N = 8000000/1382400 = 5.787037... ==> {UCOS16=0, UCBR0=int(N)=5, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.787037)=0xED
517             MOV     #5,    &TERMBRW
518             MOV.W   #0DD00h,&TERMMCTLW
519
520         .CASE 1843200 ; CP2102 baudrate (with programming)
521 ; Configure UART0 @ 1843200 bauds / 8MHz
522 ; N = 16000000/1843200 = 4.34027... ==> {UCOS16=0, UCBR1=int(N)=4, UCBRF1=dont_care=0  UCBRS1=fn(frac(N))=fn(0.34027)=0x49
523 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
524              MOV     #4,     &TERMBRW
525              MOV.W   #04900h,&TERMMCTLW
526
527         .CASE 2457600 ; PL2303TA baudrate
528 ; Configure UART0 @ 2457600 bauds / 8MHz
529 ; N = 8000000/1228800 = 3.25521... ==> {UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.25521)=0x44
530 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
531              MOV     #3,     &TERMBRW
532              MOV.W   #04400h,&TERMMCTLW
533
534 ;        .CASE 3000000 ; PL2303TA baudrate
535 ;; Configure UART0 @ 6000000 bauds / 16MHz
536 ;; N = 16000000/6000000 = 2.6666.. ==> {UCOS16=0, UCBR0=int(N)=2, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.6666)=0xD6
537 ;            MOV     #2,    &TERMBRW
538 ;            MOV.W   #0D600h,&TERMMCTLW
539
540         .ELSECASE
541             .error "UART0 / 8 MHz : baudrate not implemented"
542         .ENDCASE ; UART0 / 8 MHz baudrates
543
544
545     .ELSEIF FREQUENCY = 16
546         .SWITCH TERMINALBAUDRATE
547         .CASE 9600
548 ; Configure UART0 @ 9600 bauds / 16MHz
549 ; 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
550 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
551             MOV     #104,    &TERMBRW
552             MOV     #0D621h, &TERMMCTLW
553
554         .CASE 19200
555 ; Configure UART0 @ 19200 bauds / 16MHz
556 ; 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
557 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
558             MOV     #52,    &TERMBRW
559             MOV     #4911h, &TERMMCTLW
560
561         .CASE 31250  ; MIDI interface
562 ; Configure UART0 @ 31250 bauds / 8MHz
563 ; 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
564 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
565             MOV     #32,     &TERMBRW
566             MOV.W   #0001h,&TERMMCTLW
567
568         .CASE 38400
569 ; Configure UART0 @ 38400 bauds / 16MHz
570 ; 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
571 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
572             MOV     #26,    &TERMBRW
573             MOV.W   #0D601h,&TERMMCTLW
574
575         .CASE 57600
576 ; Configure UART0 @ 57600 bauds / 16MHz
577 ; 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
578 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
579             MOV     #17,     &TERMBRW
580             MOV.W   #0DD51h,&TERMMCTLW
581
582         .CASE 115200
583 ; Configure UART0 @ 115200 bauds / 16MHz
584 ; 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
585 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
586             MOV     #8,     &TERMBRW
587             MOV.W   #0F7A1h,&TERMMCTLW
588
589         .CASE 230400
590 ; Configure UART0 @ 230400 bauds / 16MHz
591 ; 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
592 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
593             MOV     #4,     &TERMBRW
594             MOV.W   #5551h, &TERMMCTLW
595
596         .CASE 250000  ; DMX interface
597 ; Configure UART0 @ 250000 bauds / 16MHz
598 ; 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
599 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
600             MOV     #4,     &TERMBRW
601             MOV.W   #0001h, &TERMMCTLW
602
603         .CASE 460800
604 ; Configure UART0 @ 460800 bauds / 16MHz
605 ; 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
606 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
607             MOV     #2,     &TERMBRW
608             MOV.W   #0BB21h,&TERMMCTLW
609
610         .CASE 500000 ; CP2102 baudrate
611 ; Configure UART0 @ 500000 bauds / 16MHz
612 ; N = 16000000/500000 = 32 ==> {UCOS16=1, UCBR0=int(N/16)=2, UCBRF1=0  UCBRS0=fn(frac(N))=fn(0.00000)=0x00
613 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
614 ;            MOV     #2,  &TERMBRW
615 ;            MOV.W   #00001h,&TERMMCTLW
616
617         .CASE 921600
618 ; Configure UART0 @ 921600 bauds / 16MHz
619 ; see "Configure UART1 @ 460800 bauds / 8MHz"
620             MOV     #17,    &TERMBRW
621             MOV.W   #04A00h,&TERMMCTLW
622
623         .CASE 1000000
624 ; Configure UART0 @ 1000000 bauds / 16MHz
625 ; N = 16000000/1000000 = 16 ==> {UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=0  UCBRS0=fn(frac(N))=fn(0.00000)=0x00
626 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
627             MOV     #1,    &TERMBRW
628             MOV.W   #00001h,&TERMMCTLW
629
630         .CASE 1228800 ; PL2303TA baudrate
631 ; Configure UART0 @ 614400 bauds / 8MHz
632 ; N = 8000000/614400 = 13.02083... ==> {UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.02083)=0x02
633 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
634              MOV     #13,     &TERMBRW
635              MOV.W   #00200h,&TERMMCTLW
636
637         .CASE 1382400 ; CP2102 baudrate (with programming)
638 ; Configure UART0 @ 1382400 bauds / 16MHz
639 ; N = 16000000/1382400 = 11.574074... ==> {UCOS16=0, UCBR0=int(N)=11, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.68055)=0x6B
640             MOV     #11,    &TERMBRW
641             MOV.W   #06B00h,&TERMMCTLW
642
643         .CASE 1843200 ; CP2102 baudrate (with programming)
644 ; Configure UART0 @ 1843200 bauds / 16MHz
645 ; N = 16000000/1843200 = 8.680555... ==> {UCOS16=0, UCBR1=int(N)=8, UCBRF1=dont_care=0  UCBRS1=fn(frac(N))=fn(0.68055)=0xD6
646 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
647              MOV     #8,     &TERMBRW
648              MOV.W   #0D600h,&TERMMCTLW
649
650         .CASE 2000000
651 ; Configure UART0 @ 2000000 bauds / 16MHz
652 ; N = 16000000/2000000 = 8 ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.00000)=0x00
653             MOV     #8 ,    &TERMBRW
654             MOV.W   #00000h,&TERMMCTLW
655
656         .CASE 2457600 ; PL2303TA baudrate
657 ; Configure UART0 @ 1228800 bauds / 8MHz
658 ; N = 8000000/1228800 = 6.510416... ==> {UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.510416)=0xAA
659 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
660              MOV     #6,     &TERMBRW
661              MOV.W   #0AA00h,&TERMMCTLW
662
663         .CASE 2764800
664 ; Configure UART0 @ 2764800 bauds / 16MHz
665 ; N = 16000000/2764800 = 5.787037... ==> {UCOS16=0, UCBR0=int(N)=5, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.787037)=0xED
666             MOV     #5,    &TERMBRW
667             MOV.W   #0DD00h,&TERMMCTLW
668
669         .CASE 3000000 ; PL2303TA baudrate
670 ; Configure UART0 @ 3000000 bauds / 16MHz
671 ; N = 16000000/3000000 = 5.333333... ==> {UCOS16=0, UCBR0=int(N)=5, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.333333)=0x49
672 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
673              MOV     #5,     &TERMBRW
674              MOV.W   #04900h,&TERMMCTLW
675
676 ;        .CASE 4000000 ; CP2102 baudrate
677 ;; Configure UART0 @ 4000000 bauds / 16MHz
678 ;; N = 16000000/4000000 = 4... ==> {UCOS16=0, UCBR0=int(N)=0, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.0000000)=0
679 ;; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
680 ;             MOV     #4,     &TERMBRW
681 ;             MOV.W   #00100h,&TERMMCTLW
682
683 ;        .CASE 6000000 ; PL2303TA baudrate
684 ;; Configure UART0 @ 6000000 bauds / 24MHz
685 ;; N = 16000000/6000000 = 2.6666.. ==> {UCOS16=0, UCBR0=int(N)=2, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.6666)=0xD6
686 ;            MOV     #2,    &TERMBRW
687 ;            MOV.W   #0D600h,&TERMMCTLW
688
689         .ELSECASE
690             .error "UART0 / 16 MHz : baudrate not implemented"
691         .ENDCASE ; UART0 / 16 MHz baudrates
692
693     .ELSEIF FREQUENCY = 24
694         .SWITCH TERMINALBAUDRATE
695         .CASE 9600
696 ; Configure UART0 @ 9600 bauds / 24MHz
697 ; 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
698 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
699             MOV     #156,    &TERMBRW
700             MOV     #0041h, &TERMMCTLW
701
702         .CASE 19200
703 ; Configure UART0 @ 19200 bauds / 24MHz
704 ; 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
705 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
706             MOV     #78,    &TERMBRW
707             MOV     #0021h, &TERMMCTLW
708
709         .CASE 31250  ; MIDI interface
710 ; Configure UART0 @ 31250 bauds / 8MHz
711 ; 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
712 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
713             MOV     #48,     &TERMBRW
714             MOV.W   #0001h,&TERMMCTLW
715
716         .CASE 38400
717 ; Configure UART0 @ 38400 bauds / 24MHz
718 ; 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
719 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
720             MOV     #39,    &TERMBRW
721             MOV.W   #0011h,&TERMMCTLW
722
723         .CASE 57600
724 ; Configure UART0 @ 57600 bauds / 24MHz
725 ; 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
726 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
727             MOV     #26,     &TERMBRW
728             MOV.W   #0D601h,&TERMMCTLW
729
730         .CASE 115200
731 ; Configure UART0 @ 115200 bauds / 24MHz
732 ; 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
733 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
734             MOV     #13,     &TERMBRW
735             MOV.W   #04901h,&TERMMCTLW
736
737         .CASE 230400
738 ; Configure UART0 @ 230400 bauds / 24MHz
739 ; 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
740 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
741             MOV     #6,     &TERMBRW
742             MOV.W   #2081h, &TERMMCTLW
743
744         .CASE 250000  ; DMX interface
745 ; Configure UART0 @ 250000 bauds / 24MHz
746 ; 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
747 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
748             MOV     #6,     &TERMBRW
749             MOV.W   #0001h, &TERMMCTLW
750
751         .CASE 460800
752 ; Configure UART0 @ 460800 bauds / 24MHz
753 ; 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
754 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
755             MOV     #3,     &TERMBRW
756             MOV.W   #0241h,&TERMMCTLW
757
758         .CASE 500000 ; CP2102 baudrate
759 ; Configure UART0 @ 500000 bauds / 24MHz
760 ; 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
761 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
762 ;            MOV     #3,  &TERMBRW
763 ;            MOV.W   #0001h,&TERMMCTLW
764
765         .CASE 921600
766 ; Configure UART0 @ 921600 bauds / 24MHz
767 ; 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
768 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
769             MOV     #1,     &TERMBRW
770             MOV.W   #00A1h,&TERMMCTLW
771
772         .CASE 1000000
773 ; Configure UART0 @ 1000000 bauds / 24MHz
774 ; 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
775 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
776             MOV     #1,     &TERMBRW
777             MOV.W   #0041h,&TERMMCTLW
778
779         .CASE 1382400
780 ; Configure UART0 @ 1382400 bauds / 24MHz
781 ; 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
782             MOV     #1,     &TERMBRW
783             MOV.W   #04A11h,&TERMMCTLW
784
785         .CASE 1843200
786 ; Configure UART0 @ 1843200 bauds / 24MHz
787 ; N = 24000000/1843200 = 13.08203...  {UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.08203)=0x02
788 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
789              MOV     #13,    &TERMBRW
790              MOV.W   #0200h,&TERMMCTLW
791
792         .CASE 2457600 ; PL2303TA baudrate
793 ; Configure UART0 @ 2457600 bauds / 24MHz
794 ; N = 24000000/2457600 = 9.765625... ==> {UCOS16=0, UCBR0=int(N)=9, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.765625)=0xDD
795 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
796              MOV     #9,     &TERMBRW
797              MOV.W   #0DD00h,&TERMMCTLW
798
799         .CASE 3000000 ; PL2303TA baudrate
800 ; Configure UART0 @ 3000000 bauds / 24MHz
801 ; N = 24000000/3000000 = 8 ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.00000)=0x00
802             MOV     #8,    &TERMBRW
803             MOV.W   #0000h,&TERMMCTLW
804
805         .CASE 6000000 ; PL2303TA baudrate
806 ; Configure UART0 @ 6000000 bauds / 24MHz
807 ; N = 24000000/6000000 = 4 ==> {UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0  UCBRS0=fn(frac(N))=fn(0.00000)=0x00
808             MOV     #4,    &TERMBRW
809             MOV.W   #0000h,&TERMMCTLW
810
811         .ELSECASE
812             .error "UART0 / 24 MHz : baudrate not implemented"
813         .ENDCASE ; UART0 / 24MHz baudrates
814
815     .ELSEIF 
816         .error "UART0 frequency not implemented"
817     .ENDIF ; frequency
818