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

📄 reset_ficmmp.s

📁 RMI AU1200 BOOTLOADER(autoboot).支持从PCMCIA,IDE,SD,NAND,NOR等加载LINUX或WINCE映像。支持BIN
💻 S
📖 第 1 页 / 共 3 页
字号:
	sw		t1, ic_srcset(t0)
	sw		t1, ic_assignset(t0)
	sw		t1, ic_wakeclr(t0)
	sw		t1, ic_maskclr(t0)
	sw		t1, ic_risingclr(t0)
	sw		t1, ic_fallingclr(t0)
	sw		zero, ic_testbit(t0)
	sync

	li		t0, AU1200_SYS_ADDR
	sw		zero, sys_freqctrl0(t0)
	sw		zero, sys_freqctrl1(t0)
	sw		zero, sys_clksrc(t0)
	sw		zero, sys_pininputen(t0)
	sync

	li		t0, AU1200_DDMA_ADDR
	sw		zero, ddma_inten(t0)

  	li		t0, AU1200_UART0_ADDR
	sw		zero, uart_enable(t0)

	li		t0, AU1200_UART1_ADDR
	sw		zero, uart_enable(t0)

	li		t0, AU1200_PSC0_ADDR
	sw		zero, psc_enable(t0)

	li		t0, AU1200_PSC1_ADDR
	sw		zero, psc_enable(t0)

	li		t0, AU1200_MSR_ADDR
	sw		zero, msr_mcfg(t0)

	li		t0, AU1200_LCD_ADDR
	sw		zero, lcd_screen(t0)

	li		t0, AU1200_SD0_ADDR
	sw		zero, sd_enable(t0)
	sync

	li		t0, AU1200_SD1_ADDR
	sw		zero, sd_enable(t0)
	sync

	li		t0, AU1200_SWC_ADDR
	sw		zero, swcnt_control(t0)

	li		t0, AU1200_AES_ADDR
	sw		zero, aes_status(t0)

	/*
	 * Step 16) Determine cause of reset
	 */
	/* wait 10mS to debounce external signals */
	li		t1, MEM_1MS*10
1:	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
    nop

getPC:
    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_1MS
1:	add		t1, -1
	bne		t1, zero, 1b
	nop

	/* check for DDR1 vs DDR2 */
//	li		t0, PB1200_BCSR_ADDR
//	lh		t1, bcsr_whoami(t0)
//	andi	t1, t1, 0x0100
//	bne		zero, t1, initDDR2	
	nop

initDDR1:
#ifndef USE_S12
	li		t1, MEM_SDCONFIGA_DDR
	li		t2, MEM_SDCONFIGB_DDR
	li		t3, MEM_SDMODE0_DDR
//	li		t4, MEM_SDMODE1_DDR
	li		t5, MEM_SDADDR0_DDR
//	li		t6, MEM_SDADDR1_DDR
	li		v0, MEM_MR0_DDR
	li		v1, MEM_MR1_DDR
	li		a2, MEM_MR2_DDR
	li		a3, MEM_MR3_DDR
#endif
	li		t5, MEM_SDADDR0_DDR
//	li		t6, MEM_SDADDR1_DDR
	b		initDDR
	nop

/* initDDR2:
#ifndef USE_S12
	li		t1, MEM_SDCONFIGA_DDR2
	li		t2, MEM_SDCONFIGB_DDR2
	li		t3, MEM_SDMODE0_DDR2
	li		t4, MEM_SDMODE1_DDR2
	li		t5, MEM_SDADDR0_DDR2
	li		t6, MEM_SDADDR1_DDR2
	li		v0, MEM_MR0_DDR2
	li		v1, MEM_MR1_DDR2
	li		a2, MEM_MR2_DDR2
	li		a3, MEM_MR3_DDR2
#endif
	li		t5, MEM_SDADDR0_DDR2
	li		t6, MEM_SDADDR1_DDR2  */

initDDR:
#ifdef USE_S12
	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)
	li		a2, 0x80000000 /* MR2 */
	li		a3, 0xC0000000 /* MR3 */
#endif

	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)
	sync

initDDRdone:
	/* 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_1MS
1:	add		t1, -1
	bne		t1, zero, 1b
	nop

	jr		ra
	nop

/********************************************************************/

wakeupDRAM:
	/*
	 * Issue 80ns of NOPs
	 */
	li		t0, AU1200_MEM_ADDR
	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, 8192
