📄 cpu.h
字号:
#ifndef __ARM_CPU_H__#define __ARM_CPU_H__//==========================================================================//// cpu.h//// ARM specific processor defines////==========================================================================//####COPYRIGHTBEGIN####// // ------------------------------------------- // The contents of this file are subject to the Red Hat eCos Public License // Version 1.1 (the "License"); you may not use this file except in // compliance with the License. You may obtain a copy of the License at // http://www.redhat.com/ // // Software distributed under the License is distributed on an "AS IS" // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the // License for the specific language governing rights and limitations under // the License. // // The Original Code is eCos - Embedded Configurable Operating System, // released September 30, 1998. // // The Initial Developer of the Original Code is Red Hat. // Portions created by Red Hat are // Copyright (C) 1998, 1999, 2000 Red Hat, Inc. // All Rights Reserved. // ------------------------------------------- // //####COPYRIGHTEND####//==========================================================================//#####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; fp_reg _f3; fp_reg _f4; fp_reg _f5; fp_reg _f6; fp_reg _f7; unsigned long _fps;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -