2 ; TERM alias eUSCI_Ax : select baudrate versus frequency
4 .SWITCH TERMINALBAUDRATE
6 ; Configure UART_TERM @ 38400 bauds / 1MHz
7 ; 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
8 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
10 TERMMCTLW_INI .equ 00A1h
12 .CASE 19200 ; PL2303TA baudrate
13 ; Configure UART_TERM @ 38400 bauds / 500kHz
14 ; N=500000/38400=13.20833 ==> UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.20833)=0x11
15 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
17 TERMMCTLW_INI .equ 1100h
19 .CASE 31250 ; MIDI interface
20 ; Configure UART_TERM @ 31250 bauds / 250kHz
21 ; N=250000/31250=8 ==> UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0)=0
22 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
24 TERMMCTLW_INI .equ 0000h
27 ; Configure UART_TERM @ 38400 bauds / 250kHz
28 ; N=250000/38400=6.5124166... ==> UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.512416)=0xAA
29 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
31 TERMMCTLW_INI .equ 0AA00h
33 .CASE 57600 ; PL2303TA baudrate
34 ; Configure UART_TERM @ 57600 bauds / 250kHz
35 ; N=250000/57600=4.340277.. ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.340277)=0x49
36 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
38 TERMMCTLW_INI .equ 04900h
40 .error "UART_TERM / 250 kHz : baudrate not implemented"
42 .ELSEIF FREQUENCY = 0.5
43 .SWITCH TERMINALBAUDRATE
45 ; Configure UART_TERM @ 19200 bauds / 1MHz
46 ; 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
47 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
49 TERMMCTLW_INI .equ 0241h
52 ; Configure UART_TERM @ 38400 bauds / 1MHz
53 ; 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
54 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
56 TERMMCTLW_INI .equ 00A1h
58 .CASE 31250 ; MIDI interface
59 ; Configure UART_TERM @ 31250 bauds / 500kHz
60 ; N=500000/31250=16 ==> UCOS16=0, UCBR0=int(N)=16, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0)=0
61 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
63 TERMMCTLW_INI .equ 0000h
65 .CASE 38400 ; PL2303TA baudrate
66 ; Configure UART_TERM @ 38400 bauds / 500kHz
67 ; N=500000/38400=13.20833 ==> UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.20833)=0x11
68 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
70 TERMMCTLW_INI .equ 1100h
73 ; Configure UART_TERM @ 115200 bauds / 1MHz
74 ; N=1000000/115200=8.68055... ==> UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.68055)=0xD6
75 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
77 TERMMCTLW_INI .equ 0D600h
79 .CASE 100800 ; PL2303TA baudrate
80 ; Configure UART_TERM @ 201600 bauds / 1MHz
81 ; N=1000000/201600=4.955401 ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.200396)=0xFE
82 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
84 TERMMCTLW_INI .equ 0FE00h
87 ; Configure UART_TERM @ 230400 bauds / 1MHz
88 ; N=1000000/230400=4.34027... ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.340277)=0x49
89 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
91 TERMMCTLW_INI .equ 04900h
93 ; .CASE 134400 ; PL2303TA baudrate
94 ; ; Configure UART_TERM @ 268800 bauds / 1MHz
95 ; ; N=1000000/134400=3.72024 ==> UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.72024)=0xBB
96 ; ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
98 ; TERMMCTLW_INI .equ 0BB00h
100 ; .CASE 161280 ; PL2303TA baudrate
101 ;; Configure UART_TERM @ 161280 bauds / 500kHz
102 ;; N=500000/161280=3.100198 ==> UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.100198)=0x08
103 ;; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
105 ;TERMMCTLW_INI .equ 01100h
107 .error "UART_TERM / 500 kHz : baudrate not implemented"
110 .ELSEIF FREQUENCY = 1
111 .SWITCH TERMINALBAUDRATE
113 ; Configure UART_TERM @ 9600 bauds / 1MHz
114 ; 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
115 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
117 TERMMCTLW_INI .equ 2081h
120 ; Configure UART_TERM @ 19200 bauds / 1MHz
121 ; 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
122 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
124 TERMMCTLW_INI .equ 0241h
126 .CASE 31250 ; MIDI interface
127 ; Configure UART_TERM @ 31250 bauds / 1MHz
128 ; 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
129 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
131 TERMMCTLW_INI .equ 0001h
134 ; Configure UART_TERM @ 38400 bauds / 1MHz
135 ; 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
136 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
138 TERMMCTLW_INI .equ 00A1h
141 ; Configure UART_TERM @ 57600 bauds / 1MHz
142 ; N=1000000/57600=17.301... ==> UCOS16=0, UCBR0=int(N)=17, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.301)=0x4A
143 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
145 TERMMCTLW_INI .equ 04A00h
148 ; Configure UCBx_TERM for I2C @ 100kHZ / 1MHz
152 .CASE 100800 ; PL2303TA baudrate
153 ; Configure UART_TERM @ 100800 bauds / 1MHz
154 ; N=1000000/100800=9,920634 ==> UCOS16=0, UCBR0=int(N)=9, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.920634)=0xFD
155 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
157 TERMMCTLW_INI .equ 0FD00h
160 ; Configure UART_TERM @ 115200 bauds / 1MHz
161 ; N=1000000/115200=8.68055... ==> UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.68055)=0xD6
162 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
164 TERMMCTLW_INI .equ 0D600h
166 .CASE 134400 ; PL2303TA baudrate
167 ; Configure UART_TERM @ 134400 bauds / 1MHz
168 ; N=1000000/134400=7.440476 ==> UCOS16=0, UCBR0=int(N)=7, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.440476)=0x55
169 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
171 TERMMCTLW_INI .equ 05500h
173 .CASE 161280 ; PL2303TA baudrate
174 ; Configure UART_TERM @ 161280 bauds / 1MHz
175 ; N=1000000/161280=6.200396 ==> UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.200396)=0x11
176 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
178 TERMMCTLW_INI .equ 01100h
180 .CASE 201600 ; PL2303TA baudrate
181 ; Configure UART_TERM @ 201600 bauds / 1MHz
182 ; N=1000000/201600=4.955401 ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.200396)=0xFE
183 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
185 TERMMCTLW_INI .equ 0FE00h
188 ; Configure UART_TERM @ 230400 bauds / 1MHz
189 ; N=1000000/230400=4.34027... ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.340277)=0x49
190 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
192 TERMMCTLW_INI .equ 04900h
194 .CASE 250000 ; DMX interface
195 ; Configure UART_TERM @ 250000 bauds / 1MHz
196 ; N=1000000/250000=4 ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0)=0
197 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
199 TERMMCTLW_INI .equ 0000h
201 ; .CASE 268800 ; PL2303TA baudrate
202 ;; Configure UART_TERM @ 268800 bauds / 1MHz
203 ;; N=1000000/268800=3.72024 ==> UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.72024)=0xBB
204 ;; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
206 ;TERMMCTLW_INI .equ 0BB00h
208 ; .CASE 403200 ; PL2303TA baudrate
209 ;; Configure UART_TERM @ 403200 bauds / 1MHz
210 ;; N=1000000/403200=2.48016 ==> UCOS16=0, UCBR0=int(N)=2, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.48016)=0x55
211 ;; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
213 ;TERMMCTLW_INI .equ 05500h
215 .error "UART_TERM / 1 MHz : baudrate not implemented"
218 .ELSEIF FREQUENCY = 2
219 .SWITCH TERMINALBAUDRATE
221 ; Configure UART_TERM @ 19200 bauds / 4MHz
222 ; 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
223 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
225 TERMMCTLW_INI .equ 4901h
228 ; Configure UART_TERM @ 9600 bauds / 1MHz
229 ; 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
230 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
232 TERMMCTLW_INI .equ 2081h
234 .CASE 31250 ; MIDI interface
235 ; Configure UART_TERM @ 31250 bauds / 2MHz
236 ; 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
237 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
239 TERMMCTLW_INI .equ 0001h
242 ; Configure UART_TERM @ 19200 bauds / 1MHz
243 ; 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
244 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
246 TERMMCTLW_INI .equ 0241h
249 ; Configure UART_TERM @ 115200 bauds / 4MHz
250 ; 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
251 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
253 TERMMCTLW_INI .equ 0BB21h
256 ; Configure UCBx_TERM for I2C @ 100kHZ / 2MHz
261 ; Configure UART_TERM @ 57600 bauds / 1MHz
262 ; N=1000000/57600=17.301... ==> UCOS16=0, UCBR0=int(N)=17, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.301)=0x4A
263 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
265 TERMMCTLW_INI .equ 04A00h
268 ; Configure UART_TERM @ 115200 bauds / 1MHz
269 ; N=1000000/115200=8.68055... ==> UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.68055)=0xD6
270 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
272 TERMMCTLW_INI .equ 0D600h
274 .CASE 250000 ; DMX interface
275 ; Configure UART_TERM @ 250000 bauds / 2MHz
276 ; N=2000000/250000=8 ==> UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0)=0
277 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
279 TERMMCTLW_INI .equ 0000h
281 .CASE 268800 ; PL2303TA baudrate
282 ; Configure UART_TERM @ 134400 bauds / 1MHz
283 ; N=1000000/134400=7.440476 ==> UCOS16=0, UCBR0=int(N)=7, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.440476)=0x55
284 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
286 TERMMCTLW_INI .equ 05500h
288 .CASE 403200 ; PL2303TA baudrate
289 ; Configure UART_TERM @ 201600 bauds / 1MHz
290 ; N=1000000/201600=4.955401 ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.200396)=0xFE
291 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
293 TERMMCTLW_INI .equ 0FE00h
295 .CASE 460800 ; CP2102 baudrate
296 ; Configure UART_TERM @ 921600 bauds / 4MHz
297 ; N = 4000000/460800 = 4.34027... ==> {UCOS16=0, UCBR1=int(N)=4, UCBRF1=dont_care=0 UCBRS1=fn(frac(N))=fn(0.34027)=0x49
298 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
300 TERMMCTLW_INI .equ 04900h
302 ; .CASE 614400 ; PL2303TA baudrate
303 ; ; Configure UART_TERM @ 2457600 bauds / 8MHz
304 ; ; N = 8000000/2457600 = 3.25521... ==> {UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.25521)=0x44
305 ; ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
307 ; TERMMCTLW_INI .equ 04400h
309 ; .CASE 806400 ; PL2303TA baudrate
310 ; ; Configure UART_TERM @ 806400 bauds / 2MHz
311 ; ; Configure UART_TERM @ 403200 bauds / 1MHz
312 ; ; N=1000000/403200=2.48016 ==> UCOS16=0, UCBR0=int(N)=2, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.48016)=0x55
313 ; ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
315 ; TERMMCTLW_INI .equ 05500h
318 ;; Configure UART_TERM @ 921600 bauds / 2MHz
319 ;; N = 2000000/921600 = 2.170138... ==> {UCOS16=0, UCBR1=int(N)=2, UCBRF1=dont_care=0 UCBRS1=fn(frac(N))=fn(0.170138)=0x11
320 ;; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
322 ;TERMMCTLW_INI .equ 01100h
324 .error "UART_TERM / 2 MHz : baudrate not implemented"
327 .ELSEIF FREQUENCY = 4
328 .SWITCH TERMINALBAUDRATE
330 ; Configure UART_TERM @ 9600 bauds / 4MHz
331 ; 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
332 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
334 TERMMCTLW_INI .equ 0D601h
337 ; Configure UART_TERM @ 19200 bauds / 4MHz
338 ; 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
339 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
341 TERMMCTLW_INI .equ 4901h
343 .CASE 31250 ; MIDI interface
344 ; Configure UART_TERM @ 31250 bauds / 4MHz
345 ; 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
346 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
348 TERMMCTLW_INI .equ 0001h
351 ; Configure UART_TERM @ 38400 bauds / 4MHz
352 ; 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
353 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
355 TERMMCTLW_INI .equ 02081h
358 ; Configure UART_TERM @ 57600 bauds / 4MHz
359 ; 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
360 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
362 TERMMCTLW_INI .equ 5551h
365 ; Configure UCBx_TERM for I2C @ 100kHZ / 4MHz
370 ; Configure UART_TERM @ 115200 bauds / 4MHz
371 ; 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
372 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
374 TERMMCTLW_INI .equ 0BB21h
377 ; Configure UART_TERM @ 230400 bauds / 4MHz
378 ; see table "Recommended Settings for Typical Crystals and Baudrates"
380 TERMMCTLW_INI .equ 04A00h
382 .CASE 250000 ; DMX interface
383 ; Configure UART_TERM @ 250000 bauds / 4MHz
384 ; 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
385 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
387 TERMMCTLW_INI .equ 0001h
390 ; Configure UART_TERM @ 460800 bauds / 4MHz
391 ; N = 8000000/921600 = 8.680555... ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.68055)=0xD6
392 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
394 TERMMCTLW_INI .equ 0D600h
396 .CASE 806400 ; PL2303TA baudrate
397 ; Configure UART_TERM @ 806400 bauds / 4MHz
398 ; Configure UART_TERM @ 201600 bauds / 1MHz
399 ; N=1000000/201600=4.955401 ==> UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.200396)=0xFE
400 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
402 TERMMCTLW_INI .equ 0FE00h
404 .CASE 921600 ; CP2102 baudrate
405 ; Configure UART_TERM @ 921600 bauds / 4MHz
406 ; N = 8000000/921600 = 4.34027... ==> {UCOS16=0, UCBR1=int(N)=4, UCBRF1=dont_care=0 UCBRS1=fn(frac(N))=fn(0.34027)=0x49
407 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
409 TERMMCTLW_INI .equ 04900h
411 ; .CASE 1228800 ; PL2303TA baudrate
412 ; ; Configure UART_TERM @ 2457600 bauds / 8MHz
413 ; ; N = 8000000/1228800 = 3.25521... ==> {UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.25521)=0x44
414 ; ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
416 ; TERMMCTLW_INI .equ 04400h
418 .error "UART_TERM / 4 MHz : baudrate not implemented"
419 .ENDCASE ; UART_TERM / 4 MHz baudrates
421 .ELSEIF FREQUENCY = 8
422 .SWITCH TERMINALBAUDRATE
424 ; Configure UART_TERM @ 9600 bauds / 8MHz
425 ; 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
427 TERMMCTLW_INI .equ 4911h
430 ; Configure UART_TERM @ 19200 bauds / 8MHz
431 ; 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
432 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
434 TERMMCTLW_INI .equ 0D601h
436 .CASE 31250 ; MIDI interface
437 ; Configure UART_TERM @ 31250 bauds / 8MHz
438 ; 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
439 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
441 TERMMCTLW_INI .equ 0001h
444 ; Configure UART_TERM @ 38400 bauds / 8MHz
445 ; 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
446 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
448 TERMMCTLW_INI .equ 4901h
451 ; Configure UART_TERM @ 57600 bauds / 8MHz
452 ; 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
453 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
455 TERMMCTLW_INI .equ 0F7A1h
458 ; Configure UCBx_TERM for I2C @ 100kHZ / 8MHz
463 ; Configure UART_TERM @ 115200 bauds / 8MHz
464 ; 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
465 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
467 TERMMCTLW_INI .equ 5551h
470 ; Configure UART_TERM @ 230400 bauds / 8MHz
471 ; 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
472 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
474 TERMMCTLW_INI .equ 0BB21h
476 .CASE 250000 ; DMX interface
477 ; Configure UART_TERM @ 250000 bauds / 8MHz
478 ; 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
479 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
481 TERMMCTLW_INI .equ 0001h
484 ; Configure UART_TERM @ 460800 bauds / 8MHz
485 ; see table "Recommended Settings for Typical Crystals and Baudrates"
487 TERMMCTLW_INI .equ 04A00h
489 .CASE 614400 ; PL2303TA baudrate
490 ; Configure UART_TERM @ 614400 bauds / 8MHz
491 ; N = 8000000/614400 = 13.02083... ==> {UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.02083)=0x02
492 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
494 TERMMCTLW_INI .equ 00200h
496 .CASE 806400 ; PL2303TA baudrate
497 ; Configure UART_TERM @ 806400 bauds / 8MHz
498 ; Configure UART_TERM @ 100800 bauds / 1MHz
499 ; N=1000000/100800=9,920634 ==> UCOS16=0, UCBR0=int(N)=9, UCBRF0=dont_care=0, UCBRS0= fn(frac(N))=fn(0.920634)=0xFD
500 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
502 TERMMCTLW_INI .equ 0FD00h
505 ; Configure UART_TERM @ 921600 bauds / 8MHz
506 ; Configure UART_TERM @ 1843200 bauds / 16MHz
507 ; N = 16000000/1843200 = 8.680555... ==> {UCOS16=0, UCBR1=int(N)=8, UCBRF1=dont_care=0 UCBRS1=fn(frac(N))=fn(0.68055)=0xD6
508 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
510 TERMMCTLW_INI .equ 0D600h
513 ; Configure UART_TERM @ 1000000 bauds / 8MHz
514 ; Configure UART_TERM @ 2000000 bauds / 16MHz
515 ; N = 16000000/2000000 = 8 ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
517 TERMMCTLW_INI .equ 00000h
519 .CASE 1228800 ; PL2303TA baudrate
520 ; Configure UART_TERM @ 1228800 bauds / 8MHz
521 ; N = 8000000/1228800 = 6.510416... ==> {UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.510416)=0xAA
522 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
524 TERMMCTLW_INI .equ 0AA00h
526 .CASE 1382400 ; CP2102 baudrate
527 ; Configure UART_TERM @ 1382400 bauds / 8MHz
528 ; N = 8000000/1382400 = 5.787037... ==> {UCOS16=0, UCBR0=int(N)=5, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.787037)=0xED
530 TERMMCTLW_INI .equ 0DD00h
532 .CASE 1843200 ; CP2102 baudrate (with programming)
533 ; Configure UART_TERM @ 1843200 bauds / 8MHz
534 ; N = 16000000/1843200 = 4.34027... ==> {UCOS16=0, UCBR1=int(N)=4, UCBRF1=dont_care=0 UCBRS1=fn(frac(N))=fn(0.34027)=0x49
535 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
537 TERMMCTLW_INI .equ 04900h
539 ; .CASE 2457600 ; PL2303TA baudrate
540 ; ; Configure UART_TERM @ 2457600 bauds / 8MHz
541 ; ; N = 8000000/1228800 = 3.25521... ==> {UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.25521)=0x44
542 ; ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
544 ; TERMMCTLW_INI .equ 04400h
546 ; .CASE 3000000 ; PL2303TA baudrate
547 ; ; Configure UART_TERM @ 3000000 bauds / 8MHz
548 ; ; Configure UART_TERM @ 6000000 bauds / 16MHz
549 ; ; N = 16000000/6000000 = 2.6666.. ==> {UCOS16=0, UCBR0=int(N)=2, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.6666)=0xB6
551 ; TERMMCTLW_INI .equ 0B600h
553 .error "UART_TERM / 8 MHz : baudrate not implemented"
554 .ENDCASE ; UART_TERM / 8 MHz baudrates
556 .ELSEIF FREQUENCY = 10
557 .SWITCH TERMINALBAUDRATE
559 ; Configure UART_TERM @ 9600 bauds / 10MHz
560 ; Configure UART_TERM @ 19200 bauds / 20MHz
561 ; 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
562 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
564 TERMMCTLW_INI .equ 0D611h
567 ; Configure UART_TERM @ 19200 bauds / 10MHz
568 ; Configure UART_TERM @ 38400 bauds / 20MHz
569 ; 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
570 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
572 TERMMCTLW_INI .equ 0BF01h
574 .CASE 31250 ; MIDI interface
575 ; Configure UART_TERM @ 31250 bauds / 10MHz
576 ; 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
577 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
579 TERMMCTLW_INI .equ 0001h
582 ; Configure UART_TERM @ 38400 bauds / 10MHz
583 ; 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
584 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
586 TERMMCTLW_INI .equ 09241h
589 ; Configure UART_TERM @ 57600 bauds / 10MHz
590 ; Configure UART_TERM @ 115200 bauds / 20MHz
591 ; 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
592 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
594 TERMMCTLW_INI .equ 0AD01h
597 ; Configure UCBx_TERM for I2C @ 100kHZ / 10MHz
602 ; Configure UART_TERM @ 115200 bauds / 10MHz
603 ; Configure UART_TERM @ 230400 bauds / 20MHz
604 ; 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
605 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
607 TERMMCTLW_INI .equ 0EE61h
610 ; Configure UART_TERM @ 230400 bauds / 10MHz
611 ; Configure UART_TERM @ 460800 bauds / 20MHz
612 ; 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
613 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
615 TERMMCTLW_INI .equ 92B1h
617 .CASE 250000 ; DMX interface
618 ; Configure UART_TERM @ 250000 bauds / 10MHz
619 ; Configure UART_TERM @ 500000 bauds / 20MHz
620 ; 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
621 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
623 TERMMCTLW_INI .equ 0081h
626 ; Configure UART_TERM @ 460800 bauds / 10MHz
627 ; Configure UART_TERM @ 921600 bauds / 20MHz
628 ; 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
629 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
631 TERMMCTLW_INI .equ 0B751h
633 .CASE 500000 ; CP2102 baudrate
634 ; Configure UART_TERM @ 500000 bauds / 10MHz
635 ; Configure UART_TERM @ 1000000 bauds / 20MHz
636 ; 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
637 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
639 TERMMCTLW_INI .equ 0041h
642 ; Configure UART_TERM @ 614400 bauds / 10MHz
643 ; Configure UART_TERM @ 1228800 bauds / 20MHz
644 ; 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
646 TERMMCTLW_INI .equ 04411h
649 ; Configure UART_TERM @ 921600 bauds / 10MHz
650 ; Configure UART_TERM @ 1843200 bauds / 20MHz
651 ; N = 20000000/1843200 = 10.85069... {UCOS16=0, UCBR0=int(N)=10, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.85069)=0xDF
652 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
654 TERMMCTLW_INI .equ 0DF00h
657 ; Configure UART_TERM @ 1000000 bauds / 10MHz
658 ; N = 10000000/1000000 = 10 ==> {UCOS16=0, UCBR0=int(N)=10, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.0)=0x00
659 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
664 ; Configure UART_TERM @ 1228800 bauds / 10MHz
665 ; N = 10000000/1228800 = 8.138.. ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.138)=0x10
667 TERMMCTLW_INI .equ 01000h
670 ; Configure UART_TERM @ 1382400 bauds / 10MHz
671 ; N = 10000000/1382400 = 7.2338.. ==> {UCOS16=0, UCBR0=int(N)=7, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.2338)=0x22
673 TERMMCTLW_INI .equ 02200h
676 ; Configure UART_TERM @ 1843200 bauds / 10MHz
677 ; N = 10000000/1843200 = 5.4253... {UCOS16=0, UCBR0=int(N)=5, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.4253)=0x92
678 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
680 TERMMCTLW_INI .equ 09200h
682 .CASE 2457600 ; PL2303TA baudrate
683 ; Configure UART_TERM @ 2457600 bauds / 10MHz
684 ; N = 10000000/2457600 = 4.069010... ==> {UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.06901)=0x01
685 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
687 TERMMCTLW_INI .equ 00100h
689 ; .CASE 3000000 ; PL2303TA baudrate
690 ; ; Configure UART_TERM @ 3000000 bauds / 10MHz
691 ; ; Configure UART_TERM @ 6000000 bauds / 20MHz
692 ; ; N = 20000000/6000000 = 3.3333333 ==> {UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.33333)=0x49
694 ; TERMMCTLW_INI .equ 04900h
697 .error "UART_TERM / 10 MHz : baudrate not implemented"
698 .ENDCASE ; UART_TERM / 10 MHz baudrates
700 .ELSEIF FREQUENCY = 12
701 .SWITCH TERMINALBAUDRATE
703 ; Configure UART_TERM @ 9600 bauds / 12MHz
704 ; Configure UART_TERM @ 19200 bauds / 24MHz
705 ; 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
706 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
708 TERMMCTLW_INI .equ 0021h
711 ; Configure UART_TERM @ 19200 bauds / 12MHz
712 ; Configure UART_TERM @ 38400 bauds / 24MHz
713 ; 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
714 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
716 TERMMCTLW_INI .equ 0011h
718 .CASE 31250 ; MIDI interface
719 ; Configure UART_TERM @ 31250 bauds / 8MHz
720 ; 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
721 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
726 ; Configure UART_TERM @ 38400 bauds / 12MHz
727 ; 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
728 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
730 TERMMCTLW_INI .equ 05581h
733 ; Configure UART_TERM @ 57600 bauds / 12MHz
734 ; Configure UART_TERM @ 115200 bauds / 24MHz
735 ; 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
736 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
738 TERMMCTLW_INI .equ 04901h
741 ; Configure UCBx_TERM for I2C @ 100kHZ / 12MHz
746 ; Configure UART_TERM @ 115200 bauds / 12MHz
747 ; Configure UART_TERM @ 230400 bauds / 24MHz
748 ; 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
749 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
751 TERMMCTLW_INI .equ 2081h
754 ; Configure UART_TERM @ 230400 bauds / 12MHz
755 ; Configure UART_TERM @ 460800 bauds / 24MHz
756 ; 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
757 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
759 TERMMCTLW_INI .equ 0241h
761 .CASE 250000 ; DMX interface
762 ; Configure UART_TERM @ 250000 bauds / 12MHz
763 ; Configure UART_TERM @ 500000 bauds / 24MHz
764 ; 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
765 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
767 ;TERMMCTLW_INI .equ 0001h
770 ; Configure UART_TERM @ 460800 bauds / 12MHz
771 ; Configure UART_TERM @ 921600 bauds / 24MHz
772 ; 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
773 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
775 TERMMCTLW_INI .equ 00A1h
777 .CASE 500000 ; CP2102 baudrate
778 ; Configure UART_ @ 500000 bauds / 12MHz
779 ; Configure UART_ @ 1000000 bauds / 24MHz
780 ; 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
781 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
783 TERMMCTLW_INI .equ 0041h
786 ; Configure UART_TERM @ 614400 bauds / 12MHz
787 ; Configure UART_TERM @ 1228800 bauds / 24MHz
788 ; 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
790 TERMMCTLW_INI .equ 0AA31h
793 ; Configure UART_TERM @ 921600 bauds / 12MHz
794 ; Configure UART_TERM @ 1843200 bauds / 24MHz
795 ; N = 24000000/1843200 = 13.08203... {UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.08203)=0x02
796 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
798 TERMMCTLW_INI .equ 00200h
801 ; Configure UART_TERM @ 1000000 bauds / 12MHz
802 ; N = 12000000/1000000 = 12 ==> {UCOS16=0, UCBR0=int(N)=12, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
803 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
807 .CASE 1228800 ; PL2303TA baudrate
808 ; Configure UART_TERM @ 1228800 bauds / 12MHz
809 ; Configure UART_TERM @ 2457600 bauds / 24MHz
810 ; N = 24000000/2457600 = 9.765625... ==> {UCOS16=0, UCBR0=int(N)=9, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.765625)=0xDD
811 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
813 TERMMCTLW_INI .equ 0dd00h
815 .CASE 1382400 ; CP2102 baudrate (with programming)
816 ; Configure UART_TERM @ 1382400 bauds / 12MHz
817 ; N = 12000000/1382400 = 8.68055... ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.68055)=0x6B
819 TERMMCTLW_INI .equ 06B00h
821 .CASE 1843200 ; CP2102 baudrate (with programming)
822 ; Configure UART_TERM @ 1843200 bauds / 12MHz
823 ; N = 12000000/1843200 = 6.510416... ==> {UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.5104)=0xaa
825 TERMMCTLW_INI .equ 0AA00h
828 ; Configure UART_TERM @ 2000000 bauds / 12MHz
829 ; Configure UART_TERM @ 4000000 bauds / 24MHz
830 ; N = 24000000/4000000 = 6... ==> {UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.0000000)=0
831 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
835 .CASE 2457600 ; PL2303TA baudrate
836 ; Configure UART_TERM @ 1228800 bauds / 12MHz
837 ; N = 12000000/2457600 = 4.8828... ==> {UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.8828)=0xF7
838 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
840 TERMMCTLW_INI .equ 0F700h
842 .CASE 3000000 ; PL2303TA baudrate
843 ; Configure UART_TERM @ 3000000 bauds / 12MHz
844 ; Configure UART_TERM @ 6000000 bauds / 24MHz
845 ; N = 24000000/6000000 = 4 ==> {UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
850 .error "UART_TERM / 12 MHz : baudrate not implemented"
851 .ENDCASE ; UART_TERM / 12 MHz baudrates
854 .ELSEIF FREQUENCY = 16
855 .SWITCH TERMINALBAUDRATE
857 ; Configure UART_TERM @ 9600 bauds / 16MHz
858 ; 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
859 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
861 TERMMCTLW_INI .equ 0D621h
864 ; Configure UART_TERM @ 19200 bauds / 16MHz
865 ; 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
866 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
868 TERMMCTLW_INI .equ 4911h
870 .CASE 31250 ; MIDI interface
871 ; Configure UART_TERM @ 31250 bauds / 16MHz
872 ; 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
873 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
875 TERMMCTLW_INI .equ 0001h
878 ; Configure UART_TERM @ 38400 bauds / 16MHz
879 ; 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
880 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
882 TERMMCTLW_INI .equ 0D601h
885 ; Configure UART_TERM @ 57600 bauds / 16MHz
886 ; 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
887 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
889 TERMMCTLW_INI .equ 0DD51h
892 ; Configure UCBx_TERM for I2C @ 100kHZ / 16MHz
897 ; Configure UART_TERM @ 115200 bauds / 16MHz
898 ; 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
899 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
901 TERMMCTLW_INI .equ 0F7A1h
904 ; Configure UART_TERM @ 230400 bauds / 16MHz
905 ; 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
906 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
908 TERMMCTLW_INI .equ 5551h
910 .CASE 250000 ; DMX interface
911 ; Configure UART_TERM @ 250000 bauds / 16MHz
912 ; 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
913 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
915 TERMMCTLW_INI .equ 0001h
918 ; Configure UART_TERM @ 460800 bauds / 16MHz
919 ; 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
920 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
922 TERMMCTLW_INI .equ 0BB21h
924 .CASE 500000 ; CP2102 baudrate
925 ; Configure UART_TERM @ 500000 bauds / 16MHz
926 ; 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
927 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
929 ;TERMMCTLW_INI .equ 00001h
932 ; Configure UART_TERM @ 921600 bauds / 16MHz
933 ; Configure UART_TERM @ 460800 bauds / 8MHz
934 ; see table "Recommended Settings for Typical Crystals and Baudrates"
936 TERMMCTLW_INI .equ 04A00h
939 ; Configure UART_TERM @ 1000000 bauds / 16MHz
940 ; N = 16000000/1000000 = 16 ==> {UCOS16=1, UCBR0=int(N/16)=1, UCBRF0=0 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
941 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
943 TERMMCTLW_INI .equ 00001h
945 .CASE 1228800 ; PL2303TA baudrate
946 ; Configure UART_TERM @ 1228800 bauds / 16MHz
947 ; Configure UART_TERM @ 614400 bauds / 8MHz
948 ; N = 8000000/614400 = 13.02083... ==> {UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.02083)=0x02
949 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
951 TERMMCTLW_INI .equ 00200h
953 .CASE 1382400 ; CP2102 baudrate (with programming)
954 ; Configure UART_TERM @ 1382400 bauds / 16MHz
955 ; N = 16000000/1382400 = 11.574074... ==> {UCOS16=0, UCBR0=int(N)=11, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.68055)=0x6B
957 TERMMCTLW_INI .equ 06B00h
959 .CASE 1843200 ; CP2102 baudrate (with programming)
960 ; Configure UART_TERM @ 1843200 bauds / 16MHz
961 ; N = 16000000/1843200 = 8.680555... ==> {UCOS16=0, UCBR1=int(N)=8, UCBRF1=dont_care=0 UCBRS1=fn(frac(N))=fn(0.68055)=0xD6
962 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
964 TERMMCTLW_INI .equ 0D600h
967 ; Configure UART_TERM @ 2000000 bauds / 16MHz
968 ; N = 16000000/2000000 = 8 ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
970 TERMMCTLW_INI .equ 00000h
972 .CASE 2457600 ; PL2303TA baudrate
973 ; Configure UART_TERM @ 1228800 bauds / 8MHz
974 ; N = 8000000/1228800 = 6.510416... ==> {UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.510416)=0xAA
975 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
977 TERMMCTLW_INI .equ 0AA00h
980 ; Configure UART_TERM @ 2764800 bauds / 16MHz
981 ; N = 16000000/2764800 = 5.787037... ==> {UCOS16=0, UCBR0=int(N)=5, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.787037)=0xED
983 TERMMCTLW_INI .equ 0DD00h
985 .CASE 3000000 ; PL2303TA baudrate
986 ; Configure UART_TERM @ 3000000 bauds / 16MHz
987 ; N = 16000000/3000000 = 5.333333... ==> {UCOS16=0, UCBR0=int(N)=5, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.333333)=0x49
988 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
990 TERMMCTLW_INI .equ 04900h
992 .CASE 4000000 ; PL203HXD baudrate
993 ; Configure UART_TERM @ 4000000 bauds / 16MHz
994 ; N = 16000000/4000000 = 4... ==> {UCOS16=0, UCBR0=int(N)=0, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.0000000)=0
995 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
999 ; .CASE 5000000 ; PL203HXD baudrate
1000 ; ; Configure UART_TERM @ 5000000 bauds / 16MHz
1001 ; ; N = 16000000/5000000 = 3.2... ==> {UCOS16=0, UCBR0=int(N)=0, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.2)=0x11
1002 ; ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1003 ; TERMBRW_INI .equ 3
1004 ; TERMMCTLW_INI .equ 02100h
1006 ; .CASE 6000000 ; PL2303TA baudrate
1007 ; ; Configure UART_TERM @ 6000000 bauds / 24MHz
1008 ; ; N = 16000000/6000000 = 2.6666.. ==> {UCOS16=0, UCBR0=int(N)=2, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.6666)=0xB6
1009 ; TERMBRW_INI .equ 2
1010 ; TERMMCTLW_INI .equ 0B600h
1013 .error "UART_TERM / 16 MHz : baudrate not implemented"
1014 .ENDCASE ; UART_TERM / 16 MHz baudrates
1016 .ELSEIF FREQUENCY = 20
1017 .SWITCH TERMINALBAUDRATE
1019 ; Configure UART_TERM @ 9600 bauds / 20MHz
1020 ; 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
1021 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1022 TERMBRW_INI .equ 130
1023 TERMMCTLW_INI .equ 2531h
1026 ; Configure UART_TERM @ 19200 bauds / 20MHz
1027 ; 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
1028 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1030 TERMMCTLW_INI .equ 0D611h
1032 .CASE 31250 ; MIDI interface
1033 ; Configure UART_TERM @ 31250 bauds / 20MHz
1034 ; 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
1035 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1037 TERMMCTLW_INI .equ 0001h
1040 ; Configure UART_TERM @ 38400 bauds / 20MHz
1041 ; 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
1042 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1044 TERMMCTLW_INI .equ 0BF01h
1047 ; Configure UART_TERM @ 57600 bauds / 20MHz
1048 ; 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
1049 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1051 TERMMCTLW_INI .equ 000A1h
1054 ; Configure UCBx_TERM for I2C @ 100kHZ / 20MHz
1055 TERMBRW_INI .equ 200
1056 TERMMCTLW_INI .equ 0
1059 ; Configure UART_TERM @ 115200 bauds / 20MHz
1060 ; 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
1061 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1063 TERMMCTLW_INI .equ 0AD01h
1066 ; Configure UART_TERM @ 230400 bauds / 20MHz
1067 ; 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
1068 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1070 TERMMCTLW_INI .equ 0EE61h
1072 .CASE 250000 ; DMX interface
1073 ; Configure UART_TERM @ 250000 bauds / 20MHz
1074 ; 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
1075 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1077 TERMMCTLW_INI .equ 0001h
1080 ; Configure UART_TERM @ 460800 bauds / 20MHz
1081 ; 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
1082 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1084 TERMMCTLW_INI .equ 92B1h
1086 .CASE 500000 ; CP2102 baudrate
1087 ; Configure UART_TERM @ 500000 bauds / 20MHz
1088 ; 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
1089 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1091 TERMMCTLW_INI .equ 0081h
1094 ; Configure UART_TERM @ 921600 bauds / 20MHz
1095 ; 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
1096 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1098 TERMMCTLW_INI .equ 0B751h
1101 ; Configure UART_TERM @ 1000000 bauds / 20MHz
1102 ; 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
1103 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1105 TERMMCTLW_INI .equ 0041h
1108 ; Configure UART_TERM @ 1228800 bauds / 20MHz
1109 ; 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
1111 TERMMCTLW_INI .equ 04411h
1114 ; Configure UART_TERM @ 1382400 bauds / 20MHz
1115 ; N = 20000000/1382400 = 14.46759... ==> {UCOS16=0, UCBR0=int(N)=14, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.46759)=0x55
1117 TERMMCTLW_INI .equ 05500h
1120 ; Configure UART_TERM @ 1843200 bauds / 20MHz
1121 ; N = 20000000/1843200 = 10.85069... {UCOS16=0, UCBR0=int(N)=10, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.85069)=0xDF
1122 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1124 TERMMCTLW_INI .equ 0DF00h
1126 .CASE 2457600 ; PL2303TA baudrate
1127 ; Configure UART_TERM @ 2457600 bauds / 20MHz
1128 ; N = 20000000/2457600 = 8.13802... ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.13802)=0x11
1129 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1131 TERMMCTLW_INI .equ 01100h
1133 .CASE 3000000 ; PL2303TA baudrate
1134 ; Configure UART_TERM @ 3000000 bauds / 20MHz
1135 ; N = 20000000/3000000 = 6.666666 ==> {UCOS16=0, UCBR0=int(N)=6, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.66666)=0xD6
1137 TERMMCTLW_INI .equ 0D600h
1139 .CASE 4000000 ; PL2303HXD baudrate
1140 ; Configure UART_TERM @ 4000000 bauds / 20MHz
1141 ; N = 20000000/4000000 = 5... ==> {UCOS16=0, UCBR0=int(N)=5, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.0000000)=0
1142 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1144 TERMMCTLW_INI .equ 0
1146 .CASE 5000000 ; PL203HXD baudrate
1147 ; Configure UART_TERM @ 5000000 bauds / 20MHz
1148 ; N = 20000000/5000000 = 4... ==> {UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.00)=0x00
1149 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1151 TERMMCTLW_INI .equ 0
1153 ; .CASE 6000000 ; PL2303TA baudrate
1154 ; ; Configure UART_TERM @ 6000000 bauds / 20MHz
1155 ; ; N = 20000000/6000000 = 3.3333333 ==> {UCOS16=0, UCBR0=int(N)=3, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.33333)=0x49
1156 ; TERMBRW_INI .equ 3
1157 ; TERMMCTLW_INI .equ 04900h
1160 .error "UART_TERM / 20 MHz : baudrate not implemented"
1161 .ENDCASE ; UART_TERM / 20 MHz baudrates
1163 .ELSEIF FREQUENCY = 24
1164 .SWITCH TERMINALBAUDRATE
1166 ; Configure UART_TERM @ 9600 bauds / 24MHz
1167 ; 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
1168 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1169 TERMBRW_INI .equ 9Ch
1170 TERMMCTLW_INI .equ 0041h
1173 ; Configure UART_TERM @ 19200 bauds / 24MHz
1174 ; 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
1175 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1176 TERMBRW_INI .equ 4Eh
1177 TERMMCTLW_INI .equ 0021h
1179 .CASE 31250 ; MIDI interface
1180 ; Configure UART_TERM @ 31250 bauds / 8MHz
1181 ; 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
1182 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1184 TERMMCTLW_INI .equ 0001h
1187 ; Configure UART_TERM @ 38400 bauds / 24MHz
1188 ; 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
1189 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1191 TERMMCTLW_INI .equ 0011h
1194 ; Configure UART_TERM @ 57600 bauds / 24MHz
1195 ; 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
1196 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1198 TERMMCTLW_INI .equ 0D601h
1201 ; Configure UCBx_TERM for I2C @ 100kHZ / 24MHz
1202 TERMBRW_INI .equ 240
1203 TERMMCTLW_INI .equ 0
1206 ; Configure UART_TERM @ 115200 bauds / 24MHz
1207 ; 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
1208 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1210 TERMMCTLW_INI .equ 04901h
1213 ; Configure UART_TERM @ 230400 bauds / 24MHz
1214 ; 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
1215 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1217 TERMMCTLW_INI .equ 2081h
1219 .CASE 250000 ; DMX interface
1220 ; Configure UART_TERM @ 250000 bauds / 24MHz
1221 ; 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
1222 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1224 TERMMCTLW_INI .equ 0001h
1227 ; Configure UART_TERM @ 460800 bauds / 24MHz
1228 ; 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
1229 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1231 TERMMCTLW_INI .equ 0241h
1233 .CASE 500000 ; CP2102 baudrate
1234 ; Configure UART_TERM @ 500000 bauds / 24MHz
1235 ; 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
1236 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1238 ;TERMMCTLW_INI .equ 0001h
1241 ; Configure UART_TERM @ 921600 bauds / 24MHz
1242 ; 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
1243 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1245 TERMMCTLW_INI .equ 00A1h
1248 ; Configure UART_TERM @ 1000000 bauds / 24MHz
1249 ; 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
1250 ; TERMBRW=UCBR1, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1252 TERMMCTLW_INI .equ 0041h
1255 ; Configure UART_TERM @ 1228800 bauds / 24MHz
1256 ; 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
1258 TERMMCTLW_INI .equ 0AA31h
1261 ; Configure UART_TERM @ 1382400 bauds / 24MHz
1262 ; 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
1264 TERMMCTLW_INI .equ 04A11h
1267 ; Configure UART_TERM @ 1843200 bauds / 24MHz
1268 ; N = 24000000/1843200 = 13.08203... {UCOS16=0, UCBR0=int(N)=13, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.08203)=0x02
1269 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1271 TERMMCTLW_INI .equ 0200h
1273 .CASE 2457600 ; PL2303TA baudrate
1274 ; Configure UART_TERM @ 2457600 bauds / 24MHz
1275 ; N = 24000000/2457600 = 9.765625... ==> {UCOS16=0, UCBR0=int(N)=9, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.765625)=0xDD
1276 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1278 TERMMCTLW_INI .equ 0DD00h
1280 .CASE 3000000 ; PL2303TA baudrate
1281 ; Configure UART_TERM @ 3000000 bauds / 24MHz
1282 ; N = 24000000/3000000 = 8 ==> {UCOS16=0, UCBR0=int(N)=8, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
1284 TERMMCTLW_INI .equ 0
1286 .CASE 4000000 ; PL2303HXD baudrate
1287 ; Configure UART_TERM @ 4000000 bauds / 24MHz
1288 ; N = 24000000/4000000 = 6... ==> {UCOS16=0, UCBR0=int(N)=0, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.0000000)=0
1289 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1291 TERMMCTLW_INI .equ 0
1293 .CASE 5000000 ; PL203HXD baudrate
1294 ; Configure UART_TERM @ 5000000 bauds / 24MHz
1295 ; N = 24000000/5000000 = 4.8... ==> {UCOS16=0, UCBR0=int(N)=0, UCBRF0=dont_care=0, UCBRS0=fn(frac(N))=fn(0.8)=0xEE
1296 ; TERMBRW=UCBR0, TERMMCTLW= (UCBRS0<<8)|(UCBRF0<<4)|UCOS16
1298 TERMMCTLW_INI .equ 0EE00h
1300 .CASE 6000000 ; PL2303TA baudrate
1301 ; Configure UART_TERM @ 6000000 bauds / 24MHz
1302 ; N = 24000000/6000000 = 4 ==> {UCOS16=0, UCBR0=int(N)=4, UCBRF0=dont_care=0 UCBRS0=fn(frac(N))=fn(0.00000)=0x00
1304 TERMMCTLW_INI .equ 0
1307 .error "UART_TERM / 24 MHz : baudrate not implemented"
1308 .ENDCASE ; UART_TERM / 24MHz baudrates
1310 .error "UART_TERM frequency not implemented"