2 ; TERM alias eUSCI_Ax : select baudrate versus frequency
4 .SWITCH TERMINALBAUDRATE
7 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 00A1h
13 .CASE 19200 ; PL2303TA baudrate
14 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 1100h
20 .CASE 31250 ; MIDI interface
21 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 0000h
28 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 0AA00h
34 .CASE 57600 ; PL2303TA baudrate
35 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 04900h
42 .error "UART_TERM / 250 kHz : baudrate not implemented"
46 .ELSEIF FREQUENCY = 0.5
47 .SWITCH TERMINALBAUDRATE
49 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 0241h
56 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 00A1h
62 .CASE 31250 ; MIDI interface
63 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 0000h
69 .CASE 38400 ; PL2303TA baudrate
70 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 1100h
77 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 0D600h
83 .CASE 100800 ; PL2303TA baudrate
84 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 0FE00h
91 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 04900h
97 .CASE 134400 ; PL2303TA baudrate
98 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 0BB00h
104 ; .CASE 161280 ; PL2303TA baudrate
105 ;; Configure UART_TERM @ 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 ;TERMMCTLW_INI .equ 01100h
112 .error "UART_TERM / 500 kHz : baudrate not implemented"
116 .ELSEIF FREQUENCY = 1
117 .SWITCH TERMINALBAUDRATE
119 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 2081h
126 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 0241h
132 .CASE 31250 ; MIDI interface
133 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 0001h
140 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 00A1h
147 ; Configure UART_TERM @ 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 TERMMCTLW_INI .equ 04A00h
154 ; Configure UCBx_TERM for I2C @ 100kHZ / 1MHz
157 .CASE 100800 ; PL2303TA baudrate
158 ; Configure UART_TERM @ 100800 bauds / 1MHz
159 ; N=1000000/100800=9,920634 ==> UCOS16=0, UCBR0=int(N)=9, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.920634)=0xFD
160 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
162 TERMMCTLW_INI .equ 0FD00h
165 ; Configure UART_TERM @ 115200 bauds / 1MHz
166 ; N=1000000/115200=8.68055... ==> UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.68055)=0xD6
167 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
169 TERMMCTLW_INI .equ 0D600h
171 .CASE 134400 ; PL2303TA baudrate
172 ; Configure UART_TERM @ 134400 bauds / 1MHz
173 ; N=1000000/134400=7.440476 ==> UCOS16=0, UCBR0=int(N)=7, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.440476)=0x55
174 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
176 TERMMCTLW_INI .equ 05500h
178 .CASE 161280 ; PL2303TA baudrate
179 ; Configure UART_TERM @ 161280 bauds / 1MHz
180 ; N=1000000/161280=6.200396 ==> UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.200396)=0x11
181 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
183 TERMMCTLW_INI .equ 01100h
185 .CASE 201600 ; PL2303TA baudrate
186 ; Configure UART_TERM @ 201600 bauds / 1MHz
187 ; N=1000000/201600=4.955401 ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.200396)=0xFE
188 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
190 TERMMCTLW_INI .equ 0FE00h
193 ; Configure UART_TERM @ 230400 bauds / 1MHz
194 ; N=1000000/230400=4.34027... ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.340277)=0x49
195 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
197 TERMMCTLW_INI .equ 04900h
199 .CASE 250000 ; DMX interface
200 ; Configure UART_TERM @ 250000 bauds / 1MHz
201 ; N=1000000/250000=4 ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0)=0
202 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
204 TERMMCTLW_INI .equ 0000h
206 .CASE 268800 ; PL2303TA baudrate
207 ; Configure UART_TERM @ 268800 bauds / 1MHz
208 ; N=1000000/268800=3.72024 ==> UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.72024)=0xBB
209 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
211 TERMMCTLW_INI .equ 0BB00h
213 ; .CASE 403200 ; PL2303TA baudrate
214 ;; Configure UART_TERM @ 403200 bauds / 1MHz
215 ;; N=1000000/403200=2.48016 ==> UCOS16=0, UCBR0=int(N)=2, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.48016)=0x55
216 ;; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
218 ;TERMMCTLW_INI .equ 05500h
222 .error "UART_TERM / 1 MHz : baudrate not implemented"
225 .ELSEIF FREQUENCY = 2
226 .SWITCH TERMINALBAUDRATE
228 ; Configure UART_TERM @ 19200 bauds / 4MHz
229 ; 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
230 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
232 TERMMCTLW_INI .equ 4901h
235 ; Configure UART_TERM @ 9600 bauds / 1MHz
236 ; 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
237 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
239 TERMMCTLW_INI .equ 2081h
241 .CASE 31250 ; MIDI interface
242 ; Configure UART_TERM @ 31250 bauds / 2MHz
243 ; 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
244 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
246 TERMMCTLW_INI .equ 0001h
249 ; Configure UART_TERM @ 19200 bauds / 1MHz
250 ; 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
251 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
253 TERMMCTLW_INI .equ 0241h
256 ; Configure UART_TERM @ 115200 bauds / 4MHz
257 ; 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
258 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
260 TERMMCTLW_INI .equ 0BB21h
263 ; Configure UCBx_TERM for I2C @ 100kHZ / 2MHz
267 ; Configure UART_TERM @ 57600 bauds / 1MHz
268 ; N=1000000/57600=17.301... ==> UCOS16=0, UCBR0=int(N)=17, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.301)=0x4A
269 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
271 TERMMCTLW_INI .equ 04A00h
274 ; Configure UART_TERM @ 115200 bauds / 1MHz
275 ; N=1000000/115200=8.68055... ==> UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.68055)=0xD6
276 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
278 TERMMCTLW_INI .equ 0D600h
280 .CASE 250000 ; DMX interface
281 ; Configure UART_TERM @ 250000 bauds / 2MHz
282 ; N=2000000/250000=8 ==> UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0)=0
283 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
285 TERMMCTLW_INI .equ 0000h
287 .CASE 268800 ; PL2303TA baudrate
288 ; Configure UART_TERM @ 134400 bauds / 1MHz
289 ; N=1000000/134400=7.440476 ==> UCOS16=0, UCBR0=int(N)=7, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.440476)=0x55
290 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
292 TERMMCTLW_INI .equ 05500h
295 ; Configure UCBx_TERM for I2C @ 400kHZ / 2MHz
298 .CASE 403200 ; PL2303TA baudrate
299 ; Configure UART_TERM @ 201600 bauds / 1MHz
300 ; N=1000000/201600=4.955401 ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.200396)=0xFE
301 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
303 TERMMCTLW_INI .equ 0FE00h
305 .CASE 460800 ; CP2102 baudrate
306 ; Configure UART_TERM @ 921600 bauds / 4MHz
307 ; N = 4000000/460800 = 4.34027... ==> {UCOS16=0, UCBR1=int(N)=4, UCBRF1=dont_care=0 UCBRS1=fn(frac(N))=fn(0.34027)=0x49
308 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
310 TERMMCTLW_INI .equ 04900h
312 .CASE 614400 ; PL2303TA baudrate
313 ; Configure UART_TERM @ 2457600 bauds / 8MHz
314 ; N = 8000000/2457600 = 3.25521... ==> {UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.25521)=0x44
315 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
317 TERMMCTLW_INI .equ 04400h
319 .CASE 806400 ; PL2303TA baudrate
320 ; Configure UART_TERM @ 806400 bauds / 2MHz
321 ; Configure UART_TERM @ 403200 bauds / 1MHz
322 ; N=1000000/403200=2.48016 ==> UCOS16=0, UCBR0=int(N)=2, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.48016)=0x55
323 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
325 TERMMCTLW_INI .equ 05500h
328 ;; Configure UART_TERM @ 921600 bauds / 2MHz
329 ;; N = 2000000/921600 = 2.170138... ==> {UCOS16=0, UCBR1=int(N)=2, UCBRF1=dont_care=0 UCBRS1=fn(frac(N))=fn(0.170138)=0x11
330 ;; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
332 ;TERMMCTLW_INI .equ 01100h
336 .error "UART_TERM / 2 MHz : baudrate not implemented"
339 .ELSEIF FREQUENCY = 4
340 .SWITCH TERMINALBAUDRATE
342 ; Configure UART_TERM @ 9600 bauds / 4MHz
343 ; 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
344 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
346 TERMMCTLW_INI .equ 0D601h
349 ; Configure UART_TERM @ 19200 bauds / 4MHz
350 ; 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
351 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
353 TERMMCTLW_INI .equ 4901h
355 .CASE 31250 ; MIDI interface
356 ; Configure UART_TERM @ 31250 bauds / 4MHz
357 ; 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
358 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
360 TERMMCTLW_INI .equ 0001h
363 ; Configure UART_TERM @ 38400 bauds / 4MHz
364 ; 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
365 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
367 TERMMCTLW_INI .equ 02081h
370 ; Configure UART_TERM @ 57600 bauds / 4MHz
371 ; 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
372 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
374 TERMMCTLW_INI .equ 5551h
377 ; Configure UCBx_TERM for I2C @ 100kHZ / 4MHz
381 ; Configure UART_TERM @ 115200 bauds / 4MHz
382 ; 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
383 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
385 TERMMCTLW_INI .equ 0BB21h
388 ; Configure UART_TERM @ 230400 bauds / 4MHz
389 ; see table "Recommended Settings for Typical Crystals and Baudrates"
391 TERMMCTLW_INI .equ 04A00h
393 .CASE 250000 ; DMX interface
394 ; Configure UART_TERM @ 250000 bauds / 4MHz
395 ; 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
396 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
398 TERMMCTLW_INI .equ 0001h
401 ; Configure UCBx_TERM for I2C @ 400kHZ / 4MHz
405 ; Configure UART_TERM @ 460800 bauds / 4MHz
406 ; N = 8000000/921600 = 8.680555... ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.68055)=0xD6
407 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
409 TERMMCTLW_INI .equ 0D600h
411 .CASE 806400 ; PL2303TA baudrate
412 ; Configure UART_TERM @ 806400 bauds / 4MHz
413 ; Configure UART_TERM @ 201600 bauds / 1MHz
414 ; N=1000000/201600=4.955401 ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.200396)=0xFE
415 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
417 TERMMCTLW_INI .equ 0FE00h
419 .CASE 921600 ; CP2102 baudrate
420 ; Configure UART_TERM @ 921600 bauds / 4MHz
421 ; N = 8000000/921600 = 4.34027... ==> {UCOS16=0, UCBR1=int(N)=4, UCBRF1=dont_care=0 UCBRS1=fn(frac(N))=fn(0.34027)=0x49
422 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
424 TERMMCTLW_INI .equ 04900h
426 .CASE 1228800 ; PL2303TA baudrate
427 ; Configure UART_TERM @ 2457600 bauds / 8MHz
428 ; N = 8000000/1228800 = 3.25521... ==> {UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.25521)=0x44
429 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
431 TERMMCTLW_INI .equ 04400h
435 .error "UART_TERM / 4 MHz : baudrate not implemented"
436 .ENDCASE ; UART_TERM / 4 MHz baudrates
439 .ELSEIF FREQUENCY = 8
440 .SWITCH TERMINALBAUDRATE
442 ; Configure UART_TERM @ 9600 bauds / 8MHz
443 ; 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
445 TERMMCTLW_INI .equ 4911h
448 ; Configure UART_TERM @ 19200 bauds / 8MHz
449 ; 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
450 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
452 TERMMCTLW_INI .equ 0D601h
454 .CASE 31250 ; MIDI interface
455 ; Configure UART_TERM @ 31250 bauds / 8MHz
456 ; 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
457 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
459 TERMMCTLW_INI .equ 0001h
462 ; Configure UART_TERM @ 38400 bauds / 8MHz
463 ; 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
464 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
466 TERMMCTLW_INI .equ 4901h
469 ; Configure UART_TERM @ 57600 bauds / 8MHz
470 ; 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
471 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
473 TERMMCTLW_INI .equ 0F7A1h
476 ; Configure UCBx_TERM for I2C @ 100kHZ / 8MHz
480 ; Configure UART_TERM @ 115200 bauds / 8MHz
481 ; 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
482 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
484 TERMMCTLW_INI .equ 5551h
487 ; Configure UART_TERM @ 230400 bauds / 8MHz
488 ; 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
489 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
491 TERMMCTLW_INI .equ 0BB21h
493 .CASE 250000 ; DMX interface
494 ; Configure UART_TERM @ 250000 bauds / 8MHz
495 ; 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
496 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
498 TERMMCTLW_INI .equ 0001h
501 ; Configure UCBx_TERM for I2C @ 400kHZ / 8MHz
505 ; Configure UART_TERM @ 460800 bauds / 8MHz
506 ; see table "Recommended Settings for Typical Crystals and Baudrates"
508 TERMMCTLW_INI .equ 04A00h
510 .CASE 614400 ; PL2303TA baudrate
511 ; Configure UART_TERM @ 614400 bauds / 8MHz
512 ; N = 8000000/614400 = 13.02083... ==> {UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.02083)=0x02
513 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
515 TERMMCTLW_INI .equ 00200h
517 .CASE 806400 ; PL2303TA baudrate
518 ; Configure UART_TERM @ 806400 bauds / 8MHz
519 ; Configure UART_TERM @ 100800 bauds / 1MHz
520 ; N=1000000/100800=9,920634 ==> UCOS16=0, UCBR0=int(N)=9, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.920634)=0xFD
521 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
523 TERMMCTLW_INI .equ 0FD00h
526 ; Configure UART_TERM @ 921600 bauds / 8MHz
527 ; Configure UART_TERM @ 1843200 bauds / 16MHz
528 ; N = 16000000/1843200 = 8.680555... ==> {UCOS16=0, UCBR1=int(N)=8, UCBRF1=dont_care=0 UCBRS1=fn(frac(N))=fn(0.68055)=0xD6
529 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
531 TERMMCTLW_INI .equ 0D600h
534 ; Configure UART_TERM @ 1000000 bauds / 8MHz
535 ; Configure UART_TERM @ 2000000 bauds / 16MHz
536 ; N = 16000000/2000000 = 8 ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
538 TERMMCTLW_INI .equ 00000h
540 .CASE 1228800 ; PL2303TA baudrate
541 ; Configure UART_TERM @ 1228800 bauds / 8MHz
542 ; N = 8000000/1228800 = 6.510416... ==> {UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.510416)=0xAA
543 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
545 TERMMCTLW_INI .equ 0AA00h
547 .CASE 1382400 ; CP2102 baudrate
548 ; Configure UART_TERM @ 1382400 bauds / 8MHz
549 ; N = 8000000/1382400 = 5.787037... ==> {UCOS16=0, UCBR0=int(N)=5, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.787037)=0xED
551 TERMMCTLW_INI .equ 0DD00h
553 .CASE 1843200 ; CP2102 baudrate (with programming)
554 ; Configure UART_TERM @ 1843200 bauds / 8MHz
555 ; N = 16000000/1843200 = 4.34027... ==> {UCOS16=0, UCBR1=int(N)=4, UCBRF1=dont_care=0 UCBRS1=fn(frac(N))=fn(0.34027)=0x49
556 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
558 TERMMCTLW_INI .equ 04900h
560 .CASE 2457600 ; PL2303TA baudrate
561 ; Configure UART_TERM @ 2457600 bauds / 8MHz
562 ; N = 8000000/1228800 = 3.25521... ==> {UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.25521)=0x44
563 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
565 TERMMCTLW_INI .equ 04400h
567 .CASE 3000000 ; PL2303TA baudrate
568 ; Configure UART_TERM @ 3000000 bauds / 8MHz
569 ; Configure UART_TERM @ 6000000 bauds / 16MHz
570 ; N = 16000000/6000000 = 2.6666.. ==> {UCOS16=0, UCBR0=int(N)=2, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.6666)=0xB6
572 TERMMCTLW_INI .equ 0B600h
575 .error "UART_TERM / 8 MHz : baudrate not implemented"
576 .ENDCASE ; UART_TERM / 8 MHz baudrates
580 .ELSEIF FREQUENCY = 10
581 .SWITCH TERMINALBAUDRATE
583 ; Configure UART_TERM @ 9600 bauds / 10MHz
584 ; Configure UART_TERM @ 19200 bauds / 20MHz
585 ; N=20000000/19200=1041.66666 ==> UCOS16=1, UCBR0=int(N/16)=65, UCBRF0=int(frac(N/16)*16)=1, UCBRS0= fn(frac(N))=fn(0.66666)=0xd6
586 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
588 TERMMCTLW_INI .equ 0D611h
591 ; Configure UART_TERM @ 19200 bauds / 10MHz
592 ; Configure UART_TERM @ 38400 bauds / 20MHz
593 ; N=20000000/38400=520.833333 ==> UCOS16=1, UCBR0=int(N/16)=32, UCBRF0=int(frac(N/16)*16)=8, UCBRS0= fn(frac(N))=fn(0)=0xBF
594 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
596 TERMMCTLW_INI .equ 0BF01h
598 .CASE 31250 ; MIDI interface
599 ; Configure UART_TERM @ 31250 bauds / 10MHz
600 ; N=10000000/31250=320 ==> UCOS16=1, UCBR0=int(N/16)=20, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0)=0
601 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
603 TERMMCTLW_INI .equ 0001h
606 ; Configure UART_TERM @ 38400 bauds / 10MHz
607 ; N=10000000/38400=260.41666 ==> UCOS16=1, UCBR0=int(N/16)=16, UCBRF0=int(frac(N/16)*16)=4, UCBRS0= fn(frac(N))=fn(.04166)=0x92
608 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
610 TERMMCTLW_INI .equ 09241h
613 ; Configure UART_TERM @ 57600 bauds / 10MHz
614 ; Configure UART_TERM @ 115200 bauds / 20MHz
615 ; N=20000000/115200=173.61111... ==> UCOS16=1, UCBR0=int(N/16)=10, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0.6111)=0xAD
616 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
618 TERMMCTLW_INI .equ 0AD01h
621 ; Configure UCBx_TERM for I2C @ 100kHZ / 10MHz
625 ; Configure UART_TERM @ 115200 bauds / 10MHz
626 ; Configure UART_TERM @ 230400 bauds / 20MHz
627 ; N=20000000/230400=86.80555... ==> UCOS16=1, UCBR0=int(N/16)=5, UCBRF0=int(frac(N/16)*16)=6, UCBRS0= fn(frac(N))=fn(0.80555)=0xEE
628 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
630 TERMMCTLW_INI .equ 0EE61h
633 ; Configure UART_TERM @ 230400 bauds / 10MHz
634 ; Configure UART_TERM @ 460800 bauds / 20MHz
635 ; N=20000000/460800=43.402777... ==> UCOS16=1, UCBR0=int(N/16)=2, UCBRF0=int(frac(N/16)*16)=0Bh, UCBRS0= fn(frac(N))=fn(0.4027)=0x92
636 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
638 TERMMCTLW_INI .equ 92B1h
640 .CASE 250000 ; DMX interface
641 ; Configure UART_TERM @ 250000 bauds / 10MHz
642 ; Configure UART_TERM @ 500000 bauds / 20MHz
643 ; N = 20000000/500000 = 40 ==> {UCOS16=1, UCBR0=int(N/16)=2, UCBRF0=int(frac(N/16)*16)=8 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
644 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
646 TERMMCTLW_INI .equ 0081h
649 ; Configure UCBx_TERM for I2C @ 400kHZ / 10MHz
653 ; Configure UART_TERM @ 460800 bauds / 10MHz
654 ; Configure UART_TERM @ 921600 bauds / 20MHz
655 ; N = 20000000/921600 = 21.701388... ==> {UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=int(frac(N/16)*16)=5 UCBRS0=fn(frac(N))=fn(0.70138)=0xB7
656 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
658 TERMMCTLW_INI .equ 0B751h
660 .CASE 500000 ; CP2102 baudrate
661 ; Configure UART_TERM @ 500000 bauds / 10MHz
662 ; Configure UART_TERM @ 1000000 bauds / 20MHz
663 ; N = 20000000/1000000 = 20 ==> {UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=int(frac(N/16)*16)=4, UCBRS0=fn(frac(N))=fn(0.000)=0x00
664 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
666 TERMMCTLW_INI .equ 0041h
669 ; Configure UART_TERM @ 614400 bauds / 10MHz
670 ; Configure UART_TERM @ 1228800 bauds / 20MHz
671 ; N = 20000000/1228800 = 16.276... ==> {UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=int(frac(N/16)*16)=0, UCBRS0=fn(frac(N))=fn(0.276)=0x44
673 TERMMCTLW_INI .equ 04411h
676 ; Configure UART_TERM @ 921600 bauds / 10MHz
677 ; Configure UART_TERM @ 1843200 bauds / 20MHz
678 ; N = 20000000/1843200 = 10.85069... {UCOS16=0, UCBR0=int(N)=10, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.85069)=0xDF
679 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
681 TERMMCTLW_INI .equ 0DF00h
684 ; Configure UART_TERM @ 1000000 bauds / 10MHz
685 ; N = 10000000/1000000 = 10 ==> {UCOS16=0, UCBR0=int(N)=10, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.0)=0x00
686 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
691 ; Configure UART_TERM @ 1228800 bauds / 10MHz
692 ; N = 10000000/1228800 = 8.138.. ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.138)=0x10
694 TERMMCTLW_INI .equ 01000h
697 ; Configure UART_TERM @ 1382400 bauds / 10MHz
698 ; N = 10000000/1382400 = 7.2338.. ==> {UCOS16=0, UCBR0=int(N)=7, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.2338)=0x22
700 TERMMCTLW_INI .equ 02200h
703 ; Configure UART_TERM @ 1843200 bauds / 10MHz
704 ; N = 10000000/1843200 = 5.4253... {UCOS16=0, UCBR0=int(N)=5, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.4253)=0x92
705 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
707 TERMMCTLW_INI .equ 09200h
709 .CASE 2457600 ; PL2303TA baudrate
710 ; Configure UART_TERM @ 2457600 bauds / 10MHz
711 ; N = 10000000/2457600 = 4.069010... ==> {UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.06901)=0x01
712 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
714 TERMMCTLW_INI .equ 00100h
716 .CASE 3000000 ; PL2303TA baudrate
717 ; Configure UART_TERM @ 3000000 bauds / 10MHz
718 ; Configure UART_TERM @ 6000000 bauds / 20MHz
719 ; N = 20000000/6000000 = 3.3333333 ==> {UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.33333)=0x49
721 TERMMCTLW_INI .equ 04900h
724 .error "UART_TERM / 10 MHz : baudrate not implemented"
725 .ENDCASE ; UART_TERM / 10 MHz baudrates
727 .ELSEIF FREQUENCY = 12
728 .SWITCH TERMINALBAUDRATE
730 ; Configure UART_TERM @ 9600 bauds / 12MHz
731 ; Configure UART_TERM @ 19200 bauds / 24MHz
732 ; N=12000000/19200=1250 ==> UCOS16=1, UCBR0=int(N/16)=78, UCBRF0=int(frac(N/16)*16)=2, UCBRS0= fn(frac(N))=fn(0)=0x00
733 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
735 TERMMCTLW_INI .equ 0021h
738 ; Configure UART_TERM @ 19200 bauds / 12MHz
739 ; Configure UART_TERM @ 38400 bauds / 24MHz
740 ; 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
741 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
743 TERMMCTLW_INI .equ 0011h
745 .CASE 31250 ; MIDI interface
746 ; Configure UART_TERM @ 31250 bauds / 8MHz
747 ; N=12000000/31250=384 ==> UCOS16=1, UCBR0=int(N/16)=24, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0)=0
748 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
753 ; Configure UART_TERM @ 38400 bauds / 12MHz
754 ; N=12000000/19200=312.5... ==> UCOS16=1, UCBR0=int(N/16)=19, UCBRF0=int(frac(N/16)*16)=8, UCBRS0= fn(frac(N))=fn(0.5)=0x55
755 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
757 TERMMCTLW_INI .equ 05581h
760 ; Configure UART_TERM @ 57600 bauds / 12MHz
761 ; Configure UART_TERM @ 115200 bauds / 24MHz
762 ; 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
763 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
765 TERMMCTLW_INI .equ 04901h
768 ; Configure UCBx_TERM for I2C @ 100kHZ / 12MHz
772 ; Configure UART_TERM @ 115200 bauds / 12MHz
773 ; Configure UART_TERM @ 230400 bauds / 24MHz
774 ; 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
775 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
777 TERMMCTLW_INI .equ 2081h
780 ; Configure UART_TERM @ 230400 bauds / 12MHz
781 ; Configure UART_TERM @ 460800 bauds / 24MHz
782 ; 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
783 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
785 TERMMCTLW_INI .equ 0241h
787 .CASE 250000 ; DMX interface
788 ; Configure UART_TERM @ 250000 bauds / 12MHz
789 ; Configure UART_TERM @ 500000 bauds / 24MHz
790 ; 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
791 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
793 ;TERMMCTLW_INI .equ 0001h
796 ; Configure UCBx_TERM for I2C @ 400kHZ / 12MHz
800 ; Configure UART_TERM @ 460800 bauds / 12MHz
801 ; Configure UART_TERM @ 921600 bauds / 24MHz
802 ; 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
803 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
805 TERMMCTLW_INI .equ 00A1h
807 .CASE 500000 ; CP2102 baudrate
808 ; Configure UART_ @ 500000 bauds / 12MHz
809 ; Configure UART_ @ 1000000 bauds / 24MHz
810 ; 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
811 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
813 TERMMCTLW_INI .equ 0041h
816 ; Configure UART_TERM @ 614400 bauds / 12MHz
817 ; Configure UART_TERM @ 1228800 bauds / 24MHz
818 ; N = 24000000/1228800 = 19.531... ==> {UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=int(frac(N/16)*16)=3, UCBRS0=fn(frac(N))=fn(0.531)=0xAA
820 TERMMCTLW_INI .equ 0AA31h
823 ; Configure UART_TERM @ 921600 bauds / 12MHz
824 ; Configure UART_TERM @ 1843200 bauds / 24MHz
825 ; N = 24000000/1843200 = 13.08203... {UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.08203)=0x02
826 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
828 TERMMCTLW_INI .equ 04A00h
831 ; Configure UART_TERM @ 1000000 bauds / 12MHz
832 ; N = 12000000/1000000 = 12 ==> {UCOS16=0, UCBR0=int(N)=12, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
833 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
837 .CASE 1228800 ; PL2303TA baudrate
838 ; Configure UART_TERM @ 1228800 bauds / 12MHz
839 ; Configure UART_TERM @ 2457600 bauds / 24MHz
840 ; N = 24000000/2457600 = 9.765625... ==> {UCOS16=0, UCBR0=int(N)=9, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.765625)=0xDD
841 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
843 TERMMCTLW_INI .equ 0dd00h
845 .CASE 1382400 ; CP2102 baudrate (with programming)
846 ; Configure UART_TERM @ 1382400 bauds / 12MHz
847 ; N = 12000000/1382400 = 8.68055... ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.68055)=0x6B
849 TERMMCTLW_INI .equ 06B00h
851 .CASE 1843200 ; CP2102 baudrate (with programming)
852 ; Configure UART_TERM @ 1843200 bauds / 12MHz
853 ; N = 12000000/1843200 = 6.510416... ==> {UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.5104)=0xaa
855 TERMMCTLW_INI .equ 0AA00h
858 ; Configure UART_TERM @ 2000000 bauds / 12MHz
859 ; Configure UART_TERM @ 4000000 bauds / 24MHz
860 ; N = 24000000/4000000 = 6... ==> {UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.0000000)=0
861 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
865 .CASE 2457600 ; PL2303TA baudrate
866 ; Configure UART_TERM @ 1228800 bauds / 12MHz
867 ; N = 12000000/2457600 = 4.8828... ==> {UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.8828)=0xF7
868 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
870 TERMMCTLW_INI .equ 0F700h
872 .CASE 3000000 ; PL2303TA baudrate
873 ; Configure UART_TERM @ 3000000 bauds / 12MHz
874 ; Configure UART_TERM @ 6000000 bauds / 24MHz
875 ; N = 24000000/6000000 = 4 ==> {UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
880 .error "UART_TERM / 12 MHz : baudrate not implemented"
881 .ENDCASE ; UART_TERM / 12 MHz baudrates
887 .ELSEIF FREQUENCY = 16
888 .SWITCH TERMINALBAUDRATE
890 ; Configure UART_TERM @ 9600 bauds / 16MHz
891 ; 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
892 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
894 TERMMCTLW_INI .equ 0D621h
897 ; Configure UART_TERM @ 19200 bauds / 16MHz
898 ; 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
899 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
901 TERMMCTLW_INI .equ 4911h
903 .CASE 31250 ; MIDI interface
904 ; Configure UART_TERM @ 31250 bauds / 16MHz
905 ; 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
906 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
908 TERMMCTLW_INI .equ 0001h
911 ; Configure UART_TERM @ 38400 bauds / 16MHz
912 ; 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
913 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
915 TERMMCTLW_INI .equ 0D601h
918 ; Configure UART_TERM @ 57600 bauds / 16MHz
919 ; 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
920 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
922 TERMMCTLW_INI .equ 0DD51h
925 ; Configure UCBx_TERM for I2C @ 100kHZ / 16MHz
929 ; Configure UART_TERM @ 115200 bauds / 16MHz
930 ; 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
931 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
933 TERMMCTLW_INI .equ 0F7A1h
936 ; Configure UART_TERM @ 230400 bauds / 16MHz
937 ; 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
938 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
940 TERMMCTLW_INI .equ 5551h
942 .CASE 250000 ; DMX interface
943 ; Configure UART_TERM @ 250000 bauds / 16MHz
944 ; 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
945 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
947 TERMMCTLW_INI .equ 0001h
950 ; Configure UCBx_TERM for I2C @ 400kHZ / 16MHz
954 ; Configure UART_TERM @ 460800 bauds / 16MHz
955 ; 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
956 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
958 TERMMCTLW_INI .equ 0BB21h
960 .CASE 500000 ; CP2102 baudrate
961 ; Configure UART_TERM @ 500000 bauds / 16MHz
962 ; N = 16000000/500000 = 32 ==> {UCOS16=1, UCBR0=int(N/16)=2, UCBRF1=int(frac(N/16)*16)=0 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
963 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
965 ;TERMMCTLW_INI .equ 00001h
968 ;; Configure UART_TERM @ 921600 bauds / 16MHz
969 ; N = 1600000/921600 = 17.3611... ==> {UCOS16=0, UCBR0=int(N)=14, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.3611)=0x4A
970 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
972 TERMMCTLW_INI .equ 04A00h
973 ; Configure UART_TERM @ 921600 bauds / 16MHz
974 ; N = 16000000/921600 = 17.3611 ==> {UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=int(frac(N/16)*16)=1 UCBRS0=fn(frac(N))=fn(0.3611)=0x4A
975 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
977 ;TERMMCTLW_INI .equ 04A11h
980 ; Configure UART_TERM @ 1000000 bauds / 16MHz
981 ; N = 16000000/1000000 = 16 ==> {UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=0 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
982 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
984 TERMMCTLW_INI .equ 00001h
986 .CASE 1228800 ; PL2303TA baudrate
987 ; Configure UART_TERM @ 1228800 bauds / 16MHz
988 ; Configure UART_TERM @ 614400 bauds / 8MHz
989 ; N = 8000000/614400 = 13.02083... ==> {UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.02083)=0x02
990 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
992 TERMMCTLW_INI .equ 00200h
994 .CASE 1382400 ; CP2102 baudrate (with programming)
995 ; Configure UART_TERM @ 1382400 bauds / 16MHz
996 ; N = 16000000/1382400 = 11.574074... ==> {UCOS16=0, UCBR0=int(N)=11, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.68055)=0x6B
998 TERMMCTLW_INI .equ 06B00h
1000 .CASE 1843200 ; CP2102 baudrate (with programming)
1001 ; Configure UART_TERM @ 1843200 bauds / 16MHz
1002 ; N = 16000000/1843200 = 8.680555... ==> {UCOS16=0, UCBR1=int(N)=8, UCBRF1=dont_care=0 UCBRS1=fn(frac(N))=fn(0.68055)=0xD6
1003 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1005 TERMMCTLW_INI .equ 0D600h
1008 ; Configure UART_TERM @ 2000000 bauds / 16MHz
1009 ; N = 16000000/2000000 = 8 ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
1011 TERMMCTLW_INI .equ 00000h
1013 .CASE 2457600 ; PL2303TA baudrate
1014 ; Configure UART_TERM @ 1228800 bauds / 8MHz
1015 ; N = 8000000/1228800 = 6.510416... ==> {UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.510416)=0xAA
1016 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1018 TERMMCTLW_INI .equ 0AA00h
1021 ; Configure UART_TERM @ 2764800 bauds / 16MHz
1022 ; N = 16000000/2764800 = 5.787037... ==> {UCOS16=0, UCBR0=int(N)=5, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.787037)=0xED
1024 TERMMCTLW_INI .equ 0DD00h
1026 .CASE 3000000 ; PL2303TA baudrate
1027 ; Configure UART_TERM @ 3000000 bauds / 16MHz
1028 ; N = 16000000/3000000 = 5.333333... ==> {UCOS16=0, UCBR0=int(N)=5, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.333333)=0x49
1029 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1031 TERMMCTLW_INI .equ 04900h
1033 .CASE 4000000 ; PL203HXD baudrate
1034 ; Configure UART_TERM @ 4000000 bauds / 16MHz
1035 ; N = 16000000/4000000 = 4... ==> {UCOS16=0, UCBR0=int(N)=0, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.0000000)=0
1036 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1038 TERMMCTLW_INI .equ 0
1040 .CASE 5000000 ; PL203HXD baudrate
1041 ; Configure UART_TERM @ 5000000 bauds / 16MHz
1042 ; N = 16000000/5000000 = 3.2... ==> {UCOS16=0, UCBR0=int(N)=0, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.2)=0x11
1043 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1045 TERMMCTLW_INI .equ 02100h
1047 .CASE 6000000 ; PL2303TA baudrate
1048 ; Configure UART_TERM @ 6000000 bauds / 24MHz
1049 ; N = 16000000/6000000 = 2.6666.. ==> {UCOS16=0, UCBR0=int(N)=2, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.6666)=0xB6
1051 TERMMCTLW_INI .equ 0B600h
1054 .error "UART_TERM / 16 MHz : baudrate not implemented"
1055 .ENDCASE ; UART_TERM / 16 MHz baudrates
1057 .ELSEIF FREQUENCY = 20
1058 .SWITCH TERMINALBAUDRATE
1060 ; Configure UART_TERM @ 9600 bauds / 20MHz
1061 ; N=20000000/9600=2083.3333 ==> UCOS16=1, UCBR0=int(N/16)=130, UCBRF0=int(frac(N/16)*16)=3, UCBRS0= fn(frac(N))=(fn(.3333))=0x25
1062 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1063 TERMBRW_INI .equ 130
1064 TERMMCTLW_INI .equ 2531h
1067 ; Configure UART_TERM @ 19200 bauds / 20MHz
1068 ; N=20000000/19200=1041.66666 ==> UCOS16=1, UCBR0=int(N/16)=65, UCBRF0=int(frac(N/16)*16)=1, UCBRS0= fn(frac(N))=fn(0.66666)=0xd6
1069 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1071 TERMMCTLW_INI .equ 0D611h
1073 .CASE 31250 ; MIDI interface
1074 ; Configure UART_TERM @ 31250 bauds / 20MHz
1075 ; N=20000000/31250=640 ==> UCOS16=1, UCBR0=int(N/16)=40, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0)=0
1076 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1078 TERMMCTLW_INI .equ 0001h
1081 ; Configure UART_TERM @ 38400 bauds / 20MHz
1082 ; N=20000000/38400=520.833333 ==> UCOS16=1, UCBR0=int(N/16)=32, UCBRF0=int(frac(N/16)*16)=8, UCBRS0= fn(frac(N))=fn(0)=0xBF
1083 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1085 TERMMCTLW_INI .equ 0BF01h
1088 ; Configure UART_TERM @ 57600 bauds / 20MHz
1089 ; N=20000000/57600=346.0207... ==> UCOS16=1, UCBR0=int(N/16)=21, UCBRF0=int(frac(N/16)*16)=0Ah, UCBRS0= fn(frac(N))=fn(0.0207)=0x00
1090 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1092 TERMMCTLW_INI .equ 000A1h
1095 ; Configure UCBx_TERM for I2C @ 100kHZ / 20MHz
1096 TERMBRW_INI .equ 200
1099 ; Configure UART_TERM @ 115200 bauds / 20MHz
1100 ; N=20000000/115200=173.61111... ==> UCOS16=1, UCBR0=int(N/16)=10, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0.6111)=0xAD
1101 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1103 TERMMCTLW_INI .equ 0AD01h
1106 ; Configure UART_TERM @ 230400 bauds / 20MHz
1107 ; N=20000000/230400=86.80555... ==> UCOS16=1, UCBR0=int(N/16)=5, UCBRF0=int(frac(N/16)*16)=6, UCBRS0= fn(frac(N))=fn(0.80555)=0xEE
1108 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1110 TERMMCTLW_INI .equ 0EE61h
1112 .CASE 250000 ; DMX interface
1113 ; Configure UART_TERM @ 250000 bauds / 20MHz
1114 ; N=20000000/250000=80 ==> UCOS16=1, UCBR0=int(N/16)=5, UCBRF0=int(frac(N/16)*16)=0, UCBRS0= fn(frac(N))=fn(0)=0
1115 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1117 TERMMCTLW_INI .equ 0001h
1120 ; Configure UCBx_TERM for I2C @ 400kHZ / 20MHz
1124 ; Configure UART_TERM @ 460800 bauds / 20MHz
1125 ; N=20000000/460800=43.402777... ==> UCOS16=1, UCBR0=int(N/16)=2, UCBRF0=int(frac(N/16)*16)=0Bh, UCBRS0= fn(frac(N))=fn(0.4027)=0x92
1126 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1128 TERMMCTLW_INI .equ 92B1h
1130 .CASE 500000 ; CP2102 baudrate
1131 ; Configure UART_TERM @ 500000 bauds / 20MHz
1132 ; N = 20000000/500000 = 40 ==> {UCOS16=1, UCBR0=int(N/16)=2, UCBRF0=int(frac(N/16)*16)=8 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
1133 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1135 TERMMCTLW_INI .equ 0081h
1138 ; Configure UART_TERM @ 921600 bauds / 20MHz
1139 ; N = 20000000/921600 = 21.701388... ==> {UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=int(frac(N/16)*16)=5 UCBRS0=fn(frac(N))=fn(0.70138)=0xB7
1140 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1142 TERMMCTLW_INI .equ 0B751h
1145 ; Configure UART_TERM @ 1000000 bauds / 20MHz
1146 ; N = 20000000/1000000 = 20 ==> {UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=int(frac(N/16)*16)=4, UCBRS0=fn(frac(N))=fn(0.000)=0x00
1147 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1149 TERMMCTLW_INI .equ 0041h
1152 ; Configure UART_TERM @ 1228800 bauds / 20MHz
1153 ; N = 20000000/1228800 = 16.276... ==> {UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=int(frac(N/16)*16)=0, UCBRS0=fn(frac(N))=fn(0.276)=0x44
1155 TERMMCTLW_INI .equ 04411h
1158 ; Configure UART_TERM @ 1382400 bauds / 20MHz
1159 ; N = 20000000/1382400 = 14.46759... ==> {UCOS16=0, UCBR0=int(N)=14, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.46759)=0x55
1161 TERMMCTLW_INI .equ 05500h
1164 ; Configure UART_TERM @ 1843200 bauds / 20MHz
1165 ; N = 20000000/1843200 = 10.85069... {UCOS16=0, UCBR0=int(N)=10, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.85069)=0xDF
1166 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1168 TERMMCTLW_INI .equ 0DF00h
1170 .CASE 2457600 ; PL2303TA baudrate
1171 ; Configure UART_TERM @ 2457600 bauds / 20MHz
1172 ; N = 20000000/2457600 = 8.13802... ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.13802)=0x11
1173 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1175 TERMMCTLW_INI .equ 01100h
1177 .CASE 3000000 ; PL2303TA baudrate
1178 ; Configure UART_TERM @ 3000000 bauds / 20MHz
1179 ; N = 20000000/3000000 = 6.666666 ==> {UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.66666)=0xD6
1181 TERMMCTLW_INI .equ 0D600h
1183 .CASE 4000000 ; PL2303HXD baudrate
1184 ; Configure UART_TERM @ 4000000 bauds / 20MHz
1185 ; N = 20000000/4000000 = 5... ==> {UCOS16=0, UCBR0=int(N)=5, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.0000000)=0
1186 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1188 TERMMCTLW_INI .equ 0
1190 .CASE 5000000 ; PL203HXD baudrate
1191 ; Configure UART_TERM @ 5000000 bauds / 20MHz
1192 ; N = 20000000/5000000 = 4... ==> {UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.00)=0x00
1193 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1195 TERMMCTLW_INI .equ 0
1197 .CASE 6000000 ; PL2303TA baudrate
1198 ; Configure UART_TERM @ 6000000 bauds / 20MHz
1199 ; N = 20000000/6000000 = 3.3333333 ==> {UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.33333)=0x49
1201 TERMMCTLW_INI .equ 04900h
1204 .error "UART_TERM / 20 MHz : baudrate not implemented"
1205 .ENDCASE ; UART_TERM / 20 MHz baudrates
1207 .ELSEIF FREQUENCY = 24
1208 .SWITCH TERMINALBAUDRATE
1210 ; Configure UART_TERM @ 9600 bauds / 24MHz
1211 ; 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
1212 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1213 TERMBRW_INI .equ 9Ch
1214 TERMMCTLW_INI .equ 0041h
1217 ; Configure UART_TERM @ 19200 bauds / 24MHz
1218 ; 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
1219 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1220 TERMBRW_INI .equ 4Eh
1221 TERMMCTLW_INI .equ 0021h
1223 .CASE 31250 ; MIDI interface
1224 ; Configure UART_TERM @ 31250 bauds / 8MHz
1225 ; 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
1226 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1228 TERMMCTLW_INI .equ 0001h
1231 ; Configure UART_TERM @ 38400 bauds / 24MHz
1232 ; 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
1233 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1235 TERMMCTLW_INI .equ 0011h
1238 ; Configure UART_TERM @ 57600 bauds / 24MHz
1239 ; 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
1240 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1242 TERMMCTLW_INI .equ 0D601h
1245 ; Configure UCBx_TERM for I2C @ 100kHZ / 24MHz
1246 TERMBRW_INI .equ 240
1249 ; Configure UART_TERM @ 115200 bauds / 24MHz
1250 ; 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
1251 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1253 TERMMCTLW_INI .equ 04901h
1256 ; Configure UART_TERM @ 230400 bauds / 24MHz
1257 ; 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
1258 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1260 TERMMCTLW_INI .equ 2081h
1262 .CASE 250000 ; DMX interface
1263 ; Configure UART_TERM @ 250000 bauds / 24MHz
1264 ; 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
1265 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1267 TERMMCTLW_INI .equ 0001h
1270 ; Configure UCBx_TERM for I2C @ 400kHZ / 24MHz
1274 ; Configure UART_TERM @ 460800 bauds / 24MHz
1275 ; 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
1276 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1278 TERMMCTLW_INI .equ 0241h
1280 .CASE 500000 ; CP2102 baudrate
1281 ; Configure UART_TERM @ 500000 bauds / 24MHz
1282 ; 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
1283 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1285 ;TERMMCTLW_INI .equ 0001h
1288 ; Configure UART_TERM @ 921600 bauds / 24MHz
1289 ; 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
1290 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1292 TERMMCTLW_INI .equ 00A1h
1295 ; Configure UART_TERM @ 1000000 bauds / 24MHz
1296 ; 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
1297 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1299 TERMMCTLW_INI .equ 0041h
1302 ; Configure UART_TERM @ 1228800 bauds / 24MHz
1303 ; N = 24000000/1228800 = 19.531... ==> {UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=int(frac(N/16)*16)=3, UCBRS0=fn(frac(N))=fn(0.531)=0xAA
1305 TERMMCTLW_INI .equ 0AA31h
1308 ; Configure UART_TERM @ 1382400 bauds / 24MHz
1309 ; 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
1311 TERMMCTLW_INI .equ 04A11h
1314 ; Configure UART_TERM @ 1843200 bauds / 24MHz
1315 ; N = 24000000/1843200 = 13.08203... {UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.08203)=0x02
1316 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1318 TERMMCTLW_INI .equ 0200h
1320 .CASE 2457600 ; PL2303TA baudrate
1321 ; Configure UART_TERM @ 2457600 bauds / 24MHz
1322 ; N = 24000000/2457600 = 9.765625... ==> {UCOS16=0, UCBR0=int(N)=9, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.765625)=0xDD
1323 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1325 TERMMCTLW_INI .equ 0DD00h
1327 .CASE 3000000 ; PL2303TA baudrate
1328 ; Configure UART_TERM @ 3000000 bauds / 24MHz
1329 ; N = 24000000/3000000 = 8 ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
1331 TERMMCTLW_INI .equ 0
1333 .CASE 4000000 ; PL2303HXD baudrate
1334 ; Configure UART_TERM @ 4000000 bauds / 24MHz
1335 ; N = 24000000/4000000 = 6... ==> {UCOS16=0, UCBR0=int(N)=0, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.0000000)=0
1336 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1338 TERMMCTLW_INI .equ 0
1340 .CASE 5000000 ; PL203HXD baudrate
1341 ; Configure UART_TERM @ 5000000 bauds / 24MHz
1342 ; N = 24000000/5000000 = 4.8... ==> {UCOS16=0, UCBR0=int(N)=0, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.2)=0x11
1343 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1345 TERMMCTLW_INI .equ 0EE00h
1347 .CASE 6000000 ; PL2303TA baudrate
1348 ; Configure UART_TERM @ 6000000 bauds / 24MHz
1349 ; N = 24000000/6000000 = 4 ==> {UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
1351 TERMMCTLW_INI .equ 0
1354 .error "UART_TERM / 24 MHz : baudrate not implemented"
1355 .ENDCASE ; UART_TERM / 24MHz baudrates
1358 .error "UART_TERM frequency not implemented"