2 ; TERM alias eUSCI_Ax : select baudrate versus frequency
4 .SWITCH TERMINALBAUDRATE
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
11 MOV.W #00A1h, &TERMMCTLW
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
18 MOV.W #1100h,&TERMMCTLW
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
25 MOV.W #0000h,&TERMMCTLW
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
32 MOV.W #0AA00h,&TERMMCTLW
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
39 MOV.W #04900h,&TERMMCTLW
42 .error "UART0 / 250 kHz : baudrate not implemented"
46 .ELSEIF FREQUENCY = 0.5
47 .SWITCH TERMINALBAUDRATE
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
53 MOV.W #0241h,&TERMMCTLW
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
60 MOV.W #00A1h, &TERMMCTLW
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
67 MOV.W #0000h,&TERMMCTLW
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
74 MOV.W #1100h,&TERMMCTLW
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
81 MOV.W #0D600h,&TERMMCTLW
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
88 MOV.W #0FE00h,&TERMMCTLW
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
95 MOV.W #04900h,&TERMMCTLW
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
102 MOV.W #0BB00h,&TERMMCTLW
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
109 ; MOV.W #01100h,&TERMMCTLW
112 .error "UART0 / 500 kHz : baudrate not implemented"
116 .ELSEIF FREQUENCY = 1
117 .SWITCH TERMINALBAUDRATE
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
123 MOV #2081h, &TERMMCTLW
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
130 MOV.W #0241h,&TERMMCTLW
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
137 MOV.W #0001h,&TERMMCTLW
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
144 MOV.W #00A1h, &TERMMCTLW
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
151 MOV.W #04A00h,&TERMMCTLW
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
158 MOV.W #0FD00h,&TERMMCTLW
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
165 MOV.W #0D600h,&TERMMCTLW
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
172 MOV.W #05500h,&TERMMCTLW
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
179 MOV.W #01100h,&TERMMCTLW
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
186 MOV.W #0FE00h,&TERMMCTLW
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
193 MOV.W #04900h,&TERMMCTLW
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
200 MOV.W #0000h,&TERMMCTLW
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
207 MOV.W #0BB00h,&TERMMCTLW
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
214 ; MOV.W #05500h,&TERMMCTLW
218 .error "UART0 / 1 MHz : baudrate not implemented"
221 .ELSEIF FREQUENCY = 2
222 .SWITCH TERMINALBAUDRATE
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
228 MOV.W #4901h, &TERMMCTLW
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
235 MOV #2081h, &TERMMCTLW
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
242 MOV.W #0001h,&TERMMCTLW
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
249 MOV.W #0241h,&TERMMCTLW
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
256 MOV.W #0BB21h,&TERMMCTLW
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
263 MOV.W #04A00h,&TERMMCTLW
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
270 MOV.W #0D600h,&TERMMCTLW
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
277 MOV.W #0000h,&TERMMCTLW
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
284 MOV.W #05500h,&TERMMCTLW
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
291 MOV.W #0FE00h,&TERMMCTLW
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
298 MOV.W #04900h,&TERMMCTLW
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
305 MOV.W #04400h,&TERMMCTLW
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
312 MOV.W #05500h,&TERMMCTLW
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
319 ; MOV.W #01100h,&TERMMCTLW
323 .error "UART0 / 2 MHz : baudrate not implemented"
326 .ELSEIF FREQUENCY = 4
327 .SWITCH TERMINALBAUDRATE
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
333 MOV.W #0D601h,&TERMMCTLW
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
340 MOV.W #4901h, &TERMMCTLW
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
347 MOV.W #0001h,&TERMMCTLW
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
354 MOV.W #02081h,&TERMMCTLW
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
361 MOV.W #5551h, &TERMMCTLW
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
368 MOV.W #0BB21h,&TERMMCTLW
371 ; Configure UART0 @ 230400 bauds / 4MHz
372 ; see table "Recommended Settings for Typical Crystals and Baudrates"
374 MOV.W #04A00h,&TERMMCTLW
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
381 MOV.W #0001h, &TERMMCTLW
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
388 MOV.W #0D600h,&TERMMCTLW
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
395 MOV.W #0FE00h,&TERMMCTLW
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
402 MOV.W #04900h,&TERMMCTLW
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
409 MOV.W #04400h,&TERMMCTLW
413 .error "UART0 / 4 MHz : baudrate not implemented"
414 .ENDCASE ; UART0 / 4 MHz baudrates
417 .ELSEIF FREQUENCY = 8
418 .SWITCH TERMINALBAUDRATE
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
423 MOV #4911h, &TERMMCTLW
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
430 MOV.W #0D601h,&TERMMCTLW
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
437 MOV.W #0001h,&TERMMCTLW
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
444 MOV.W #4901h, &TERMMCTLW
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
451 MOV.W #0F7A1h,&TERMMCTLW
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
458 MOV.W #5551h, &TERMMCTLW
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
465 MOV.W #0BB21h,&TERMMCTLW
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
472 MOV.W #0001h, &TERMMCTLW
475 ; Configure UART0 @ 460800 bauds / 8MHz
476 ; see table "Recommended Settings for Typical Crystals and Baudrates"
478 MOV.W #04A00h,&TERMMCTLW
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
485 MOV.W #00200h,&TERMMCTLW
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
492 MOV.W #0FD00h,&TERMMCTLW
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
499 MOV.W #0D600h,&TERMMCTLW
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
505 MOV.W #00000h,&TERMMCTLW
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
512 MOV.W #0AA00h,&TERMMCTLW
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
518 MOV.W #0DD00h,&TERMMCTLW
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
525 MOV.W #04900h,&TERMMCTLW
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
532 MOV.W #04400h,&TERMMCTLW
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
538 ; MOV.W #0D600h,&TERMMCTLW
541 .error "UART0 / 8 MHz : baudrate not implemented"
542 .ENDCASE ; UART0 / 8 MHz baudrates
545 .ELSEIF FREQUENCY = 16
546 .SWITCH TERMINALBAUDRATE
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
552 MOV #0D621h, &TERMMCTLW
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
559 MOV #4911h, &TERMMCTLW
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
566 MOV.W #0001h,&TERMMCTLW
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
573 MOV.W #0D601h,&TERMMCTLW
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
580 MOV.W #0DD51h,&TERMMCTLW
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
587 MOV.W #0F7A1h,&TERMMCTLW
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
594 MOV.W #5551h, &TERMMCTLW
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
601 MOV.W #0001h, &TERMMCTLW
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
608 MOV.W #0BB21h,&TERMMCTLW
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
615 ; MOV.W #00001h,&TERMMCTLW
618 ; Configure UART0 @ 921600 bauds / 16MHz
619 ; see "Configure UART1 @ 460800 bauds / 8MHz"
621 MOV.W #04A00h,&TERMMCTLW
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
628 MOV.W #00001h,&TERMMCTLW
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
635 MOV.W #00200h,&TERMMCTLW
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
641 MOV.W #06B00h,&TERMMCTLW
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
648 MOV.W #0D600h,&TERMMCTLW
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
654 MOV.W #00000h,&TERMMCTLW
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
661 MOV.W #0AA00h,&TERMMCTLW
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
667 MOV.W #0DD00h,&TERMMCTLW
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
674 MOV.W #04900h,&TERMMCTLW
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
681 ; MOV.W #00100h,&TERMMCTLW
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
687 ; MOV.W #0D600h,&TERMMCTLW
690 .error "UART0 / 16 MHz : baudrate not implemented"
691 .ENDCASE ; UART0 / 16 MHz baudrates
693 .ELSEIF FREQUENCY = 24
694 .SWITCH TERMINALBAUDRATE
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
700 MOV #0041h, &TERMMCTLW
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
707 MOV #0021h, &TERMMCTLW
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
714 MOV.W #0001h,&TERMMCTLW
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
721 MOV.W #0011h,&TERMMCTLW
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
728 MOV.W #0D601h,&TERMMCTLW
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
735 MOV.W #04901h,&TERMMCTLW
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
742 MOV.W #2081h, &TERMMCTLW
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
749 MOV.W #0001h, &TERMMCTLW
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
756 MOV.W #0241h,&TERMMCTLW
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
763 ; MOV.W #0001h,&TERMMCTLW
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
770 MOV.W #00A1h,&TERMMCTLW
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
777 MOV.W #0041h,&TERMMCTLW
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
783 MOV.W #04A11h,&TERMMCTLW
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
790 MOV.W #0200h,&TERMMCTLW
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
797 MOV.W #0DD00h,&TERMMCTLW
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
803 MOV.W #0000h,&TERMMCTLW
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
809 MOV.W #0000h,&TERMMCTLW
812 .error "UART0 / 24 MHz : baudrate not implemented"
813 .ENDCASE ; UART0 / 24MHz baudrates
816 .error "UART0 frequency not implemented"