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 + -
显示快捷键?