ts6.s

来自「eCos操作系统源码」· S 代码 · 共 1,608 行 · 第 1/5 页

S
1,608
字号
#==============================================================================####      ts6.S####      MPC8260 TS6 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) 2002 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):   pfine, wpd## Contributors: nickg## Date:        2002-02-27## Purpose:     TigerSHARC-6 board hardware setup## Description: This file contains any code needed to initialize the##              hardware on the Delphi TigerSHARC-6 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:// It is possible that the board may experience a soft reset, which// will cause this hal_hardware_init routine to be called.  As a // result of the soft reset, the IMMR, memory controller, system// protection logic, interrupt controller and parallel I/O pins are// NOT reset (MPC8260 User Manual p 5-2), and therefor we do not want to// run the setup in this routine.  Luckily, a hard reset will clear// the NHR bit (bit 15) of the HID0 register.  We will check for this bit// to be 0 (implying a hard reset).  If it is 0, we will run the // initialization.  If non-zero, we will skip the initialization.// // If we do the initialization, then we must set the NHR bit so that// next time we hit this point in the routine, we can determine the type// of reset.   mfspr  r22,CYGARC_REG_HID0    # Get contents of HID0   rlwinm r23,r22,0,15,15 #shift HID0 by 0, mask with 0x10000, store in r23   cmpwi  r23,0       # Compare r23 with 0   bne    hardware_init_done   mfspr r31,CYGARC_REG_LR   #----------------------------------------------   # Load the IMMR register with the base address   #----------------------------------------------   addis    r4,0,0x0471   # IMMR base addr = 0x04700000+10000. We add                           # 0x10000 because using relative addressing                          # in load and store instructions only allow a                          # offset from the base of +/-32767.   addis    r5,0,0x0470   addis    r3,0,0x0F01            # The default IMMR base address was 0x0F0000000 as # originally programmed into the Hard Reset # Configuration Word.   stw      r5,CYGARC_REG_IMM_IMMR(r3)                             mfspr    r21,CYGARC_REG_HID0	  # get HID0 in R21   oris	    r21,r21,0x1     # Set bit 15 of HID0 (NHR)   mtspr    CYGARC_REG_HID0,r21       # load HID0 with NHR set   #*******************************************   # Main System Clock Configuration Registers    #*******************************************   #-------------------------------------------------------------------------   # We only need to program the System Clock Control Register (SCCR). The    # System Clock Mode Register (SCMR) doesn t need to be programmed here   # because the MODCLK_HI bits in the Hard Reset Configuration Word and the   # MODCK pins dictate the values in the SCCR during power-on reset.   #-------------------------------------------------------------------------   #-------------------------------------------------------------------------   # Program the System Clock Control Register (SCCR).   #   # - Bits 0 - 28 Reserved. Clear to 0.   #   # - CLPD (CPM Low Power Disable) = 0 =    #   #     CPM does not enter low power mode when the core enters low power    #     mode.   #   # - DFBRG (Division Factor of BRGCLK) = 01 - Divide by 8.   #   #------------------------------------------------------------------------- 	   addis    r3,0,0x0000   ori      r3,r3,0x0001   # SCCR = 0x00000001   stw      r3,CYGARC_REG_IMM_SCCR(r4)   #~~~~~~~~~~~~~~~~~~~~   # Initialize the SIU   #~~~~~~~~~~~~~~~~~~~~   bl       init_siu   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   # Initialize the memory controller and SDRAM   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    bl       init_memc   mtspr    CYGARC_REG_LR,r31      # restore original Link Register value hardware_init_done:#define nFLASH_LEDS_FOREVER#ifdef FLASH_LEDS_FOREVER   bl   init_user_leds   b    flash_leds_forever#endif#if 0	b memory_test#endif        bclr 20,0	########################################################################## Function: init_siu## Description: Initializes the System Interface Unit##  History:###########################################################################        init_siu:   #-----------------------------------------------------------------------   # Program the System Protection Control Register with the following    # values:   #   # - SWTC (Software Watchdog Timer Count) = 0xFFFF = programmed to max   #   count value.   #   # - BMT (Bus Monitor Timing) = 0xFF = Set to max timeout period.   #   # - PBME (60x Bus Monitor Enable) = 1 = enabled.   #   # - LBME (Local Bus Monitor Enable) = 1 = enabled.   #     # - Bits 26-28 Reserved. Set to 0.   #   # - SWE (Software Watchdog Enabled) = 0 = disabled for now. User will    #   have to enable this in a non-debug application.   #   # - SWRI (Software Watchdog Reset/Interrupt Select) = 1 = Software    #   watchdog timeout or bus monitor time-out causes a soft reset.   #   # - SWP (Software Watchdog Prescale) = 1 = clock is prescaled.   #-----------------------------------------------------------------------   addis    r3,0,0xFFFF   ori      r3,r3,0xFFC3   # SYPCR = 0xFFFFFFC3   stw      r3,CYGARC_REG_IMM_SYPCR(r4)       #-------------------------------------------------------------------------   # Program the Bus Configuration Register. The details are as follows:   #   # - EBM (External Bus Mode) = 0 = Single MPC8260 bus mode is assumed.   #   # - APD (Address Phase delay) = 001 =    #   #     One address tenure wait states for address operations initiated by    #     a 60x bus master.   #                                 # - L2C (Secondary Cache Controller) = 0 = No secondary cache controller   #                                          is assumed.   #   # - L2D (L2 cache hit Delay) = 000 = This is a don t care because we re    #                                    not using the L2 cache.   #   # - PLDP (PipeLine maximum Depth) = 0 = The pipeline max depth is one.   #   # - Bits 9-11 = Reserved. Set to 0.   #   # - ETM (Compatibility Mode enable) = 1 = Extended transfer mode is   #                                         enabled.   #   # - LETM (Local Bus Compatibility Mode Enable) = 1 =    #   #     Extended transfer mode is enabled on the local bus.   #   # - EPAR (Even Parity) = 0 = This is a do not care.   #   # - LEPAR (Local Bus Even Parity) = 0 = This is a do not care.   #   # - Bits 16-20 = Reserved. Set to 0.   #   # - EXDD (External Master Delay Disable) = 0 =    #   #     The memroy controller inserts one wait state between the assertion    #     of TS and the assertion of CS when an external master accesses an    #     address space controlled by the memory controller.   #   # - Bits 22-26 = Reserved. Set to 0.   #   # - ISPS (Internal Space Port Size) = 0 =    #   #     MPC8260 acts as a 64-bit slave to external master accesses to its    #     internal space.   #   # - Bits 28-31 = Reserved. Set to 0.   #                                                 #-------------------------------------------------------------------------   addis    r3,0,0x100c   stw      r3,CYGARC_REG_IMM_BCR(r4)   #-------------------------------------------------------------------------   # Program the 60x Bus Arbiter Configuration Register. The details are as   # follows:   #   # - Bits 0-1 = Reserved. Set to 0.    #   # - DBGD (Data Bus Grant Delay) = Minimum of zero wait states for PowerPC   #                                 master-initiated data operations. This    #                                 is the minimum delay between TS/ and    #                                 DBG/.   #   # - Bits 3 = Reserved. Set to 0.   #   # - PRKM (Parking Master) = 0010 = CPM is at a low request level for the    #                                  parked master.   #   #-------------------------------------------------------------------------   addi     r3,0,0x0002   stb      r3,CYGARC_REG_IMM_PPC_ACR(r4)      #-------------------------------------------------------------------------   # Program the 60x Bus Arbitration-Level[High] Register. The priority for    # potential bus masters are defined by locating the value associated with   # a particular master from the PRKM field in the PPC_ACR register and    # inserting its value in the priority field. Priority field 0 is the   # highest priority and the lowest is Priority field 15 in the PPC_ALRH   # register.   #   # - Priority Field 0 = 0000 = CPM high request level   #   # - Priority Field 1 = 0001 = CPM middle request level   #   # - Priority Field 2 = 0010 = CPM low request level   #   # - Priority Field 3 = 0110 = Internal Core   #   # - Priority Field 4 = 0111 = External Master 1   #   # - Priority Field 5 = 1000 = External Master 2   #   # - Priority Field 6 = 1001 = External Master 3   #   # - Priority Field 7 = 0011 = Reserved   #   #-------------------------------------------------------------------------   addis    r3,0,0x0126   ori      r3,r3,0x7893   stw      r3,CYGARC_REG_IMM_PPC_ALRH(r4)   #------------------------------------------------------------------------   #   # First program the SIUMCR. The details are as follows:   #   # - BBD (Bus Busy Disable) = 0 = [ABB/]/[IRQ2] pin is ABB/ and [DBB/]/IRQ2    #                                pin is DBB/.   #

⌨️ 快捷键说明

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