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

📄 reset_db1200.s

📁 嵌入式linux(arm9)的平台下
💻 S
📖 第 1 页 / 共 3 页
字号:
	/* wait 10mS to debounce external signals */	li		t1, MEM_1MS*101:	add		t1, -1	bne		t1, zero, 1b	nop	li		t0, AU1200_SYS_ADDR	lw		t1, sys_wakesrc(t0)	/* Clear sys_wakemsk to prevent false events */	sw		zero, sys_wakemsk(t0)	sync	/* Clear sys_wakesrc */	//sw		zero, sys_wakesrc(t0)	sync	/* Check for Hibernate Reset first */	andi	t2, t1, 0x04	bne		zero, t2, hibernatereset	nop	/* Check for Hardware Reset */	andi	t2, t1, 0x01	bne		zero, t2, hardwarereset	nop	/* Check for Sleep Wakeup */	andi	t2, t1, 0x02	bne		zero, t2, sleepwakeup	nop	/* Assume run-time reset */	beq		zero, zero, runtimereset	nop/************************************************************************/hardwarereset:runtimereset:hibernatereset:	/*	 * Step 1) Initialize DRAM	 * Step 2) Initialize board	 * Step 3) Invoke application	 */	bal 	initDRAM	nop    	bal		initBOARD	nop	beq		zero, zero, alldone	nop	 sleepwakeup:	/*	 * Step 1) Wakeup DRAM	 * Step 2) Initialize board	 * Step 3) Resume application	 */  	bal		wakeupDRAM	  	nop	bal		initBOARD	nop	la		t0, AU1200_SYS_ADDR	lw		sp, sys_scratch0(t0)	lw		ra, sys_scratch1(t0)	jr		ra	nop/*************************************************************************/initDRAM:	/* Only perform DRAM init if running from ROM/Flash */	addu	t2, ra, zero	/* preserve ra */    b		getPC    nopgetPC:    lui		t0, 0x1F00      /* ROM/flash address? */    and		t1, t0, ra	addu	ra, t2, zero	/* restore ra */    bne		t0, t1, initDDRdone    nop	/* wait 1mS before setup */	li		t1, MEM_1MS1:	add		t1, -1	bne		t1, zero, 1b	nopinitDDR2:#ifndef USE_S6	   	li		t1, MEM_SDCONFIGA_DDR2	li		t2, MEM_SDCONFIGB_DDR2	li		t3, MEM_SDMODE0_DDR2	li		t4, MEM_SDMODE1_DDR2	li		v0, MEM_MR0_DDR2	li		v1, MEM_MR1_DDR2#else	lw		t1, MEM_SDCONFIGA(a0)	lw		t2, MEM_SDCONFIGB(a0)	lw		t3, MEM_SDMODE(a0)	lw		t4, MEM_SDMODE(a0)	lw		v0, MEM_MR0(a0)	lw		v1, MEM_MR1(a0)#endif	li		t5, MEM_SDADDR0_DDR2	li		t6, MEM_SDADDR1_DDR2	li		a2, MEM_MR2_DDR2	li		a3, MEM_MR3_DDR2	li		t0, AU1200_MEM_ADDR	or		t2, MEM_SDCONFIGB_BB /* block LCD/MAE during init */	sw		t1, mem_sdconfiga(t0)	sync	sw		t2, mem_sdconfigb(t0)	sync	sw		t3, mem_sdmode0(t0)	sw		t4, mem_sdmode1(t0)	sw		t5, mem_sdaddr0(t0)	sw		t6, mem_sdaddr1(t0)	sync	/*	 * Initialization per Micron data sheet, page 72:	 * 0. Power sequence	 * 1. 200us delay	 * 2. NOP w/ CKE	 * 3. PRECHARGE ALL	 * 4. LOAD MODE REGISTER for the extended mode register (normal, not reduced, drive strength)	 * 5. LOAD MODE REGISTER for the normal mode register (DLL reset activated)	 * 6. 200 clocks of idle	 * 7. PRECHARGE ALL	 * 8. AUTO REFRESH x 2	 * 9. LOAD MODE REGISTER (DLL reset de-activated)	 * Devices are now ready for use.	 */	/* NOP w/ CKE */	lw		t1, mem_sdconfigb(t0)	li		t2, MEM_SDCONFIGB_BA	or		t1, t2, t1	sw		t1, mem_sdconfigb(t0)	sync	/* PRECHARGE ALL */	sw		zero, mem_sdprecmd(t0)	sync	/* LOAD MODE REGISTER extended mode register 3 */	sw		a3, mem_sdwrmd0(t0)			sync	sw		a3, mem_sdwrmd1(t0)			sync	/* LOAD MODE REGISTER extended mode register 2 */	sw		a2, mem_sdwrmd0(t0)			sync	sw		a2, mem_sdwrmd1(t0)			sync	/* LOAD MODE REGISTER extended mode register 1 */	sw		v1, mem_sdwrmd0(t0)			sync	sw		v1, mem_sdwrmd1(t0)			sync	/* LOAD MODE REGISTER normal mode register DLL reset */#define MR0_DLL 0x0100	ori		t1, v0, MR0_DLL	sw		t1, mem_sdwrmd0(t0)	sync	sw		t1, mem_sdwrmd1(t0)	sync	/* 200 clocks of idle */	lw		t1, mem_sdconfigb(t0)	li		t2, MEM_SDCONFIGB_BA	or		t1, t2, t1	sw		t1, mem_sdconfigb(t0)	sync	/* PRECHARGE ALL */	sw		zero, mem_sdprecmd(t0)	sync	/* AUTO REFRESH x 2 */	sw		zero, mem_sdautoref(t0)	sync	sw		zero, mem_sdautoref(t0)	sync	/* LOAD MODE REGISTER normal mode register */	sw		v0, mem_sdwrmd0(t0)	sync	sw		v0, mem_sdwrmd1(t0)	syncinitDDRdone:	/* Enable refresh */	li		t0, AU1200_MEM_ADDR	lw		t1, mem_sdconfiga(t0)	li		t2, MEM_SDCONFIGA_E	or		t1, t2, t1	sw		t1, mem_sdconfiga(t0)	sync	/* Allow MAE/LCD */	lw		t1, mem_sdconfigb(t0)	li		t2, ~MEM_SDCONFIGB_BB	and		t1, t2, t1	sw		t1, mem_sdconfigb(t0)	sync	/* wait 1mS after setup */	li		t1, MEM_1MS1:	add		t1, -1	bne		t1, zero, 1b	nop	jr		ra	nop/********************************************************************/wakeupDRAM:	#ifndef USE_S6	li		t1, MEM_SDCONFIGA_DDR2	li		t2, MEM_SDCONFIGB_DDR2	li		t3, MEM_SDMODE0_DDR2	li		t4, MEM_SDMODE1_DDR2#else	lw		t1, MEM_SDCONFIGA(a0)	lw		t2, MEM_SDCONFIGB(a0)	lw		t3, MEM_SDMODE(a0)	lw		t4, MEM_SDMODE(a0)#endif	li		t5, MEM_SDADDR0_DDR2	li		t6, MEM_SDADDR1_DDR2	li		t0, AU1200_MEM_ADDR	sw		t1, mem_sdconfiga(t0)	sync	sw		t2, mem_sdconfigb(t0)	sync	sw		t3, mem_sdmode0(t0)	sw		t4, mem_sdmode1(t0)	sw		t5, mem_sdaddr0(t0)	sw		t6, mem_sdaddr1(t0)	sync	/* Assert DCKE - bring DDR out of self refresh */	/* Note that two mem_sdsref are needed since state lost during sleep */	sw		zero, mem_sdsref(t0)	sw		zero, mem_sdsref(t0)	/*	 * Issue 80ns of NOPs	 */ 	lw		t1, mem_sdconfigb(t0)	li		t2, MEM_SDCONFIGB_BA	or		t1, t2, t1 	sw		t1, mem_sdconfigb(t0)	sync 	/*	 * Perform burst refresh of 8K rows	 */	li		t1, 8192burstrefresh:	sw		zero, mem_sdautoref(t0)	bne		zero, t1, burstrefresh	addi	t1, t1, -1	/* Enable refresh */	lw		t1, mem_sdconfiga(t0)	li		t2, MEM_SDCONFIGA_E	or		t1, t2, t1	sw		t1, mem_sdconfiga(t0)	sync 	jr	ra	nop/********************************************************************/initBOARD:	/*	 * External and/or board-specific peripheral initialization	 */	/*	 * Adjust 16-bit chip-selects if EB (RCE0 handled specially in yamon/init/reset/reset.S)	 */	mfc0 t0, CP0_Config	andi t0, 0x8000	beq zero, t0, 1f	nop	li		t2, 0x0200		/* mem_stcfg[BE]=1 */	li		t0, AU1200_MEM_ADDR	lw		t1, mem_stcfg1(t0)	or		t1, t1, t2	sw		t1, mem_stcfg1(t0)	lw		t1, mem_stcfg2(t0)	or		t1, t1, t2	sw		t1, mem_stcfg2(t0)	sync1:	/*	 * Establish MUXed pin functionality	 *	 * 31:DMA=1  DMA_REQ1	 * 30:S0A=1  SD0	 * 29:S1A=0  PCMCIA	 * 28:LP0=1  LCD_PWM0	 * 27:LP1=1  LCD_PWM1	 * 26:LD=1   LCD_D16	 * 25:LD8=1  LCD_D8	 * 24:LD1=1  LCD_D1	 * 23:LD0=1  LCD_D0	 * 21:P1A=00 PSC1	 * 20:P1B=0  PSC1	 * 19:FS3=1  FREQ3	 * 17:P0A=01 PSC0	 * 16:CS=0   EXTCLK0	 * 15:CIM=1  CIM	 * 14:P1C=1  PSC1	 * 13:Reserved=1	 * 12:U1T=0  UART1	 * 11:U1R=1  UART1	 * 10:EX1=0  GPIO3	 *  9:EX0=1  EXTCLK0	 *  8:U0R=1  UART0	 *  7:MC=1   UART1	 *  6:S0B=1  SD0	 *  5:S0C=0  SD0	 *  4:P0B=0  PSC0	 *  3:U0T=0  U0TXD	 *  2:S1B=1  PCMCIA	 *  1:Reserved=0	 *  0:Reserved=0	 */	li		t0, AU1200_SYS_ADDR	li		t1, 0xDF8AEBC4	sw		t1, sys_pinfunc(t0)	/*	 * Establish GPIO direction	 *	 * GPIO0 Input for CIM_D0	 * GPIO1 Input for CIM_D1	 * GPIO2 EXTCLK0 - I2S_MCLK	 * GPIO3 Output LCD_CLK_IN_LED#	 * GPIO4 Input DC DMA_REQ	 * GPIO5 Input GPIO5_Switch	 * GPIO6 SD_Card0_DAT2	 * GPIO7 Input Board_IRQ#	 * GPIO8 SD_CARD0_DAT1	 * GPIO9  U1_CTS	 * GPIO10 U1_DSR	 * GPIO11 PSC1_D0	 * GPIO12 DMA_REQ1 for IDE	 * GPIO13 U1_RTS	 * GPIO14 U1_DTR	 * GPIO15 U1_TXD	 * GPIO16 PSC0_SYNC1	 * GPIO17 SD_Card0_CLK	 * GPIO18 PSC0_D0	 * GPIO19 SD_Card0_DAT0	 * GPIO20 PSC1_SYNC0	 * GPIO21 PSC1_SYNC1	 * GPIO22 PSC1_D1	 * GPIO23 I2S_MCLK_IN 	 * GPIO24 PSC1_CLK	 * GPIO25 PSC0_CLK	 * GPIO26 SD_Card0_DAT3	 * GPIO27 U0_TXD	 * GPIO28 SD_Card0_CMD	 * GPIO29 U0_RXD	 * GPIO30 U1_RXD	 * GPIO31 PSC0_D1	 */	li		t1, 0x000000B3	sw		t1, sys_trioutclr(t0)		/* inputs enabled */	li		t1, 0x00000008				/* turn on green led D3 */	sw		t1, sys_outputclr(t0)	sync	/*	 * Establish GPIO2 direction	 *	 * GPIO200 LCD_D0	 * GPIO201 LCD_D1	 * GPIO202 CIM_D2	 * GPIO203 CIM_D3	 * GPIO204 CIM_D4	 * GPIO205 CIM_D5	 * GPIO206 CIM_D6	 * GPIO207 CIM_D7	 * GPIO208 CIM_D8	 * GPIO209 CIM_D9	 * GPIO210 LCD_D8	 * GPIO211 LCD_D16	 * GPIO212 CIM_LS	 * GPIO213 CIM_FS	 * GPIO214 CIM_CLK	 * GPIO215 Output NAND_FORCE_CE# and OTG_VBUS_ON#	 */	li		t0, AU1200_GPIO2_ADDR	li		t1,3	sw		t1,gpio2_enable(t0)	sync	li		t1,1	sw		t1,gpio2_enable(t0)	sync	sw		zero,gpio2_inten(t0)	sync	li		t1,(1<<15)	sw		t1,gpio2_dir(t0)	sync	li		t1,(1<<31)|(1<<15)		/* do not assert GPIO215 */	sw		t1,gpio2_output(t0)	sync	/*	 * Establish CLOCKing	 *	 * FREQ5: unused	 * FREQ4: unused	 * FREQ3: unused	 * FREQ2: unused	 * FREQ1: unused - 24MHz for PSC0 (SMBus and SPI)	 * FREQ0: unused	 */	li		t0, AU1200_SYS_ADDR	li		t1, (1<<12)|(1<<11)|(1<<10)	sw		t1, sys_freqctrl0(t0)	li		t1, (3<<22)|(1<<21)|(1<<20)	sw		t1, sys_clksrc(t0)	sync	/* Take IDE/LAN/DC/CIM out of reset */	li		t0, DB1200_BCSR_ADDR	lh		t1, bcsr_resets(t0)	ori		t1, 0x000F	sh		t1, bcsr_resets(t0)	sync	/* Ensure PCMCIA interface disabled */	li		t0, DB1200_BCSR_ADDR	sh		zero, bcsr_pcmcia(t0)	sync	/* Ensure SD, CIM, LCD powered-off */	li		t0, DB1200_BCSR_ADDR	li		t1, 0x0020	sh		t1, bcsr_board(t0)	sync	/* Ensure Board Interrupt Controller is disabled */	li		t0, DB1200_BCSR_ADDR	li		t1, 0xFFFF	sh		t1, bcsr_icer(t0)	sh		t1, bcsr_icmr(t0)	sync	jr		ra	nop/********************************************************************/alldone:	/*	 * Prepare to invoke application main()	 */	 .set reorder/********************************************************************/

⌨️ 快捷键说明

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