rattler.s

来自「eCos操作系统源码」· S 代码 · 共 268 行

S
268
字号
#==============================================================================####      rattler.S####      MPC8250 RATTLER board hardware setup####=============================================================================#####ECOSGPLCOPYRIGHTBEGIN###### -------------------------------------------## This file is part of eCos, the Embedded Configurable Operating System.## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.## Copyright (C) 2003 Gary Thomas#### eCos is free software; you can redistribute it and/or modify it under## the terms of the GNU General Public License as published by the Free## Software Foundation; either version 2 or (at your option) any later version.#### eCos is distributed in the hope that it will be useful, but WITHOUT ANY## WARRANTY; without even the implied warranty of MERCHANTABILITY or## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License## for more details.#### You should have received a copy of the GNU General Public License along## with eCos; if not, write to the Free Software Foundation, Inc.,## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.#### As a special exception, if other files instantiate templates or use macros## or inline functions from this file, or you compile this file and link it## with other works to produce a work based on this file, this file does not## by itself cause the resulting work to be covered by the GNU General Public## License. However the source code for this file must still be made available## in accordance with section (3) of the GNU General Public License.#### This exception does not invalidate any other reasons why a work based on## this file might be covered by the GNU General Public License.#### Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.## at http://sources.redhat.com/ecos/ecos-license/## -------------------------------------------#####ECOSGPLCOPYRIGHTEND######=============================================================================#######DESCRIPTIONBEGIN######## Author(s):    nickg## Contributors: wpd, gthomas## Date:         2003-06-30## Purpose:      RATTLER MPC8250 board hardware setup## Description:  This file contains any code needed to initialize the##               hardware on the Analogue & Micro Rattler (MPC8250) board.########DESCRIPTIONEND########=============================================================================#include <pkgconf/hal.h>        #include <cyg/hal/arch.inc>#include <cyg/hal/ppc_regs.h>		/* on-chip resource layout, special */#------------------------------------------------------------------------------        .globl  hal_hardware_inithal_hardware_init:#if defined(CYG_HAL_STARTUP_ROMRAM) || defined(CYG_HAL_STARTUP_ROM)   #----------------------------------------------   # Load the IMMR register with the base address   #----------------------------------------------   addis    r30,0,0xFF01   # IMMR base addr = 0xFF000000+10000. We add                           # 0x10000 because using relative addressing                          # in load and store instructions only allow a                          # offset from the base of +/-32767.                // Setup for LEDS, using PA[0..2]        lwi     r3,0xE0000000        stw     r3,CYGARC_REG_IMM_PDIRA(r30)        li      r3,0    // All LEDs on        stw     r3,CYGARC_REG_IMM_PDATA(r30)        // Force BR0 to map everything        lwi     r3,0x00000E76        stw     r3,CYGARC_REG_IMM_OR0(r30)	// Need to set the PC into the FLASH (ROM) before the address map changes	lwi	r3,10f        lwi     r5,CYGMEM_REGION_rom	or	r3,r3,r5	mtctr	r3	bctr10:	        // Running in FLASH address space        lwi     r3,0xC0000000        stw     r3,CYGARC_REG_IMM_PDATA(r30)   #*******************************************   # Main System Clock Configuration Registers    #*******************************************// SC  SIUMCR           fF010000  0E24c000 SIU              // SC  SYPCR            fF010004  FFFFFFC3 SIU              // SC  SWSR             fF01000E  0000     SIU                              lwi     r3,0xFFFFFFC3        stw     r3,CYGARC_REG_IMM_SYPCR(r30)        lwz     r3,CYGARC_REG_IMM_SCCR(r30)        ori     r3,r3,0x00000001        // Force baud rate clock divisor = 16        stw     r3,CYGARC_REG_IMM_SCCR(r30)#ifdef CYGHWR_HAL_POWERPC_RATTLER_PCI                lwz     r3,CYGARC_REG_IMM_SIUMCR(r30)        lwi     r4,0x0E040000           // Set configuration bits        or      r3,r3,r4#else        lwi     r3,0x0E24C000           // Set configuration bits#endif                        stw     r3,CYGARC_REG_IMM_SIUMCR(r30)        li      r3,0x0000        sth     r3,CYGARC_REG_IMM_SWSR(r30)// SC  BCR              fF010024  00000000 SIU              // SC  PPC_ACR          fF010028  02       SIU              // SC  PPC_ALRH         fF01002C  01234567 SIU              // SC  PPC_ALRL         fF010030  89ABCDEF SIU              // SC  LCL_ACR          fF010034  02       SIU              // SC  LCL_ALRH         fF010038  01234567 SIU              // SC  LCL_ALRL         fF01003C  89ABCDEF SIU              // SC  TESCR1           fF010040  00000000 SIU              // SC  TESCR2           fF010044  00000000 SIU              // SC  LTESCR1          fF010048  00000000 SIU              // SC  LTESCR2          fF01004C  00000000 SIU              // SC  PDTEA            fF010050  00000000 SIU              // SC  PDTEM            fF010054  00       SIU              // SC  LDTEA            fF010058  00000000 SIU              // SC  LDTEM            fF01005C  00       SIU           li      r3,0x00000000        stw     r3,CYGARC_REG_IMM_BCR(r30)        li      r3,0x02        stb     r3,CYGARC_REG_IMM_PPC_ACR(r30)        lwi     r3,0x01234567        stw     r3,CYGARC_REG_IMM_PPC_ALRH(r30)        lwi     r3,0x89ABCDEF        stw     r3,CYGARC_REG_IMM_PPC_ALRL(r30)        li      r3,0x02        stb     r3,CYGARC_REG_IMM_LCL_ACR(r30)        lwi     r3,0x01234567        stw     r3,CYGARC_REG_IMM_LCL_ALRH(r30)        lwi     r3,0x89ABCDEF        stw     r3,CYGARC_REG_IMM_LCL_ALRL(r30)        li      r3,0x00000000        stw     r3,CYGARC_REG_IMM_TESCR1(r30)        li      r3,0x00000000        stw     r3,CYGARC_REG_IMM_TESCR2(r30)        li      r3,0x00000000        stw     r3,CYGARC_REG_IMM_PDTEA(r30)        li      r3,0x00        stw     r3,CYGARC_REG_IMM_PDTEM(r30)        li      r3,0x00000000        stw     r3,CYGARC_REG_IMM_LDTEA(r30)        li      r3,0x00        stw     r3,CYGARC_REG_IMM_LDTEM(r30)   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   # Initialize the memory controller and SDRAM   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         // Memory layout        // CS0 - 8MB FLASH        lwi     r3,0xFE001001        stw     r3,CYGARC_REG_IMM_BR0(r30)        lwi     r3,0xFF800E76        stw     r3,CYGARC_REG_IMM_OR0(r30)        // CS1 - 16MB DRAM        lwi     r3,0xFF003080        stw     r3,CYGARC_REG_IMM_OR1(r30)        lwi     r3,0x00000041                stw     r3,CYGARC_REG_IMM_BR1(r30)         // CS4 - 1MB external        lwi     r3,0xFFF00000        stw     r3,CYGARC_REG_IMM_OR4(r30)        lwi     r3,0x80001801        stw     r3,CYGARC_REG_IMM_BR4(r30)        // SDRAM controller        li      r5,0        li      r6,0xFF        lwi     r3,0x2000        sth     r3,CYGARC_REG_IMM_MPTPR(r30)        li      r3,0x1F        stb     r3,CYGARC_REG_IMM_PSRT(r30)#define SDRAM_MUX_SETUP 0x0269A452        lwi     r3,0xE8000000|SDRAM_MUX_SETUP        stw     r3,CYGARC_REG_IMM_PSDMR(r30)        stb     r6,0(r5)        lwi     r3,0xC8000000|SDRAM_MUX_SETUP        stw     r3,CYGARC_REG_IMM_PSDMR(r30)        stb     r6,0(r5)        stb     r6,0(r5)        stb     r6,0(r5)        stb     r6,0(r5)        stb     r6,0(r5)        stb     r6,0(r5)        stb     r6,0(r5)        stb     r6,0(r5)        lwi     r3,0xD8000000|SDRAM_MUX_SETUP        stw     r3,CYGARC_REG_IMM_PSDMR(r30)        stb     r6,0(r5)        lwi     r3,0xC0000000|SDRAM_MUX_SETUP        stw     r3,CYGARC_REG_IMM_PSDMR(r30)        // Registers programmed, starting up DRAM        lwi     r3,0xA0000000        stw     r3,CYGARC_REG_IMM_PDATA(r30)                lwi     r3,0x10000        mtctr   r310:     nop             bdnz    10b                // Ready to return        lwi     r3,0x80000000        stw     r3,CYGARC_REG_IMM_PDATA(r30)#ifdef CYG_HAL_STARTUP_ROM	# move return address to where the ROM is	mflr	r3        lwi     r4,0x00FFFFFF        // CAUTION!! Assumes only low 16M for ROM        and     r3,r3,r4	oris	r3,r3,CYGMEM_REGION_rom>>16	mtlr	r3#endif#ifdef CYG_HAL_STARTUP_ROMRAM        // Copy image from ROM to RAM        mflr    r3                      lwi     r4,(CYGMEM_REGION_rom&0xFE000000)        lwi     r5,0x01FFFFFF   // ROM/FLASH base        and     r3,r3,r5        // segment relative        lwi     r6,_hal_hardware_init_done        mtlr    r6        sub     r6,r3,r6        // Absolute address        add     r6,r6,r4        // FLASH address        lwi     r7,0            // where to copy to        lwi     r8,__ram_data_end10:     lwz     r5,0(r6)        stw     r5,0(r7)        addi    r6,r6,4        addi    r7,r7,4        cmplw   r7,r8        bne     10b#endif                        // Ready to return        lwi     r3,0xE0000000        stw     r3,CYGARC_REG_IMM_PDATA(r30)#endif // ROM/ROMRAM                hardware_init_done:        blr#------------------------------------------------------------------------------# end of rattler.S

⌨️ 快捷键说明

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