;******************************************************************************
; 文件名:SENDSTR.S
; 功能:向串口发送数据。
; 说明:使用外部11.0592MHz晶振,系统时钟配置后Fpclk=11.0592MHz;
; 通讯波特率115200,8位数据位,1位停止位,无奇偶校验。
;******************************************************************************
INCLUDE LPC2294.INC
EXPORT MAIN
FPCLK EQU 11059200 ; 定义FPclk
ART_BPS EQU 115200 ; 定义波特率
AREA SENDSTRC,CODE,READONLY
ENTRY
MAIN LDR SP,=0x40003F00 ; 设置堆栈指出针
LDR R0,=PINSEL0 ; 设置IO口使用为UART0
MOV R1,#0x05
STR R1,[R0]
; 设置系统时钟
LDR R0,=VPBDIV
MOV R1,#0x00
STR R1,[R0] ; VPBDIV=0x00
LDR R0,=PLLCFG
MOV R1,#0x23
STR R1,[R0] ; PLLCFG=0x23,设置M值为4,P值为2
LDR R0,=PLLCON
MOV R1,#0x01
STR R1,[R0] ; PLLCON=0x01
LDR R0,=PLLFEED
MOV R1,#0xAA
STR R1,[R0] ; PLLFEED=0xAA
MOV R1,#0x55
STR R1,[R0] ; PLLFEED=0x55
WAIT_OK LDR R0,=PLLSTAT
LDR R1,[R0]
ANDS R1,R1,#0x0400
BEQ WAIT_OK ; 等待PLL锁定
LDR R0,=PLLCON
MOV R1,#0x03
STR R1,[R0]
LDR R0,=PLLFEED
MOV R1,#0xAA
STR R1,[R0]
MOV R1,#0x55
STR R1,[R0]
BL UART0_INI ; 初始化串口UART0,设置波特率
LOOP LDR R3,=HELLO
BL UART0_SENDSTR ; 发送字串,字串中以0x00结束
BL DELAYS ; 软件延时
B LOOP
;******************************************************************************
; 名称:DELAYS
; 功能:软件延时
; 入口参数:无
; 出口参数:无
; 占用资源:R7
;******************************************************************************
DELAYS
MOV R7,#0x0000FF00 ; 延时参数
DELAYS_L1 SUBS R7,R7,#1 ; R7 = R7-1
BNE DELAYS_L1 ; 判断R7-1结果是否为0,若不为0则跳转
MOV PC,LR ; 返回
;******************************************************************************
; 名称:UART0_INI
; 功能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为9600
; 入口参数:无
; 出口参数:无
; 占用资源:R0、R1
;******************************************************************************
UART0_INI
LDR R0,=U0LCR ; 设置UART工作模式
MOV R1,#0x83 ; DLAB = 1,可设置波特率
STR R1,[R0]
LDR R0,=U0DLL ; 设置波特率
MOV R1,#(FPCLK/16/ART_BPS):MOD:256
STR R1,[R0]
LDR R0,=U0DLM
MOV R1,#(FPCLK/16/ART_BPS)/256
STR R1,[R0]
LDR R0,=U0LCR
MOV R1,#0x03
STR R1,[R0] ; 8位数据位,1位停止位,无奇偶校验,DLAB = 0
MOV PC,LR ; 返回
;******************************************************************************
; 名称:UART0_SENDB
; 功能:串口发送字节数据。向UART0发送一字节数据,并等待发送完毕
; 入口参数:R1 要发送的数据,低8位有效
; 出口参数:无
; 占用资源:R0、R1
;******************************************************************************
UART0_SENDB
LDR R0,=U0THR
STR R1,[R0] ; 发送数据
LDR R0,=U0LSR ; 等待发送完毕
UART0SD_L1 LDR R1,[R0]
ANDS R1,R1,#0x40
BEQ UART0SD_L1
MOV PC,LR
;******************************************************************************
; 名称:UART0_SENDSTR
; 功能:向UART0发送字符串。发送字串指针R3,字串中以0x00结束
; 入口参数:R3 要发送字串指针
; 出口参数:无
; 占用资源:R0、R1
;******************************************************************************
UART0_SENDSTR
STMFA SP!,{R0-R9, LR}
UART0SR_L1 LDR R1,[R3],#4
CMP R1,#0x00
BEQ UART0SR_L2 ; 若数据为0x00,返回
BL UART0_SENDB
B UART0SR_L1
UART0SR_L2 LDMFA SP!,{R0-R9, LR}
MOV PC,LR
LTORG ; 在此声明文字池
HELLO DCD 'H', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\r','\n',0x0
END