⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.s

📁 ucos 在 arm9 芯片上的移植
💻 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 + -