📄 cpu.h
字号:
#ifndef __ARM_CPU_H__
#define __ARM_CPU_H__
//==========================================================================
//
// cpu.h
//
// ARM specific processor defines
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// 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):
// Contributors: gthomas
// Date: 1999-10-20
// Purpose: ARM specific processor defines
// Description: ARM is a Registered Trademark of Advanced RISC Machines
// Limited.
// Other Brands and Trademarks are the property of their
// respective owners.
//
//####DESCRIPTIONEND####
//
//=========================================================================
#include <bsp/bsp.h>
#include <bsp/defs.h>
#ifdef __ECOS__
#include <cyg/hal/hal_arch.h>
#endif
/*
* Only define __NEED_UNDERSCORE__ for arm-coff targets
*/
#if !defined(__ELF__)
# define __NEED_UNDERSCORE__
#endif
/*
* Macros to glue together two tokens.
*/
# ifdef __STDC__
# define XGLUE(a,b) a##b
# else
# define XGLUE(a,b) a/**/b
# endif
# define GLUE(a,b) XGLUE(a,b)
/*
* Symbol Names with leading underscore if necessary
*/
# ifdef __NEED_UNDERSCORE__
# define SYM_NAME(name) GLUE(_,name)
# else
# define SYM_NAME(name) name
# endif /* __NEED_UNDERSCORE__ */
/*
* Various macros to better handle assembler/object format differences
*/
#if defined(__ASSEMBLER__)
/*
* Assembly function start definition
*/
#ifdef __NEED_UNDERSCORE__
.macro FUNC_START name
.global _\name
.align 4
_\name:
.endm
#else
.macro FUNC_START name
.global \name
.align 4
\name:
.endm
#endif
/*
* Assembly function end definition
*/
#ifdef __NEED_UNDERSCORE__
.macro FUNC_END name
.endm
#else
.macro FUNC_END name
.endm
#endif
/*
* Register Prefix
*/
# ifndef __REGISTER_PREFIX__
# define __REGISTER_PREFIX__
# endif /* __REGISTER_PREFIX__ */
/*
* Immediate Prefix
*/
# ifndef __IMM_PREFIX__
# define __IMM_PREFIX__ #
# endif /* __IMM_PREFIX__ */
/*
* use the right prefix for registers.
*/
# define REG(x) GLUE(__REGISTER_PREFIX__,x)
/*
* use the right prefix for immediate values.
*/
# define IMM(x) GLUE(__IMM_PREFIX__,x)
#endif /* defined(__ASSEMBLER__) */
/*
* Setup register defines and such
*/
#if defined(__ASSEMBLER__)
# define r0 REG (r0)
# define r1 REG (r1)
# define r2 REG (r2)
# define r3 REG (r3)
# define r4 REG (r4)
# define r5 REG (r5)
# define r6 REG (r6)
# define r7 REG (r7)
# define r8 REG (r8)
# define r9 REG (r9)
# define r10 REG (r10)
# define r11 REG (r11)
# define r12 REG (r12)
# define r13 REG (r13)
# define sp REG (sp)
# define r14 REG (r14)
# define lr REG (lr)
# define pc REG (pc)
# define f0 REG (f0)
# define f1 REG (f1)
# define f2 REG (f2)
# define f3 REG (f3)
# define f4 REG (f4)
# define f5 REG (f5)
# define f6 REG (f6)
# define f7 REG (f7)
# define fps REG (fps)
# define cpsr REG (cpsr)
# define spsr REG (spsr)
/*
* Register offset definitions
* These numbers are offsets into the ex_regs_t struct.
*/
# define r0_o 0
# define r1_o 4
# define r2_o 8
# define r3_o 12
# define r4_o 16
# define r5_o 20
# define r6_o 24
# define r7_o 28
# define r8_o 32
# define r9_o 36
# define r10_o 40
# define r11_o 44
# define r12_o 48
# define r13_o 52
# define sp_o r13_o
# define r14_o 56
# define lr_o r14_o
# define pc_o 60
# define f0_o 64
# define f1_o 76
# define f2_o 88
# define f3_o 100
# define f4_o 112
# define f5_o 124
# define f6_o 136
# define f7_o 148
# define fps_o 160
# define cpsr_o 164
# define spsvc_o 168
# define ARM_EX_REGS_T_SIZE 172
#else /* !defined(__ASSEMBLER__) */
/*
* Register name that is used in help strings and such
*/
# define REGNAME_EXAMPLE "r0"
/*
* Register numbers. These are assumed to match the
* register numbers used by GDB.
*/
enum __regnames {
REG_R0,
REG_R1,
REG_R2,
REG_R3,
REG_R4,
REG_R5,
REG_R6,
REG_R7,
REG_R8,
REG_R9,
REG_R10,
REG_R11,
REG_R12,
REG_R13,
REG_SP=REG_R13,
REG_R14,
REG_LR=REG_R14,
REG_PC,
REG_F0,
REG_F1,
REG_F2,
REG_F3,
REG_F4,
REG_F5,
REG_F6,
REG_F7,
REG_FPS,
REG_CPSR,
REG_SPSVC,
REG_MAX=REG_SPSVC
};
/*
* 12-byte struct for storing Floating point registers
*/
typedef struct
{
unsigned long high;
unsigned long middle;
unsigned long low;
} fp_reg;
/*
* How registers are stored for exceptions.
*/
#ifdef __ECOS__
#define ex_regs_t HAL_SavedRegisters
#define _r0 d[0]
#define _r1 d[1]
#define _r2 d[2]
#define _r3 d[3]
#define _r4 d[4]
#define _r5 d[5]
#define _r6 d[6]
#define _r7 d[7]
#define _r8 d[8]
#define _r9 d[9]
#define _r10 d[10]
#define _r11 fp
#define _r12 ip
#define _r13 sp
#define _r14 lr
#define _pc pc
#define _cpsr cpsr
#define _spsvc msr
#else
typedef struct
{
unsigned long _r0;
unsigned long _r1;
unsigned long _r2;
unsigned long _r3;
unsigned long _r4;
unsigned long _r5;
unsigned long _r6;
unsigned long _r7;
unsigned long _r8;
unsigned long _r9;
unsigned long _r10;
unsigned long _r11;
unsigned long _r12;
unsigned long _r13;
unsigned long _r14;
unsigned long _pc;
fp_reg _f0;
fp_reg _f1;
fp_reg _f2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -