📄 reset_pb1500.s
字号:
/* RCE1 */ li t1, MEM_STCFG1 sw t1, mem_stcfg1(t0) li t1, MEM_STTIME1 sw t1, mem_sttime1(t0) li t1, MEM_STADDR1 sw t1, mem_staddr1(t0) /* RCE2 */ li t1, MEM_STCFG2 sw t1, mem_stcfg2(t0) li t1, MEM_STTIME2 sw t1, mem_sttime2(t0) li t1, MEM_STADDR2 sw t1, mem_staddr2(t0) /* RCE3 */ li t1, MEM_STCFG3 sw t1, mem_stcfg3(t0) li t1, MEM_STTIME3 sw t1, mem_sttime3(t0) li t1, MEM_STADDR3 sw t1, mem_staddr3(t0) sync /* * Step 15) Set peripherals to a known state */ li t0, AU1500_IC0_ADDR li t1, 0xFFFFFFFF sw t1, ic_cfg0clr(t0) sw t1, ic_cfg1clr(t0) sw t1, ic_cfg2clr(t0) 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, AU1500_IC1_ADDR li t1, 0xFFFFFFFF sw t1, ic_cfg0clr(t0) sw t1, ic_cfg1clr(t0) sw t1, ic_cfg2clr(t0) 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, AU1500_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, AU1500_AC97_ADDR li t1, 0x2 sw t1, ac97_enable(t0) sync li t0, AU1500_USBH_ADDR li t1, usbh_enable addu t0, t1, t0 sw zero, 0(t0) sync li t0, AU1500_USBD_ADDR sw zero, usbd_enable(t0) sync li t0, AU1500_MACEN_ADDR sw zero, macen_mac0(t0) sw zero, macen_mac1(t0) sync li t0, AU1500_UART0_ADDR sw zero, uart_enable(t0) sync li t0, AU1500_UART3_ADDR sw zero, uart_enable(t0) sync /* * Step 16) Determine cause of reset */ /* wait 10mS to debounce external signals */ li t1, MEM_1MS*101: add t1, -1 bne t1, zero, 1b nop li t0, AU1500_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 Hardware Reset */ andi t2, t1, 0x01 bne zero, t2, hardwarereset /* Check for Sleep Wakeup */ andi t2, t1, 0x02 bne zero, t2, sleepwakeup nop /* Assume run-time reset */ beq zero, zero, runtimereset nop/********************************************************************/hardwarereset: /* * Step 1) Initialize SDRAM */ bal initSDRAM nop /* * Step 2) Initialize BOARD */ bal initBOARD nop /* * Step 3) Invoke application */ beq zero, zero, alldone nop/********************************************************************/runtimereset: /* * Step 1) Initialize SDRAM */ bal initSDRAM nop /* * Step 2) Initialize BOARD */ bal initBOARD nop /* * Step 3) Invoke application */ beq zero, zero, alldone nop/********************************************************************/sleepwakeup: /* * Step 1) Initialize SDRAM. The SDRAM must be in self-refresh mode. */ bal wakeupSDRAM nop /* * Step 2) Initialize BOARD */ bal initBOARD nop /* * Step 3) Invoke application */ la t0, AU1500_SYS_ADDR lw sp, sys_scratch0(t0) lw ra, sys_scratch1(t0) jr ra nop/********************************************************************/ /* * This routine initializes the SDRAM controller from Initial * Power-up Reset or Running Reset. */initSDRAM: /* Only perform SDRAM init if running from ROM/Flash */ addu t2, ra, zero /* preserve ra */ bal getPC nopgetPC: lui t0, 0x1F00 /* ROM/flash address? */ and t1, t0, ra addu ra, t2, zero /* restore ra */ bne t0, t1, initSDRAMdone nop /* wait 1mS before setup */ li t1, MEM_1MS1: add t1, -1 bne t1, zero, 1b nop li t0, AU1500_MEM_ADDR li t1, MEM_SDMODE0 sw t1, mem_sdmode0(t0) li t1, MEM_SDMODE1 sw t1, mem_sdmode1(t0) li t1, MEM_SDMODE2 sw t1, mem_sdmode2(t0) li t1, MEM_SDADDR0 sw t1, mem_sdaddr0(t0) li t1, MEM_SDADDR1 sw t1, mem_sdaddr1(t0) li t1, MEM_SDADDR2 sw t1, mem_sdaddr2(t0) sync li t1, MEM_SDREFCFG_D sw t1, mem_sdrefcfg(t0) sync sw zero, mem_sdprecmd(t0) sync sw zero, mem_sdautoref(t0) sync sw zero, mem_sdautoref(t0) sync li t1, MEM_SDREFCFG_E sw t1, mem_sdrefcfg(t0) sync li t1, MEM_SDWRMD0 sw t1, mem_sdwrmd0(t0) sync li t1, MEM_SDWRMD1 sw t1, mem_sdwrmd1(t0) sync li t1, MEM_SDWRMD2 sw t1, mem_sdwrmd2(t0) sync /* wait 1mS after setup */ li t1, MEM_1MS1: add t1, -1 bne t1, zero, 1b nopinitSDRAMdone: jr ra nop/********************************************************************/wakeupSDRAM: li t0, AU1500_MEM_ADDR li t1, MEM_SDMODE0 sw t1, mem_sdmode0(t0) li t1, MEM_SDMODE1 sw t1, mem_sdmode1(t0) li t1, MEM_SDMODE2 sw t1, mem_sdmode2(t0) li t1, MEM_SDADDR0 sw t1, mem_sdaddr0(t0) li t1, MEM_SDADDR1 sw t1, mem_sdaddr1(t0) li t1, MEM_SDADDR2 sw t1, mem_sdaddr2(t0) /* * Issue 80ns of NOPs * Must use non-cached KSEG1 address of Flash */ li t1, 0xBFC00000 lw t1, 0(t1) sync /* * Perform burst refresh of 4096 rows */ li t1, 4096burstrefresh: sw zero, mem_sdautoref(t0) bne zero, t1, burstrefresh addi t1, t1, -1 li t1, MEM_SDREFCFG_E sw t1, mem_sdrefcfg(t0) sync jr ra nop/********************************************************************/initBOARD: /* * External and/or board-specific peripheral initialization */#define PB1500_BCSR_ADDR 0xAE000000 /* * Establish MUXed pin functionality * * CS=0 * USB=1 USBH * U3=0 UART3 * SRC=0 GPIO6 * EX1=0 GPIO3 * EX0=0 GPIO2 * UR3=1 UART3 * NI2=0 MAC1 * U0=0 UART0 */ li t0, AU1500_SYS_ADDR li t1,(1<<15)|(1<<7) sw t1, sys_pinfunc(t0) /* * Establish GPIO direction * * GPIO0 Input User defined * GPIO1 Input User defined * GPIO2 Input User defined * GPIO3 Input User defined * GPIO4 Input User defined * GPIO5 Input User defined * GPIO6 Input Switch S22 * GPIO7 Input User defined * GPIO9 Input User defined * GPIO10 Input User defined * GPIO11 Input User defined * GPIO12 Input User defined * GPIO13 Input User defined * GPIO14 Input User defined * GPIO15 Input User defined */ li t1,0x0000FFFF sw t1, sys_trioutclr(t0) li t1, 0x00000000 sw t1, sys_outputclr(t0) sync /* * Establish GPIO2 direction * * GPIO200 Input Can be PCI_RST# * GPIO201 Input PCMCIA Card Insert# * GPIO202 Input PCMCIA Card STSCHG# * GPIO203 Input PCMCIA Card IRQ# * GPIO204 Input RTC IRQ# * GPIO205 Input Daughtercard IRQ# * GPIO206 Input 2-wire (not setup here) * GPIO207 Input 2-wire (not setup here) * GPIO208 Input GPIO HEX * GPIO209 Input GPIO HEX * GPIO210 Input GPIO HEX * GPIO211 Input GPIO HEX * GPIO212 Input YAMON endian * GPIO213 Input * GPIO214 Output LED D9 * GPIO215 Output LED D8 */ li t0, AU1500_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)|(1<<14) sw t1,gpio2_dir(t0) sync li t1,(1<<31)|(1<<30)|(0<<15)|(0<<14) sw t1,gpio2_output(t0) sync /* * Establish CLOCKing * * FREQ5: unused * FREQ4: unused * FREQ3: unused * FREQ2: unused * FREQ1: USBH and USBD (48MHz from AUXPLL) * FREQ0: unused */ li t0, AU1500_SYS_ADDR li t1, (0<<12)|(1<<11)|(1<<10) sw t1, sys_freqctrl0(t0) li t1, (3<<12)|(0<<11)|(0<<10)|(3<<7)|(0<<6)|(0<<5) sw t1, sys_clksrc(t0) sync /* Setup PCI Host - See Au1500 PCI app note */ /* Enable PCI Clock - On Pb1500 PCI clock is external and always running */ /* De-assert PCI_RST# - On Pb1500 PCI_RST# is handled externally by default */ /* Wait 6 PCI clock cycles - On Pb1500 the bootup time meets this criteria */ li t0, AU1500_PCI_ADDR li t1, 0x00000000 sw t1, pci_cmem(t0) li t1, 0x0008000F sw t1, pci_config(t0) li t1, 0xFFFF0000 sw t1, pci_b2bmask_cch(t0) li t1, 0x00000000 sw t1, pci_b2bbase0_venid(t0) li t1, 0x00000000 sw t1, pci_b2bbase1_id(t0) li t1, 0xE0000000 sw t1, pci_mwmask_dev(t0) li t1, 0x00000000 sw t1, pci_mwbase_rev_ccl(t0) li t1, 0x02A00356 sw t1, pci_statcmd(t0) li t1, 0x00000000 sw t1, pci_hdrtype(t0) li t1, 0x00000008 sw t1, pci_mbar(t0) li t1, 0x00000000 sw t1, pci_timeout(t0) /* Take LSI PHYs out of reset */ li t0, PB1500_BCSR_ADDR li t1, 3 sw t1, 0x0C(t0) /* Take SED13806 out of reset */ li t1, 0x80 sw t1, 0x14(t0) /* Ensure PCMCIA interface disabled */ lw t1, 0x10(t0) andi t1,t1,0xFF00 sw t1, 0x10(t0) /* Enable DS1693 RTC, clear-out any wakeup events */ li t0, 0xAC000000 lw t1, 0x28(t0) /* 0x0A << 2 */ andi t1, t1, 0x0F ori t1, t1, 0x30 /* enable, select alternate bank */ sw t1, 0x28(t0) sync lw t1, 0x12C(t0) /* 0x4B << 2 */ andi t1, t1, 0xFC /* clear KSE, WIE */ sw t1, 0x12C(t0) sync lw t1, 0x128(t0) /* 0x4A << 2 */ ori t1, t1, 0x08 /* set PAB */ sw t1, 0x128(t0) sync jr ra nop/********************************************************************/alldone: /* * Prepare to invoke application main() */ .set reorder/********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -