hal_platform_setup.h
来自「eCos操作系统源码」· C头文件 代码 · 共 313 行
H
313 行
#ifndef CYGONCE_HAL_PLATFORM_SETUP_H#define CYGONCE_HAL_PLATFORM_SETUP_H/*=============================================================================//// hal_platform_setup.h//// Platform specific support for HAL (assembly code)////=============================================================================//####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 <gary@mind.be>//// 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####//===========================================================================*/#include <pkgconf/system.h> // System-wide configuration info#include CYGBLD_HAL_VARIANT_H // Variant specific configuration#include CYGBLD_HAL_PLATFORM_H // Platform specific configuration#include <cyg/hal/hal_pxa2x0.h> // Variant specific hardware definitions#include <cyg/hal/hal_mmu.h> // MMU definitions#include <cyg/hal/hal_mm.h> // more MMU definitions#include <cyg/hal/uE250.h> // Platform specific hardware definitions#include <cyg/hal/hal_spd.h>#define MDCNFG_VALUE 0x03001BC9// #define MDCNFG_VALUE 0x00001BC9#define MDMRS_VALUE 0x00000000#define MDREFR_VALUE_1 0x00494030#define MDREFR_VALUE_2 0x00094030#define MDREFR_VALUE_3 0x0009C030#define GPCR0_VALUE 0xFFFFFFFF#define GPCR1_VALUE 0xFFFFFFFF#define GPCR2_VALUE 0xFFFFFFFF#define GPSR0_VALUE 0x00028000#define GPSR1_VALUE 0x00002122#define GPSR2_VALUE 0x0001C000#define GPDR0_VALUE 0x03E3A080#define GPDR1_VALUE 0x00FFA963#define GPDR2_VALUE 0x0001C000#define GAFR0_L_VALUE 0x88000000#define GAFR0_U_VALUE 0x001A8010#define GAFR1_L_VALUE 0x90900008 #define GAFR1_U_VALUE 0x0005AAAA#define GAFR2_L_VALUE 0xA0000000#define GAFR2_U_VALUE 0x00000002#define PSSR_VALUE 0x20#define MSC0_VALUE_NONBURST 0x2FD0#define MSC0_VALUE_BURST 0x22D2#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM)#define PLATFORM_SETUP1 _platform_setup1// #define PLATFORM_EXTRAS <cyg/hal/hal_platform_extras.h>#define CYGHWR_HAL_ARM_HAS_MMU// This macro represents the initial startup code for the platform .macro _platform_setup1 // This is where we wind up immediately after reset. At this point, we // are executing from the boot address (0x00000000), not the eventual // flash address. Do some basic setup using position independent code // then switch to real flash address// FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME // This is a quick and dirty workaround to an apparent gas/ld// bug. The computed UNMAPPED_PTR(reset_vector) is off by 0x20. .rept 0x20/4 nop .endr// FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME // Set the direction of the LED GPIO's to 'output' // This will disable the LED's (which are on at boot-time, so we // can see we have safely landed here. ldr r1, =PXA2X0_GPDR0 ldr r2, =0x00600000 str r2, [r1] // Disable interrupts, by setting the Interrupt Mask Registers to all 0's ldr r1,=PXA2X0_ICMR mov r0,#0 str r0,[r1] // disable MMU mov r0, #0x0 mcr p15, 0, r0, c1, c0, 0 // flush TLB mov r0, #0x0 mcr p15, 0, r0, c8, c7, 0 // Flush TLB // flush I&D caches and BTB mov r0, #0x0 mcr p15, 0, r0, c7, c7, 0 // Flush caches CPWAIT r0 // Enables access to coprocessor 0 (The only extra coprocessor on the PXA250) ldr r0, =0x00000001 mcr p15, 0, r0, c15, c1, 0 // Disable the IRQ's and FIQ's in the program status register and // enable supervisor mode ldr r0,=(CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE|CPSR_SUPERVISOR_MODE) msr cpsr, r0 // Set TURBO mode ldr r2, =0x00000321 ldr r1, =PXA2X0_CCCR str r2,[r1] ldr r1, =0x00000003 mcr p14, 0, r1, c6, c0, 0 // Set-up memory according to NMI specs ldr r1,=PXA2X0_RAM_BANK0_BASE ldr r2,[r1] ldr r2,[r1] ldr r2,[r1] ldr r2,[r1] ldr r2,[r1] ldr r2,[r1] ldr r2,[r1] ldr r2,[r1] // Set DRAM Configuration Value ldr r1,=PXA2X0_MDCNFG ldr r2,=MDCNFG_VALUE str r2,[r1] // Set MDMRS ldr r1,=PXA2X0_MDMRS ldr r2,=MDMRS_VALUE str r2,[r1] // Set Refresh Values ldr r1,=PXA2X0_MDREFR ldr r2,=MDREFR_VALUE_1 str r2,[r1] ldr r1,=PXA2X0_MDREFR ldr r2,=MDREFR_VALUE_2 str r2,[r1] ldr r1,=PXA2X0_MDREFR ldr r2,=MDREFR_VALUE_3 str r2,[r1] // Set Static memory registers ldr r1,=PXA2X0_MSC0 ldr r2,=MSC0_VALUE_NONBURST str r2,[r1] // Setup GPIO clear registers ldr r1, =PXA2X0_GPCR0 ldr r2, =(GPCR0_VALUE) str r2, [r1] ldr r1, =PXA2X0_GPCR1 ldr r2, =(GPCR1_VALUE) str r2, [r1] ldr r1, =PXA2X0_GPCR2 ldr r2, =(GPCR2_VALUE) str r2, [r1] // Setup GPIO set registers ldr r1, =PXA2X0_GPSR0 ldr r2, =(GPSR0_VALUE) str r2, [r1] ldr r1, =PXA2X0_GPSR1 ldr r2, =(GPSR1_VALUE) str r2, [r1] ldr r1, =PXA2X0_GPSR2 ldr r2, =(GPSR2_VALUE) str r2, [r1] // Setup GPIO direction registers ldr r1, =PXA2X0_GPDR0 ldr r2, =(GPDR0_VALUE) str r2, [r1] ldr r1, =PXA2X0_GPDR1 ldr r2, =(GPDR1_VALUE) str r2, [r1] ldr r1, =PXA2X0_GPDR2 ldr r2, =(GPDR2_VALUE) str r2, [r1] // Setup GPIO alternate function registers ldr r1, =PXA2X0_GAFR0_L ldr r2, =(GAFR0_L_VALUE) str r2, [r1] ldr r1, =PXA2X0_GAFR0_U ldr r2, =(GAFR0_U_VALUE) str r2, [r1] ldr r1, =PXA2X0_GAFR1_L ldr r2, =(GAFR1_L_VALUE) str r2, [r1] ldr r1, =PXA2X0_GAFR1_U ldr r2, =(GAFR1_U_VALUE) str r2, [r1] ldr r1, =PXA2X0_GAFR2_L ldr r2, =(GAFR2_L_VALUE) str r2, [r1] ldr r1, =PXA2X0_GAFR2_U ldr r2, =(GAFR2_U_VALUE) str r2, [r1] ldr r1, =PXA2X0_PSSR ldr r2, =(PSSR_VALUE) str r2, [r1] // Enable the Icache mrc p15, 0, r0, c1, c0, 0 orr r0, r0, #MMU_Control_I mcr p15, 0, r0, c1, c0, 0 CPWAIT r0 // Turn on red led ldr r1,=PXA2X0_GPSR0 ldr r2,=0x00200000 str r2,[r1] // Set up a stack [for calling C code] ldr r1,=__startup_stack ldr r2,=PXA2X0_RAM_BANK0_BASE orr sp,r1,r2 // Create MMU tables bl hal_mmu_init // Turn off red led ldr r1,=PXA2X0_GPCR0 ldr r2,=0x00200000 str r2,[r1] // Enable MMU ldr r2,=10f ldr r1,=MMU_Control_Init|MMU_Control_M mcr MMU_CP,0,r1,MMU_Control,c0 mov pc, r2 nop nop nop10: // Turn on green led ldr r1,=PXA2X0_GPSR0 ldr r2,=0x00400000 str r2,[r1] .endm#else // defined(CYG_HAL_STARTUP_ROM)#define PLATFORM_SETUP1#endif#define PLATFORM_VECTORS _platform_vectors .macro _platform_vectors .globl hal_pcsr_cfg_retryhal_pcsr_cfg_retry: .long 0 // Boot-time value of PCSR Retry bit. .endm /*---------------------------------------------------------------------------*//* end of hal_platform_setup.h */#endif /* CYGONCE_HAL_PLATFORM_SETUP_H */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?