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

📄 rawio.s

📁 这是ARM在Vxworks的驱动源代码
💻 S
字号:
#define _ASMLANGUAGE
#include "vxWorks.h"
#include "arch/arm/arm.h"
#include "config.h"
#include "Ixp425.h"
        .globl  FUNC(rawio_init)
        .globl  FUNC(rawio_init_c)
        .globl  FUNC(rawprint)


_ARM_FUNCTION(rawio_init)
    
	LDR r4, =IXP425_UART2_BASE				/* base address of uart 0x8000c840*/

	LDR  r3, =0x80808080   					
	STR r3, [r4, #0x0c]	
	
	LDR  r3, =0x45454545   					
	STR r3, [r4, #0x00]	

	LDR  r3, =0x01010101  					
	STR r3, [r4, #0x04]	

	LDR  r3, =0x03030303  					
	STR r3, [r4, #0x0c]	

	LDR  r3, =0x40404040  					
	STR r3, [r4, #0x04]	

	LDR  r3, =0x01010101  					
	STR r3, [r4, #0x08]	

	LDR  r3, =0x07070707  					
	STR r3, [r4, #0x08]	
		
	LDR  r3, =0x00000000  					
	STR r3, [r4, #0x14]	

	MOV	 pc, lr							/* return to caller*/

/************************************************************************
# rawio_putc: Debug printing from assembly code.                        *
#                                                                       *
#       SYNTAX: void rawio_putc(NULL, char);                            *
#       INPUT: r24 - character to be printed                            *
#       RETURNS: none                                                   *
#       OUTPUTS: none                                                   *
#       NOTE:   r24 contains the ascii representation of the character  *
#               to display. THIS CAN ONLY BE CALLED FROM ASSEMBLY CODE  *
#               rawcio_init must be called prior to calling this routine*
#                                                                       *
#               Example use:                                            *
#               addi    r4,r0,0x41      # A                            *
#               bl      rawio_putc                                      *
#                                                                       *
#************************************************************************/
 _ARM_FUNCTION(rawio_putc)

/*	.text
	.align	4
	.globl	rawio_putc
rawio_putc:*/

	LDR r5, =IXP425_UART2_BASE						/* base address of uart*/		

rawio_putc_loop:
	LDR r6, [r5, #0x14]						/* read line status register*/
	tst r6, #0x20	/*AND r6, r6, #0x20*/	/* transmit holding register empty bit*/
						/*CMP r6, #0*/		
	BEQ rawio_putc_loop							/* if zero, branch and try again*/	

	STR r4, [r5, #00]							/* transmit the character*/

	MOV	 pc, lr									/* return to caller*/			


_ARM_FUNCTION_CALLED_FROM_C(rawio_init_c)

	stmfd   sp!,{r5-r6}             /* save r5-r6 to stack */

    
	LDR r6, =IXP425_UART2_BASE				/* base address of uart 0x8000c840*/

	LDR  r5, =0x80808080   					
	STR r5, [r6, #0x0c]	
	
	LDR  r5, =0x45454545   					
	STR r5, [r6, #0x00]	

	LDR  r5, =0x01010101  					
	STR r5, [r6, #0x04]	

	LDR  r5, =0x03030303  					
	STR r5, [r6, #0x0c]	

	LDR  r5, =0x40404040  					
	STR r5, [r6, #0x04]	

	LDR  r5, =0x01010101  					
	STR r5, [r6, #0x08]	

	LDR  r5, =0x07070707  					
	STR r5, [r6, #0x08]	
		
	LDR  r5, =0x00000000  					
	STR r5, [r6, #0x14]	

        ldmfd   sp!,{r5-r6}

	MOV	 pc, lr							/* return to caller*/

/************************************************************************
# rawprint: Debug printing from C code.                                 *
#                                                                       *
#       SYNTAX: void rawprint(0, character);                            *
#       INPUTS: character = character to be printed                     *
#       RETURNS: none                                                   *
#       OUTPUTS: none                                                   *
#       NOTE:   THIS CAN ONLY BE CALLED FROM C CODE                     *
#                                                                       *
#               Example use:                                            *
#               rawprint(0, 'A');                                       *
#                                                                       *
#************************************************************************/

_ARM_FUNCTION_CALLED_FROM_C(rawprint)

	stmfd   sp!,{r5-r6}             /* save r5-r6 to stack */
	LDR r5, =IXP425_UART2_BASE			/* base address of uart*/		
											
rawprint_loop:						
	LDR r6, [r5, #0x14]			/* read line status register*/		
	tst r6, #0x20				/* transmit holding register empty bit*/		
	BEQ rawprint_loop				/* if zero, branch and try again*/	
	STR r1, [r5, #00]				/* transmit the character*/		

        /* restore registers and return */

        ldmfd   sp!,{r5-r6}

	MOV	 pc, lr						/* return to caller*/	


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -