📄 uart.s
字号:
;************************************************************************
; *
; * Title :swi.s
; *
; * Summary :SoftwareInterrupt
; *
; * Author :xhl
; *
; * Date :2008-06-30
; *
; * Copyright (c) Pioneer Corporation
; *
;*************************************************************************/
UART_BASE EQU UART3_BASE_ADDR
GET sfr.inc
EXPORT tgetc
EXPORT vgetc
EXPORT vputc
EXPORT vputstr
EXPORT vputnstr
EXPORT InitUart
PRESERVE8
CODE32
AREA UART,CODE,READONLY
;*****************************************************************
;*
;* Function Name
;* void InitUart(void)
;* Inputs
;* None
;* Outputs
;* None
;* Return Codes
;* None
;* Description
;* This funtion is initial the uart
;* Date:
;* 2008-06-11
;*****************************************************************/
InitUart
mov r0, #&07
ldr r1, =UART_BASE + UARTIBRD
str r0, [r1,#0]
mov r0, #&15 ;07
ldr r1, =UART_BASE + UARTFBRD
str r0, [r1,#0]
mov r0, #&70
ldr r1, =UART_BASE + UARTLCR_H
str r0, [r1,#0]
mov r0, #&12
ldr r1, =UART_BASE + UARTIFLS
str r0, [r1,#0]
mov r0, #&00
ldr r1, =UART_BASE + UARTIMSC
str r0, [r1,#0]
ldr r0, =&FFFF
ldr r1, =UART_BASE + UARTICR
str r0, [r1,#0]
fifo
ldr r1, =UART_BASE + UARTFR
ldr r1, [r1,#0]
tst r1, #&10
ldreq r0, =UART_BASE + UARTDR
ldreq r0, [r0,#0]
beq fifo
ldr r0, =&b01
ldr r1, =UART_BASE + UARTCR
str r0, [r1,#0]
mov pc, lr
;*****************************************************************
;*
;* Function Name
;* int tgetc(unsigned long)
;* Inputs
;* None
;* Outputs
;* None
;* Return Codes
;* char: get the char
;* Description
;* This funtion get a char from uart
;* Date:
;* 2008-06-11
;*****************************************************************/
tgetc
tnochar
cmp r0, #0
moveq r0, #-1
moveq pc, lr
sub r0, r0, #1
ldr r1, =UART_BASE + UARTFR
ldr r1, [r1,#0]
tst r1, #&10
bne tnochar
ldr r0, =UART_BASE + UARTDR
ldr r0, [r0,#0]
and r0, r0, #&000000ff ;the return char
mov pc, lr
;*****************************************************************
;*
;* Function Name
;* char getc(void)
;* Inputs
;* None
;* Outputs
;* None
;* Return Codes
;* char: get the char
;* Description
;* This funtion get a char from uart
;* Date:
;* 2008-06-11
;*****************************************************************/
vgetc
nochar
ldr r0, =UART_BASE + UARTFR
ldr r0, [r0,#0]
tst r0, #&10
bne nochar
ldr r0, =UART_BASE + UARTDR
ldr r0, [r0,#0]
and r0, r0, #&000000ff ;the return char
mov pc, lr
;*****************************************************************
;*
;* Function Name
;* void putc(char)
;* Inputs
;* the char to send
;* Outputs
;* None
;* Return Codes
;* None
;* Description
;* This funtion send a char to uart
;* Date:
;* 2008-06-11
;*****************************************************************/
vputc
fifo_full
ldr r1, =UART_BASE + UARTFR
ldr r1, [r1,#0]
tst r1, #&20
bne fifo_full
ldr r1, =UART_BASE + UARTDR
str r0, [r1,#0] ;send the char
mov pc, lr
;*****************************************************************
;*
;* Function Name
;* void vputnstr(char*,int n)
;* Inputs
;* the string to send
;* Outputs
;* None
;* Return Codes
;* None
;* Description
;* This funtion send a stirng to uart
;* Date:
;* 2008-06-11
;*****************************************************************/
vputnstr
stmfd r13!, {r4,r5,lr}
mov r4, r0
mov r5, r1
nextchar1
cmp r5, #0
ldmfdeq r13!, {r4,r5,pc}
sub r5,r5,#1
ldrb r0, [r4], #1
bl vputc
b nextchar1
;*****************************************************************
;*
;* Function Name
;* void putstr(char*)
;* Inputs
;* the string to send
;* Outputs
;* None
;* Return Codes
;* None
;* Description
;* This funtion send a stirng to uart
;* Date:
;* 2008-06-11
;*****************************************************************/
vputstr
stmfd r13!, {r4,lr}
mov r4, r0
nextchar
ldrb r0, [r4], #1
cmp r0, #0
;moveq pc, lr
ldmfdeq r13!, {r4,pc}
bl vputc
b nextchar
END
;/*********************************************************************************************************
;** End Of File
;********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -