|
为了减小误差,MSP430单片机特别设置了UxMCTL(USART Modulation Control Register)用于匹配波特率的小数部分,为了获得最小误差,TI提供了一种计算方法,是用汇编写的,由于没有学习过MSP430的汇编语言,不知道有些具体的语法细节,想请教一下下面这个语句
CMOD .equ ((((256*UARTCLK)/Baudr)–256*(UARTCLK/Baudr))+1)/2
是怎样计算出 时钟/波特率 的小数部分的:
CALC_UMCTL .macro
;
; Modulation Register content: the rounded fraction of
; CMOD = UARTCLK/Baudr is calculated
; Binary format of CMOD: 0.xxxxxxx
; Then the 8 bits of UMCTL are built.
; Inputs: UARTCLK, Baudr ; Frequencies [Hz]
; Output: CUMCTL ; 8–bit UMCTL register value
;
CMOD .equ ((((256*UARTCLK)/Baudr)–256*(UARTCLK/Baudr))+1)/2
M$00 .equ CMOD+CMOD ; Fraction x 2
.if M$00>127 ; Overflow to integer?
M$10 .equ M$00–128+CMOD ; Yes, subtract 1.000000
C$0 .equ 1 ; UMCTL.0 = 1
.else
M$10 .equ M$00+CMOD ; No, add fraction
C$0 .equ 0 ; UMCTL.0 = 0
.endif
.if M$10>127 ; Overflow to integer?
M$20 .equ M$10–128+CMOD ; Yes, subtract 1.000000
C$1 .equ 2 ; UMCTL.1 = 1
.else
M$20 .equ M$10+CMOD ; No, add fraction
C$1 .equ 0 ; UMCTL.1 = 0
.endif
.if M$20>127 ; Overflow to integer?
M$30 .equ M$20–128+CMOD ; Yes, subtract 1.000000
C$2 .equ 4 ; UMCTL.2 = 1
.else
M$30 .equ M$20+CMOD ; No, add fraction
C$2 .equ 0 ; UMCTL.2 = 0
.endif
.if M$30>127 ; Overflow to integer?
M$40 .equ M$30–128+CMOD ; Yes, subtract 1.000000
C$3 .equ 8 ; UMCTL.3 = 1
.else
M$40 .equ M$30+CMOD ; No, add fraction
C$3 .equ 0 ; UMCTL.3 = 0
.endif
.if M$40>127 ; Overflow to integer?
M$50 .equ M$40–128+CMOD ; Yes, subtract 1.000000
C$4 .equ 10h ; UMCTL.4 = 1
.else
M$50 .equ M$40+CMOD ; No, add fraction
C$4 .equ 0 ; UMCTL.4 = 0
.endif
.if M$50>127 ; Overflow to integer?
M$60 .equ M$50–128+CMOD ; Yes, subtract 1.000000
C$5 .equ 20h ; UMCTL.5 = 1
.else
M$60 .equ M$50+CMOD ; No, add fraction
C$5 .equ 0 ; UMCTL.5 = 0
.endif
.if M$60>127 ; Overflow to integer?
M$70 .equ M$60–128+CMOD ; Yes, subtract 1.000000
C$6 .equ 40h ; UMCTL.6 = 1
.else
M$70 .equ M$60+CMOD ; No, add fraction
C$6 .equ 0 ; UMCTL.6 = 0
.endif
.if M$70>127 ; Overflow to integer?
C$7 .equ 80h ; UMCTL.7 = 1
.else
C$7 .equ 0 ; UMCTL.7 = 0
.endif
CUMCTL .equ C$7+C$6+C$5+C$4+C$3+C$2+C$1+C$0 ; Add bits
.endm
以下是原PDF文件,这段代码在文档的末尾
波特率的设置ourdev_672590UQA2FR.pdf(文件大小:98K) (原文件名:MSP430_UART_波特率计算_UMCTL的设置.pdf) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|