burstrefresh:
	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
	 */

	/*
	 * Establish MUXed pin functionality
	 *
	 * 31:DMA=0  DMA_REQ1
	 * 30:S0A=0  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=0 PSC0
	 * 16:CS=0   EXTCLK0
	 * 15:CIM=0  CIM
	 * 14:P1C=0  PSC1
	 * 13:Reserved=1
	 * 12:U1T=0  UART1
	 * 11:U1R=1  UART1
	 * 10:EX1=0  GPIO3
	 *  9:EX0=0  EXTCLK0
	 *  8:U0R=1  UART0
	 *  7:MC=0   UART1
	 *  6:S0B=0  SD0
	 *  5:S0C=1  SD0
	 *  4:P0B=1  PSC0
	 *  3:U0T=0  U0TXD
	 *  2:S1B=1  PCMCIA
	 *  1:Reserved=0
	 *  0:Reserved=0
	 */
	li		t0, AU1200_SYS_ADDR
	li		t1, 0x1F882934
	sw		t1, sys_pinfunc(t0)

	/*
	 * Establish GPIO direction
	 *
	 * GPIO0 main-pb(push button)	
	 * GPIO1 debug board detect	 
	 * GPIO2 NTSC reset
	 * GPIO3 Video clock
	 * GPIO4 IDE DMA_REQ
	 * GPIO5 ETH IRQ
	 * GPIO6 Select Push button
	 * GPIO7 battery monitor
	 * GPIO8 hybernate control
	 * GPIO9  IDE PWR
	 * GPIO10 DEBUG PWR
	 * GPIO11 PSC1_D0
	 * GPIO12 GUIDE - pb
	 * GPIO13 LATCH EN
	 * GPIO14 GPIO-IORDY
	 * GPIO15 U1_TXD
	 * GPIO16 earphone in
	 * GPIO17 down -pb
	 * GPIO18 PSC0_D0
	 * GPIO19 left - pb
	 * GPIO20 PSC1_SYNC0
	 * GPIO21 PSC1_SYNC1
	 * GPIO22 PSC1_D1
	 * GPIO23 I2S_MCLK_IN 
	 * GPIO24 PSC1_CLK
	 * GPIO25 PSC0_CLK
	 * GPIO26 right  - pb
	 * GPIO27 U0_TXD
	 * GPIO28 ip -pb	 
	 * GPIO29 U0_RXD
	 * GPIO30 U1_RXD
	 * GPIO31 PSC0_D1
	 */
	li		t1, 0x00002604
	sw		t1, sys_trioutclr(t0)		/* inputs enabled */
	li		t1, 0x00002604				/* OTG VBUS disabled */
	sw		t1, sys_outputset(t0)
	sync

	/*
	 * Establish GPIO2 direction
	 *
	 * GPIO200 
	 * GPIO201 
	 * GPIO202 
	 * GPIO203 
	 * GPIO204 
	 * GPIO205 
	 * GPIO206 client detect
	 * GPIO207 	 
	 * GPIO208 
	 * GPIO209 
	 * GPIO210 
	 * GPIO211 
	 * GPIO212 
	 * GPIO213 
	 * GPIO214 
	 * GPIO215 
	 */
	li		t0, AU1200_GPIO2_ADDR
	li		t1,0x3
	sw		t1,gpio2_enable(t0)
	sync
	li		t1,1
	sw		t1,gpio2_enable(t0)
	sync
	sw		zero,gpio2_inten(t0)
	sync
	li		t1,0x0
	sw		t1,gpio2_dir(t0)
	sync
//	li		t1,(1<<31)|(0<<15)		/* turn on GREEN LED */
//	sw		t1,gpio2_output(t0)
//	sync

	/*
	 * Establish CLOCKing
	 *
	 * FREQ5: unused
	 * FREQ4: unused
	 * FREQ3: unused
	 * FREQ2: unused - done by PSC
	 * FREQ1: unused - done by PSC
	 * FREQ0: unused
	 */
#if 0
	li		t0, AU1200_SYS_ADDR
	li		t1, (1<<12)|(1<<11)|(1<<10)
	sw		t1, sys_freqctrl0(t0)
	li		t1, (3<<2)|(1<<1)|(1<<0)
	sw		t1, sys_clksrc(t0)
	sync
#endif

	/* Take IDE/LAN/DC/CIM out of reset */
/*	li		t0, PB1200_BCSR_ADDR
	lh		t1, bcsr_resets(t0)
	ori		t1, 0x000F
	sh		t1, bcsr_resets(t0)
	sync	*/

	/* Ensure PCMCIA interface disabled */
/*	li		t0, PB1200_BCSR_ADDR
	sh		zero, bcsr_pcmcia(t0)
	sync */

	/* Ensure Board Interrupt Controller is disabled */
/*	li		t0, PB1200_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 + -