⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arm.h

📁 這是一個實時嵌入式作業系統 實作了MCS51 ARM等MCU
💻 H
字号:
/************************************************************************************ * common/arm.h * *   Copyright (C) 2007 Gregory Nutt. All rights reserved. *   Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * 3. Neither the name Gregory Nutt nor the names of its contributors may be *    used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * ************************************************************************************/#ifndef __ARM_H#define __ARM_H/************************************************************************************ * Included Files ************************************************************************************/#ifndef __ASSEMBLY__# include <sys/types.h>#endif/************************************************************************** * Conditional Compilation **************************************************************************/#undef CONFIG_ALIGNMENT_TRAP#undef CONFIG_DCACHE_WRITETHROUGH#undef CONFIG_CACHE_ROUND_ROBIN#undef CONFIG_DCACHE_DISABLE#undef CONFIG_ICACHE_DISABLE/************************************************************************************ * Definitions ************************************************************************************//* ARM9EJS **************************************************************************//* PSR bits */#define MODE_MASK       0x0000001f#define USR26_MODE      0x00000000#define FIQ26_MODE      0x00000001#define IRQ26_MODE      0x00000002#define SVC26_MODE      0x00000003#define USR_MODE        0x00000010#define FIQ_MODE        0x00000011#define IRQ_MODE        0x00000012#define SVC_MODE        0x00000013#define ABT_MODE        0x00000017#define UND_MODE        0x0000001b#define MODE32_BIT      0x00000010#define SYSTEM_MODE     0x0000001f#define PSR_T_BIT       0x00000020#define PSR_F_BIT       0x00000040#define PSR_I_BIT       0x00000080#define PSR_J_BIT       0x01000000#define PSR_Q_BIT       0x08000000#define PSR_V_BIT       0x10000000#define PSR_C_BIT       0x20000000#define PSR_Z_BIT       0x40000000#define PSR_N_BIT       0x80000000/* CR1 bits (CP#15 CR1) */#define CR_M            0x00000001 /* MMU enable                          */#define CR_A            0x00000002 /* Alignment abort enable              */#define CR_C            0x00000004 /* Dcache enable                       */#define CR_W            0x00000008 /* Write buffer enable                 */#define CR_P            0x00000010 /* 32-bit exception handler            */#define CR_D            0x00000020 /* 32-bit data address range           */#define CR_L            0x00000040 /* Implementation defined              */#define CR_B            0x00000080 /* Big endian                          */#define CR_S            0x00000100 /* System MMU protection               */#define CR_R            0x00000200 /* ROM MMU protection                  */#define CR_F            0x00000400 /* Implementation defined              */#define CR_Z            0x00000800 /* Implementation defined              */#define CR_I            0x00001000 /* Icache enable                       */#define CR_V            0x00002000 /* Vectors relocated to 0xffff0000     */#define CR_RR           0x00004000 /* Round Robin cache replacement       */#define CR_L4           0x00008000 /* LDR pc can set T bit                */#define CR_DT           0x00010000#define CR_IT           0x00040000#define CR_ST           0x00080000#define CR_FI           0x00200000 /* Fast interrupt (lower latency mode) */#define CR_U            0x00400000 /* Unaligned access operation          */#define CR_XP           0x00800000 /* Extended page tables                */#define CR_VE           0x01000000 /* Vectored interrupts                 *//* Hardware page table definitions. * * Level 1 Descriptor (PMD) * * Common definitions. */#define PMD_TYPE_MASK       0x00000003  /* Bits 1:0:   Type of descriptor */#define PMD_TYPE_FAULT      0x00000000#define PMD_TYPE_COARSE     0x00000001#define PMD_TYPE_SECT       0x00000002#define PMD_TYPE_FINE       0x00000003                                    /* Bits 3:2:   Depends on descriptor */#define PMD_BIT4            0x00000010  /* Bit  4:     Must be one */#define PMD_DOMAIN_MASK     0x000001e0  /* Bits 8:5:   Domain control bits */#define PMD_DOMAIN(x)       ((x) << 5)#define PMD_PROTECTION      0x00000200  /* Bit 9:      v5 only */                                    /* Bits 31:10: Depend on descriptor *//* Level 1 Section Descriptor.  Section descriptors allow fast, single * level mapping between 1Mb address regions. */                                        /* Bits 1:0:   Type of mapping */#define PMD_SECT_BUFFERABLE 0x00000004  /* Bit  2:     1=bufferable */#define PMD_SECT_CACHEABLE  0x00000008  /* Bit  3:     1=cacheable */                                        /* Bit  4:     Common, must be one */                                        /* Bits 8:5:   Common domain control */                                        /* Bit  9:     Common protection */#define PMD_SECT_AP_MASK    0x00000c00  /* Bits 11:10: Access permission */#define PMD_SECT_AP_WRITE   0x00000400#define PMD_SECT_AP_READ    0x00000800                                        /* Bits 19:20: Should be zero */#define PMD_SECT_TEX_MASK   0xfff00000  /* Bits 31:20: v5, Physical page */#define PMD_SECT_APX        0x00008000  /* Bit  15:    v6 only */#define PMD_SECT_S          0x00010000  /* Bit  16:    v6 only */#define PMD_SECT_nG         0x00020000  /* Bit  17:    v6 only */#define PMD_SECT_UNCACHED   (0)#define PMD_SECT_BUFFERED   (PMD_SECT_BUFFERABLE)#define PMD_SECT_WT         (PMD_SECT_CACHEABLE)#define PMD_SECT_WB         (PMD_SECT_CACHEABLE|PMD_SECT_BUFFERABLE)#define PMD_SECT_MINICACHE  (PMD_SECT_TEX(1)|PMD_SECT_CACHEABLE)#define PMD_SECT_WBWA       (PMD_SECT_TEX(1)|PMD_SECT_CACHEABLE|PMD_SECT_BUFFERABLE)/* Level 1 Coarse Table Descriptor.  Coarse Table Descriptors support * two level mapping between 16Kb memory regions. */                                        /* Bits 1:0:   Type of mapping */                                        /* Bits 3:2:   Should be zero */                                        /* Bit  4:     Common, must be one */                                        /* Bits 8:5:   Common domain control */                                        /* Bits 9:     Should be zero */#define PMD_COARSE_TEX_MASK 0xfffffc00  /* Bits 31:10: v5, Physical page *//* Level 1 Fine Table Descriptor.  Coarse Table Descriptors support * two level mapping between 4Kb memory regions. */                                        /* Bits 1:0:   Type of mapping */                                        /* Bits 3:2:   Should be zero */                                        /* Bit  4:     Common, must be one */                                        /* Bits 8:5:   Common domain control */                                        /* Bits 11:9:  Should be zero */#define PMD_FINE_TEX_MASK   0xfffff000  /* Bits 31:12: v5, Physical page *//* Level 2 Table Descriptor (PTE).  -- All tables */#define PTE_TYPE_MASK       (3 << 0)    /* Bits: 1:0:  Type of mapping */#define PTE_TYPE_FAULT      (0 << 0)    /*   None */#define PTE_TYPE_LARGE      (1 << 0)    /*   64Kb of memory */#define PTE_TYPE_SMALL      (2 << 0)    /*    4Kb of memory */#define PTE_TYPE_TINY       (3 << 0)    /*    1Kb of memory (v5)*/#define PTE_BUFFERABLE      (1 << 2)    /* Bit  2:     1=bufferable */#define PTE_CACHEABLE       (1 << 3)    /* Bit  3:     1=cacheable */                                        /* Bits 31:4:  Depend on type *//* Large page -- 64Kb */                                         /* Bits: 1:0:  Type of mapping */                                         /* Bits: 3:2:  Bufferable/cacheable */#define PTE_LARGE_AP_MASK    (0xff << 4) /* Bits 11:4   Access permissions */#define PTE_LARGE_AP_UNO_SRO (0x00 << 4)#define PTE_LARGE_AP_UNO_SRW (0x55 << 4)#define PTE_LARGE_AP_URO_SRW (0xaa << 4)#define PTE_LARGE_AP_URW_SRW (0xff << 4)                                         /* Bits 15:12: Should be zero */#define PTE_LARGE_TEX_MASK   0xffff0000  /* Bits 31:16: v5, Physical page *//* Small page -- 4Kb */                                         /* Bits: 1:0:  Type of mapping */                                         /* Bits: 3:2:  Bufferable/cacheable */#define PTE_SMALL_AP_MASK    (0xff << 4) /* Bits: 11:4: Access permissions */#define PTE_SMALL_AP_UNO_SRO (0x00 << 4)#define PTE_SMALL_AP_UNO_SRW (0x55 << 4)#define PTE_SMALL_AP_URO_SRW (0xaa << 4)#define PTE_SMALL_AP_URW_SRW (0xff << 4)#define PTE_SMALL_TEX_MASK   0xfffff000  /* Bits: 31:12: Physical page *//* Tiny page -- 1Kb */                                        /* Bits: 1:0:  Type of mapping */                                        /* Bits: 3:2:  Bufferable/cacheable */#define PTE_EXT_AP_MASK      (3 << 4)   /* Bits: 5:4:  Access persions */#define PTE_EXT_AP_UNO_SRO   (0 << 4)#define PTE_EXT_AP_UNO_SRW   (1 << 4)#define PTE_EXT_AP_URO_SRW   (2 << 4)#define PTE_EXT_AP_URW_SRW   (3 << 4)                                        /* Bits: 9:6:  Should be zero */#define PTE_TINY_TEX_MASK    0xfffffc00 /* Bits: 31:10: Physical page *//* Default MMU flags for memory and IO */#define MMU_MEMFLAGS \  (PMD_TYPE_SECT|PMD_SECT_WB|PMD_BIT4|PMD_SECT_AP_WRITE|PMD_SECT_AP_READ)#define MMU_IOFLAGS \  (PMD_TYPE_SECT|PMD_BIT4|PMD_SECT_AP_WRITE|PMD_SECT_AP_READ)#define MMU_L1_VECTORFLAGS   (PMD_TYPE_COARSE|PMD_BIT4)#define MMU_L2_VECTORFLAGS   (PTE_TYPE_SMALL|PTE_SMALL_AP_UNO_SRW)/* Mapped section size */#define SECTION_SIZE          (1 << 20)   /* 1Mb *//* We place the page tables 16K below the beginning of .text.  The * following value is assume to be the (virtual) start address of * .text. */#define PGTABLE_SIZE          0x00004000/************************************************************************************ * Inline Functions ************************************************************************************/#ifndef __ASSEMBLY__#endif#endif  /* __ARM_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -