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

📄 rominit.s

📁 这是ARM在Vxworks的驱动源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
/* Send a PrechargeAll Command to all SDRAM devices */	ldr		r9,L$LIXP425_SDRAM_INSTRUCTION	ldr		r0,L$LIXP425_SDRAM_IR_PRECHARGE_ALL_CMD	str		r0, [r9, #0]	/* Precharge all */	DELAY(0x4000, r0)/*passed by davey*/	/* Send 8 AutoRefresh Command. There should Trc cycles between every AutoRefresh *//* Trc = 70ns for devices used here,  */	ldr		r9,L$LIXP425_SDRAM_INSTRUCTION	ldr		r0,L$LIXP425_SDRAM_IR_AUTOREFRESH_CMD	str		r0, [r9, #0]	/* Auto Refresh #1 */	DELAY(0x100, r0)	str		r0, [r9, #0]	/* Auto Refresh #2 */	DELAY(0x100, r0)	str		r0, [r9, #0]	/* Auto Refresh #3 */	DELAY(0x100, r0)	str		r0, [r9, #0]	/* Auto Refresh #4 */	DELAY(0x100, r0)	str		r0, [r9, #0]	/* Auto Refresh #5 */	DELAY(0x100, r0)	str		r0, [r9, #0]	/* Auto Refresh #6 */	DELAY(0x100, r0)	str		r0, [r9, #0]	/* Auto Refresh #7 */	DELAY(0x100, r0)	str		r0, [r9, #0]	/* Auto Refresh #8 */	DELAY(0x100, r0)/*passed by davey *//* Send Mode Reg Set Cmd with CAS Latency 3 */	ldr		r9,L$LIXP425_SDRAM_INSTRUCTION	ldr		r0,L$LIXP425_SDRAM_IR_MODE_SET_CAS3_CMD	str		r0, [r9, #0]	/* Send Mode Select Command */	DELAY(0x4000, r0)	ldr		r9,L$LIXP425_SDRAM_INSTRUCTION	ldr		r0,L$LIXP425_SDRAM_IR_NORMAL_OPERATION_CMD	str		r0, [r9, #0x00000000]	        /* Issue aNormal Operation command *//*passed by davey */#endif /* INIT_SDRAM */#if DEBUG_UART	ldr r0 ,_debugStr6	bl FUNC(UARTVString)#endif/* passed by davey*//*************** SDRAM Config Complete *******************************************/	/* DebugOutVal INFO_CODE_9 */	mov		r0, #0x0009	bl		FUNC(SevenSegDisplay)/* passed by davey *//* Enable Coprocessors access */        ldr             r0, =0x001        mcr             p15, 0, r0, c15, c1, 0        mcr             p15, 0, r0, c7, c10, 4  /* Drain write/fill buffers */	CPWAIT(r0)				/* wait for the write to happen *//* Invalidate I-Cache, D-Cache, and BTB */        mcr             p15, 0, r0, c7, c7, 0	CPWAIT(r0)				/* Wait *//*passed by davey*//* * Set the CS0 setting for Flash to optimum timings. *//*	ldr	r0,L$LIXP425_EXP_CS0_REG	ldr	r1,L$LIXDP425_FLASH_CS_DEFAULT	str	r1,[r0]*/	/*not passed here by davey*/	/* DebugOutVal INFO_CODE_C */	mov		r0, #0x000c	bl		FUNC(SevenSegDisplay)/*** Enable Write Buffer Coalescing ***/#if XSCALE_WB_COAL_ENABLE	mcr		p15, 0, r0, c7, c10, 4  /* Drain write/fill buffers */	CPWAIT(r0)				/* wait for the write to happen */	CPWAIT(r0)				/* wait for the write to happen */	mrc		p15, 0, r0, c1, c0, 1   /* Read Auxiliary Control Reg */	and		r0, r0, #0xfffffffe    	/* Enable Coalescing */	mcr		p15, 0, r0, c1, c0, 1   /* Write Auxiliary Control Reg */	CPWAIT(r0)				/* wait for the write to happen */	NOP	NOP#endifwarm_start:/* Disable Interrupts */        MRS     r1, cpsr                /* get current status */        ORR     r1, r1, #I_BIT | F_BIT  /* disable IRQ and FIQ */        MSR     cpsr, r1/* Interrupts Disabled */        ldr     r0, =IXP425_ICMR  /* Zero-out Interrupt Mask */        mov     r2, #0x0        str     r2, [r0]/* 3: Jump to here + New FLash Location *//* We could jump upto location in Flash, * But we have already copied enough code to * low ram to continue code execution from here */	ldr	r0,=IXP425_EXPANSION_BUS_BASE2        orr	r0,r0,pc	mov	pc,r0/* 4: Write to Expansion Bus controller to swap Flash & Ram */	ldr	r0,=IXP425_EXP_CNFG0	ldr	r1,[r0]	and	r1,r1,#0x7FFFFFFF	str	r1,[r0]/* * End of switch , should now be running in Flash in its relocated position. */	/* DebugOutVal INFO_CODE_D */	mov		r0, #0x000d	bl		FUNC(SevenSegDisplay)/* Enable Coprocessors access */        ldr     r0, =0x001        mcr     p15, 0, r0, c15, c1, 0        mcr     p15, 0, r0, c7, c10, 4  /* Drain write/fill buffers */	CPWAIT(r0)				/* wait for the write to happen */#ifdef ROM_ENABLES_MMU/* Invalidate I-Cache, D-Cache, and BTB */        mcr     p15, 0, r0, c7, c7, 0	CPWAIT(r0)			/* Wait *//* If Enable Instruction Cache */        mrc     p15, 0, r0, c1, c0, 0   /* Read Control Register*/        orr     r0, r0, #0x1000         /* Set I-Cache bit */        mcr     p15, 0, r0, c1, c0, 0   /* Write Back Control Register */	CPWAIT(r0)			/* Wait *//* Set Translation Table Base */        ldr     r0, =MMU_TRANSLATION_BASE        mcr     p15, 0, r0, c2, c0, 0   /* Set Translation Table Base Register *//* Invalidate Instruction, Data TLBs */        mcr     p15, 0, r0, c8, c7, 0   /* Flush I & D TLBs*/	CPWAIT(r0)			/* Wait *//* Set Domain Access Control Register */        ldr     r0, =0xffffffff         /* Set All 16 domains to manager access */        mcr     p15, 0, r0, c3, c0, 0   /* Set Domain Permissions *//* Enable MMU */        mrc     p15, 0, r0, c1, c0, 0   /* Read Control Register */        orr     r0, r0, #0x00000001     /* Enable MMU */        mcr     p15, 0, r0, c1, c0, 0   /* Write Back the Control Register */	CPWAIT(r0)			/* Wait *//* Drain Write/Fill Buffers */        mcr     p15, 0, r0, c7, c10, 4  /* Drain */	CPWAIT(r0)			/* Wait *//* Enable Data Cache */        mrc     p15, 0, r0, c1, c0, 0   /* Read Control Reg */        orr     r0, r0, #0x00000004             /* Enable Data Cache */        mcr     p15, 0, r0, c1, c0, 0   /* Write Back */	CPWAIT(r0)			/* Wait */#endif /* ROM_ENABLES_MMU *//* Enable Branch Target Buffer */        mrc     p15, 0, r0, c1, c0, 0   /* Read Control Reg */        orr     r0, r0, #0x00000800             /* Enable BTB */        mcr     p15, 0, r0, c1, c0, 0   /* Write Back the Control Reg */	CPWAIT(r0)			/* Wait *//******************************************************************************//******************************************************************************/	/* DebugOutVal INFO_CODE_E */	mov		r0, #0x000e	bl		FUNC(SevenSegDisplay)vxWorks_boot:/* enable gpio 0,1,2,3 outputs, all leds*//*	ldr r2, =0xC8004000        	ldr r1, =0xfff0        	str r1, [r2, #0x04]	*//*  Now jump to the code that starts the whole vxWorks boot process */	mov	r0, r8	ldr	sp, L$STACK_ADDR	ldr	pc, L$StrtInFlash/******************************************************************************//******************************************************************************/_ARM_FUNCTION(SevenSegDisplay)	ldr r6,L$LED_DISPLAY	strh	        r0, [r6]	mov	        pc, lr/************************** UART Helpers ******************************************/_ARM_FUNCTION(UARTVString)/* Do nothing as byte reads from flash not allowed */	mov	        pc, lr         ldr             r10, =IXP425_UART1_BASEUARTNextChar:        ldrb            r1, [r0], #1        teq             r1, #0        beq             URATTxDone        /* UARTTextOut     r10, r1, r2 */        and             r1, r1, #0xff/* Modified, don't even check if there is room in the transfer fifi`o just jut it.. TODO : remove later, on real card *//*        ldr             r10, =IXP425_UART1_BASE        ldr             r2, [r10, #UART_LineStatus]        TST             r2. #UARTLSR_TXHoldingEmpty        BEQ             10b*/        str             r1, [r10, #UART_Transmit] /* strb *//*Start-  Included to slow down writes to simultor : TODO: Remove later */	DELAY(0x200, r3)/*End-  Included to slow down writes to simultor : TODO: Remove later */        B               UARTNextCharURATTxDone:        mov             r1, #13        /* UARTTx          r10, r1, r2 */        mov             r1, #10        str             r1, [r10, #UART_Transmit] /* strb */        /* UARTTx          r10, r1, r2 */        str             r1, [r10, #UART_Transmit] /* strb */	mov	        pc, lr/*Better don't use r0, r1, r2 and r10sUses r0, r10*/UARTStart:	ldr	        r10, =IXP425_UART2_BASE	ldr	        r0, =UART_DMABodgeDelayUARTDelay:	subs	        r0, r0, #1	bne	        UARTDelay    /* enable access to divisor registers */	mov	        r0, #UARTLCR_DivisorLatchAccess	str	        r0, [r10, #UART_LineControl] /* strb */	ldr	        r0, =UART_DMABodgeDelayUARTDelay1:	subs	        r0, r0, #1	bne	        UARTDelay1    /* select baud rate *//* 115200 Baud *//*	ldr	        r0, =BaudRateDivisor_115200 */	 /*	strb	        r0, [r10, #UART_DivisorLatchLSB] */ /*	mov	        r0, r0, LSR #8 */			 /*	strb	        r0, [r10, #UART_DivisorLatchMSB] *//* 9600 baud */	ldr	        r0, =BaudRateDivisor_9600 	str	        r0, [r10, #UART_DivisorLatchLSB]   /*strb  */	mov	        r0, r0, LSR #8 	str	        r0, [r10, #UART_DivisorLatchMSB]  /* strb */    /* 8 data, 1 stop, no parity */	mov	        r0, #UARTLCR_CharLength8 | UARTLCR_StopBits1    /* also disable access to divisor regs */	str	        r0, [r10, #UART_LineControl] /* strb */    /* no irqs , but enable the UART on IXP425 */	mov	        r0, #0x40	str	        r0, [r10, #UART_InterruptEnable] /* strb */	mov             r0, #UARTFCR_Enable	str            r0, [r10, #UART_FIFOControl] /* strb */	/* turn fifos on */	mov             r0, #UARTFCR_RXReset | ARTFCR_TXReset | UARTFCR_Mode0RXRDYTXRDY | UARTFCR_RXTrigger1	str            r0, [r10, #UART_FIFOControl] /* strb */    /* make DTR active, RTS inactive, stop other end */	mov	        r0, #UARTMCR_DTRActive	str	        r0, [r10, #UART_ModemControl] /* strb */	ldr	        r0, =UART_DMABodgeDelayUARTDelaydv1:	subs	        r0, r0, #1	bne	        UARTDelaydv1		mov         r1, #54	str           r1, [r10, #UART_Transmit]	mov         r1, #55	str             r1, [r10, #UART_Transmit]	mov         r1, #56	str             r1, [r10, #UART_Transmit]	mov             r1, #13        /* UARTTx          r10, r1, r2 */       mov             r1, #10       str             r1, [r10, #UART_Transmit] /* strb */        /* UARTTx          r10, r1, r2 */       str             r1, [r10, #UART_Transmit] /* strb */	ldr	        r0, =UART_DMABodgeDelayUARTDelaydv2:	subs	        r0, r0, #1	bne	        UARTDelaydv2	mov	        pc, lr_debugStr1: .asciz  "IXP425 Uart initialized"_debugStr2: .asciz  "IXP425 Memory Config 32 Mbytes"_debugStr3: .asciz  "IXP425 Memory Config 64 Mbytes"_debugStr4: .asciz  "IXP425 Memory Config 128 Mbytes"_debugStr5: .asciz  "IXP425 Memory Config  Error"_debugStr6: .asciz  "IXP425 Memory Config Complete"_debugStr7: .asciz  "IXP425 Memory Config 256 Mbytes"	.align 4/* TODO: Resolve these addresses for real. */L$StrtInRam:    .long   FUNC(romStart) - FUNC(romInit)L$StrtInFlash:	.long   ROM_TEXT_ADRS + FUNC(romStart) - FUNC(romInit)L$STACK_ADDR:	.long	STACK_ADRSL$FlashDramSwapSize: .long  BOOT_ROM_RELOCATE_SIZEL$LIXP425_EXP_CS0_REG:				.long	IXP425_EXP_CS0_REGL$LIXDP425_FLASH_CS_DEFAULT:			.long	IXDP425_FLASH_CS_DEFAULT/* SDRAM Literals */L$LIXP425_SDRAM_CONFIG_BASE:			.long	IXP425_SDRAM_CONFIG_BASEL$LSDRAM_CONFIG_32MEG:				.long	SDRAM_CONFIG_32MEGL$LSDRAM_CONFIG_64MEG:				.long   SDRAM_CONFIG_64MEGL$LSDRAM_CONFIG_128MEG:				.long	SDRAM_CONFIG_128MEGL$LSDRAM_CONFIG_256MEG:				.long	SDRAM_CONFIG_256MEGL$LIXP425_SDRAM_CONFIG:				.long   IXP425_SDRAM_CONFIGL$LIXP425_SDRAM_REFRESH: 			.long 	IXP425_SDRAM_REFRESHL$LIXP425_SDRAM_REFRESH_DISABLE:		.long 	IXP425_SDRAM_REFRESH_DISABLEL$LIXP425_SDRAM_INSTRUCTION:			.long   IXP425_SDRAM_INSTRUCTIONL$LIXP425_SDRAM_IR_NOP_CMD:			.long   IXP425_SDRAM_IR_NOP_CMDL$LIXDP425_SDRAM_CONFIG_REFRESH_CNT:		.long   IXDP425_SDRAM_CONFIG_REFRESH_CNTL$LIXP425_SDRAM_IR_PRECHARGE_ALL_CMD:		.long   IXP425_SDRAM_IR_PRECHARGE_ALL_CMDL$LIXP425_SDRAM_IR_AUTOREFRESH_CMD:		.long   IXP425_SDRAM_IR_AUTOREFRESH_CMDL$LIXP425_SDRAM_IR_MODE_SET_CAS3_CMD:		.long	IXP425_SDRAM_IR_MODE_SET_CAS3_CMDL$LIXP425_SDRAM_IR_NORMAL_OPERATION_CMD:	.long   IXP425_SDRAM_IR_NORMAL_OPERATION_CMD/* DebugOutInitLiteral */L$CS2_REG: .long 0xc4000008L$CS2_VAL: .long 0xBFFF0002L$LED_DISPLAY: .long 0x52000000

⌨️ 快捷键说明

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