moab.s
来自「eCos操作系统源码」· S 代码 · 共 284 行
S
284 行
##=============================================================================#### moab.S#### MOAB 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, 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): gthomas## Contributors:hmt## Date: 2002-07-22## Purpose: MOAB board hardware setup## Description: This file contains any code needed to initialize the## hardware on a TAMS MOAB (PowerPC 405GPr) board.########DESCRIPTIONEND########=============================================================================#include <pkgconf/hal.h>#include <cyg/hal/arch.inc> /* register symbols et al */#define CYGARC_HAL_COMMON_EXPORT_CPU_MACROS #include <cyg/hal/ppc_regs.h> /* on-chip resource layout, special */#------------------------------------------------------------------------------// No useable LEDs#define LED(x) #------------------------------------------------------------------------------ FUNC_START( hal_hardware_init ) mflr r30 // Save return address#ifndef CYG_HAL_STARTUP_RAM li r3,0x00000000 // Make sure nothing is cacheable mticcr r3 mtdccr r3 // Force data caches to be totally clean lwi r3,0 lwi r4,0x800010: dcbf 0,r3 dccci 0,r3 addi r3,r3,16 cmpw r3,r4 bne 10b // Basic chip configuration#if CYGHWR_HAL_POWERPC_CPU_SPEED == 250 lwi r3,0x09f8102a lwi r3,0x09f8502a#elif CYGHWR_HAL_POWERPC_CPU_SPEED == 333 lwi r3,0x09f8503a#else#error "Unsupported board/CPU speed" #endif mtdcr DCR_CPC0_CR0,r3 li r3,0x00000000 mtdcr DCR_CPC0_CR1,r3 lwi r3,0x60606000 // Edge conditioning register mtdcr DCR_CPC0_ECR,r3 // GPIO // GPIO 13 - I - media present // GPIO 14 - O - main flash ALE // GPIO 15 - O - main flash CLE // GPIO 16 - I - watchdog ? // GPIO 17 - O - NAND CE // GPIO 24 - O - heartbeat LED lwi r4,GPIO_OR // Leave NAND not-selected, heartbeat off lwi r3,0x00004080 stw r3,0(r4) lwi r4,GPIO_TCR // Tri-state control - enables outputs lwi r3,0x00034080 stw r3,0(r4) li r3,DCR_SDRAM0_CFG // See if SDRAM already configured mtdcr DCR_SDRAM0_CFGADDR,r3 mfdcr r4,DCR_SDRAM0_CFGDATA lwi r3,0x80800000 and r4,r4,r3 cmpw r3,r4 beq sdram_ok // DRAM controller li r3,DCR_SDRAM0_CFG // Turn off controller to allow changes lwi r4,0x00000000 mtdcr DCR_SDRAM0_CFGADDR,r3 mtdcr DCR_SDRAM0_CFGDATA,r4 li r3,DCR_SDRAM0_TR lwi r4,0x010A800E mtdcr DCR_SDRAM0_CFGADDR,r3 mtdcr DCR_SDRAM0_CFGDATA,r4 li r3,DCR_SDRAM0_RTR lwi r4,0x05F00000 mtdcr DCR_SDRAM0_CFGADDR,r3 mtdcr DCR_SDRAM0_CFGDATA,r4 li r3,DCR_SDRAM0_B1CR // Note: non-ascending addresses because lwi r4,0x00062001 // the low 1/2 of memory fails on some boards mtdcr DCR_SDRAM0_CFGADDR,r3 mtdcr DCR_SDRAM0_CFGDATA,r4 li r3,DCR_SDRAM0_B0CR lwi r4,0x02062001 mtdcr DCR_SDRAM0_CFGADDR,r3 mtdcr DCR_SDRAM0_CFGDATA,r4 lwi r4,GPIO_OR // Turn heartbeat LED on lwi r3,0x00004000 stw r3,0(r4) lwi r3,0xA000 // Pause for at least 200us mtctr r313: nop bdnz 13b li r3,DCR_SDRAM0_CFG // Enable controller lwi r4,0x80800000 mtdcr DCR_SDRAM0_CFGADDR,r3 mtdcr DCR_SDRAM0_CFGDATA,r4sdram_ok: // Bus controller li r3,DCR_EBC0_B0AP // BOOT FLASH at 0xFFExxxxx, R/W lwi r4,0x7F8FFE80 mtdcr DCR_EBC0_CFGADDR,r3 mtdcr DCR_EBC0_CFGDATA,r4 li r3,DCR_EBC0_B0CR lwi r4,0xFFE38000 mtdcr DCR_EBC0_CFGADDR,r3 mtdcr DCR_EBC0_CFGDATA,r4 li r3,DCR_EBC0_B1AP // MAIN FLASH at 0xCxxxxxxx, R/W#if CYGHWR_HAL_POWERPC_CPU_SPEED == 250 lwi r4,0x03840000 // Cycle time = 50ns#elif CYGHWR_HAL_POWERPC_CPU_SPEED == 333 lwi r4,0x05840000 #else lwi r4,0x0C840000 #error "Unsupported board/CPU speed" #endif mtdcr DCR_EBC0_CFGADDR,r3 mtdcr DCR_EBC0_CFGDATA,r4 li r3,DCR_EBC0_B1CR lwi r4,0xC0018000 // 1MB, 8bits [actually only 1 byte!] mtdcr DCR_EBC0_CFGADDR,r3 mtdcr DCR_EBC0_CFGDATA,r4 // On-chip memory lwi r4,0xD0000000 // Instruction/Data at 0xD0XXXXXX..0xD7XXXXXX lwi r3,0x80000000 mtdcr DCR_OCM0_ISARC,r4 mtdcr DCR_OCM0_DSARC,r4 mtdcr DCR_OCM0_ISCNTL,r3 mtdcr DCR_OCM0_DSCNTL,r3 lwi r4,GPIO_OR // Turn heartbeat LED off lwi r3,0x00004080 stw r3,0(r4) #endif // ROM or ROMRAM startup lwi r3,0x80000001 // DRAM can be cached - instructions only iccci 0,r3 mticcr r3 li r3,0x00000000 mtdccr r3#ifdef CYG_HAL_STARTUP_ROMRAM // Copy image from ROM to RAM mr r6,r30 lwi r7,0xFFF80000 and r6,r6,r7 subi r6,r6,4 lwi r7,0-4 // where to copy to lwi r8,__ram_data_end10: lwzu r5,4(r6) stwu r5,4(r7) cmplw r7,r8 bne 10b lwi r30,_hal_hardware_init_done#endif lwi r4,GPIO_OR // Turn heartbeat LED on lwi r3,0x00004000 stw r3,0(r4) mtlr r30 // Restore return address blrFUNC_END( hal_hardware_init ) .globl _hang_hang: nop b _hang blr#if 0 .text .globl _get_cache_contents_get_cache_contents: subi r3,r3,4 li r4,256 mtctr r4 li r4,0 // Address lwi r7,0xFFFFFFE0 mfspr r5,SPR_CCR010: and r5,r5,r7 // CIS=0,CWS=0 => DATA, WAY A mtspr SPR_CCR0,r5 sync isync dcread r6,0,r4 stwu r6,4(r3) and r5,r5,r7 // CIS=0,CWS=1 => DATA, WAY B ori r5,r5,0x01 mtspr SPR_CCR0,r5 sync isync mfspr r5,SPR_CCR0 dcread r6,0,r4 stwu r6,4(r3) and r5,r5,r7 // CIS=1,CWS=0 => TAG, WAY A ori r5,r5,0x10 mtspr SPR_CCR0,r5 sync isync dcread r6,0,r4 stwu r6,4(r3) and r5,r5,r7 // CIS=1,CWS=1 => TAG, WAY B ori r5,r5,0x11 mtspr SPR_CCR0,r5 sync isync dcread r6,0,r4 stwu r6,4(r3) addi r4,r4,32 bdnz 10b blr#endif #ifndef CYG_HAL_STARTUP_RAM .section ".reset_vector","ax" ba 0xFFF80100 .previous#endif#------------------------------------------------------------------------------# end of moab.S
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?