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

📄 csb_arm_ram_start.s

📁 GNU环境下uC/OS-II的移植代码:BSP & OS部分
💻 S
字号:
/************************************************************************************************************                                             EXAMPLE CODE**                          (c) Copyright 2003-2006; Micrium, Inc.; Weston, FL**               All rights reserved.  Protected by international copyright laws.**               Knowledge of the source code may NOT be used to develop a similar product.**               Please help us continue to provide the Embedded community with the finest*               software available.  Your honesty is greatly appreciated.**********************************************************************************************************//************************************************************************************************************                                           GNU STARTUP FILE** Filename      : CSB_ARM_RAM_start.s* Version       : V1.88* Programmer(s) : Jean-Denis Hatier**********************************************************************************************************/                                                                /* Mode, correspords to bits 0-5 in CPSR.               */    .equ     OS_CPU_ARM_MODE_MASK, 0x1F                         /* Bit mask for mode bits in CPSR                       */    .equ     OS_CPU_ARM_MODE_USR,  0x10                         /* User mode                                            */    .equ     OS_CPU_ARM_MODE_FIQ,  0x11                         /* Fast Interrupt Request mode                          */    .equ     OS_CPU_ARM_MODE_IRQ,  0x12                         /* Interrupt Request mode                               */    .equ     OS_CPU_ARM_MODE_SVC,  0x13                         /* Supervisor mode                                      */    .equ     OS_CPU_ARM_MODE_ABT,  0x17                         /* Abort mode                                           */    .equ     OS_CPU_ARM_MODE_UND,  0x1B                         /* Undefined Instruction mode                           */    .equ     OS_CPU_ARM_MODE_SYS,  0x1F                         /* System mode                                          */                                                                /* Define sizes for each mode's stack.                  */    .equ     OS_CPU_ARM_MODE_FIQ_STK_SIZE, 0x100    .equ     OS_CPU_ARM_MODE_IRQ_STK_SIZE, 0x100    .equ     OS_CPU_ARM_MODE_ABT_STK_SIZE, 0x100    .equ     OS_CPU_ARM_MODE_SVC_STK_SIZE, 0x100    .equ     OS_CPU_ARM_MODE_UND_STK_SIZE, 0x100    .equ     OS_CPU_ARM_MODE_SYS_STK_SIZE, 0x100                                                                /* Declare the stacks.                                  */    .global  OS_CPU_ARM_MODE_FIQ_STK    .global  OS_CPU_ARM_MODE_IRQ_STK    .global  OS_CPU_ARM_MODE_ABT_STK    .global  OS_CPU_ARM_MODE_SVC_STK    .global  OS_CPU_ARM_MODE_UND_STK    .global  OS_CPU_ARM_MODE_SYS_STK                                                                /* Allocate the stacks,                                 */    .comm    OS_CPU_ARM_MODE_FIQ_STK, OS_CPU_ARM_MODE_FIQ_STK_SIZE  /*  for the FIQ mode,                               */    .comm    OS_CPU_ARM_MODE_IRQ_STK, OS_CPU_ARM_MODE_IRQ_STK_SIZE  /*  for the IRQ mode,                               */    .comm    OS_CPU_ARM_MODE_ABT_STK, OS_CPU_ARM_MODE_ABT_STK_SIZE  /*  for the Abort mode,                             */    .comm    OS_CPU_ARM_MODE_SVC_STK, OS_CPU_ARM_MODE_SVC_STK_SIZE  /*  for the Supervisor mode,                        */    .comm    OS_CPU_ARM_MODE_UND_STK, OS_CPU_ARM_MODE_UND_STK_SIZE  /*  for the Undef mode,                             */    .comm    OS_CPU_ARM_MODE_SYS_STK, OS_CPU_ARM_MODE_SYS_STK_SIZE  /*  for the System & User mode.                     *//************************************************************************************************************************/    .extern  _bss    .extern  _ebss    .extern   main    .global   start    .section .text                                                                /* EXCEPTION TABLE AT ADDRESS 0x00000000.               */reset:    b  start    b  OS_CPU_ARM_ExceptUndefInstrHndlr    b  OS_CPU_ARM_ExceptSwiHndlr    b  OS_CPU_ARM_ExceptPrefetchAbortHndlr    b  OS_CPU_ARM_ExceptDataAbortHndlr    b  OS_CPU_ARM_ExceptAddrAbortHndlr    b  OS_CPU_ARM_ExceptIrqHndlr    b  OS_CPU_ARM_ExceptFiqHndlrOS_CPU_ARM_ExceptResetHndlr:    b  OS_CPU_ARM_ExceptResetHndlrOS_CPU_ARM_ExceptUndefInstrHndlr:    b  OS_CPU_ARM_ExceptUndefInstrHndlrOS_CPU_ARM_ExceptSwiHndlr:    b  OS_CPU_ARM_ExceptSwiHndlrOS_CPU_ARM_ExceptPrefetchAbortHndlr:    b  OS_CPU_ARM_ExceptPrefetchAbortHndlrOS_CPU_ARM_ExceptDataAbortHndlr:    b  OS_CPU_ARM_ExceptDataAbortHndlrOS_CPU_ARM_ExceptAddrAbortHndlr:    b  OS_CPU_ARM_ExceptAddrAbortHndlrOS_CPU_ARM_ExceptIrqHndlr:    b  OS_CPU_ARM_ExceptIrqHndlrOS_CPU_ARM_ExceptFiqHndlr:    b  OS_CPU_ARM_ExceptFiqHndlr/************************************************************************************************************************/                                                                /* At the end of the reset sequence, MMU, ICache,       */                                                                /*  DCache, and write buffer are all disabled.  Also    */                                                                /*  IRQs and FIQs are disabled in the processor's CPSR. */                                                                /*  The operating mode is SYS (system mode), and        */                                                                /*  the PC is vectored at 0x00000000.  A branch in      */                                                                /*  0x00000000 brings us directly here.                 */start:    ldr  r0, =0x00000000    mcr  p15, 0, r0, c3,  c0,  0                                /* Grant manager access to all domains.                 */    nop    nop    nop    ldr  r0, =0x00002001    mcr  p15, 0, r0, c15, c1,  0                                /* Allow access to all coprocessors.                    */    nop    nop    nop    ldr  r0, =0x00000000    mcr  p15, 0, r0, c8,  c7,  0                                /* Flush TLB's.                                         */    mcr  p15, 0, r0, c7,  c7,  0                                /* Flush Caches.                                        */    mcr  p15, 0, r0, c7,  c10, 4                                /* Flush Write Buffer.                                  */    nop    nop    nop                                                                /* Disable MMU.                                         */                                                                /* Disable all caches but i-cache.                      */                                                                /* Disable write buffer.                                */                                                                /* Change BUS mode to synchronous.                      */    ldr  r0, =0x40001078    mcr  p15, 0, r0, c1, c0, 0    nop    nop    nop                                                                /* SET-UP THE STACK-POINTERS FOR ALL OPERATING MODES.   */                                                                /* After a reset, the mode is ARM, System, interrupts   */                                                                /* disabled.  The USR mode uses the same stack as SYS.  */                                                                /* The stack segments must be defined in the linker     */                                                                /* command file, and be declared above.                 */                                                                /* FIQ mode.                                            */    mrs  r0, cpsr                                               /* Move CPSR to r0.                                     */    bic  r0, r0, #OS_CPU_ARM_MODE_MASK                          /* Clear all mode bits.                                 */    orr  r0, r0, #OS_CPU_ARM_MODE_FIQ                           /* Set FIQ mode bits.                                   */    msr  CPSR_c, r0                                             /* Move back to CPSR.                                   */                                                                /* Initialize the stack ptr.                            */    ldr  sp, =(OS_CPU_ARM_MODE_FIQ_STK + OS_CPU_ARM_MODE_FIQ_STK_SIZE - 4)                                                                /* IRQ mode.                                            */    mrs  r0, cpsr                                               /* Move CPSR to r0.                                     */    bic  r0, r0, #OS_CPU_ARM_MODE_MASK                          /* Clear all mode bits.                                 */    orr  r0, r0, #OS_CPU_ARM_MODE_IRQ                           /* Set IRQ mode bits.                                   */    msr  CPSR_c, r0                                             /* Move back to CPSR.                                   */                                                                /* Initialize the stack ptr.                            */    ldr  sp, =(OS_CPU_ARM_MODE_IRQ_STK + OS_CPU_ARM_MODE_IRQ_STK_SIZE - 4)                                                                /* Abort mode.                                          */    mrs  r0, cpsr                                               /* Move CPSR to r0.                                     */    bic  r0, r0, #OS_CPU_ARM_MODE_MASK                          /* Clear all mode bits.                                 */    orr  r0, r0, #OS_CPU_ARM_MODE_ABT                           /* Set Abort mode bits.                                 */    msr  CPSR_c, r0                                             /* Move back to CPSR.                                   */                                                                /* Initialize the stack ptr.                            */    ldr  sp, =(OS_CPU_ARM_MODE_ABT_STK + OS_CPU_ARM_MODE_ABT_STK_SIZE - 4)                                                                /* Supervisor mode.                                     */    mrs  r0, cpsr                                               /* Move CPSR to r0.                                     */    bic  r0, r0, #OS_CPU_ARM_MODE_MASK                          /* Clear all mode bits.                                 */    orr  r0, r0, #OS_CPU_ARM_MODE_SVC                           /* Set Supervisor mode bits.                            */    msr  CPSR_c, r0                                             /* Move back to CPSR.                                   */                                                                /* Initialize the stack ptr.                            */    ldr  sp, =(OS_CPU_ARM_MODE_SVC_STK + OS_CPU_ARM_MODE_SVC_STK_SIZE - 4)                                                                /* Undef mode.                                          */    mrs  r0, cpsr                                               /* Move CPSR to r0.                                     */    bic  r0, r0, #OS_CPU_ARM_MODE_MASK                          /* Clear all mode bits.                                 */    orr  r0, r0, #OS_CPU_ARM_MODE_UND                           /* Set Undef mode bits.                                 */    msr  CPSR_c, r0                                             /* Move back to CPSR.                                   */                                                                /* Initialize the stack ptr.                            */    ldr  sp, =(OS_CPU_ARM_MODE_UND_STK + OS_CPU_ARM_MODE_UND_STK_SIZE - 4)                                                                /* System mode.                                         */    mrs  r0, cpsr                                               /* Move CPSR to r0.                                     */    bic  r0, r0, #OS_CPU_ARM_MODE_MASK                          /* Clear all mode bits.                                 */    orr  r0, r0, #OS_CPU_ARM_MODE_SYS                           /* Set System mode bits.                                */    msr  CPSR_c, r0                                             /* Move back to CPSR.                                   */                                                                /* Initialize the stack ptr.                            */    ldr  sp, =(OS_CPU_ARM_MODE_SYS_STK + OS_CPU_ARM_MODE_SYS_STK_SIZE - 4)                                                                /* CLEAR BSS.                                           */    ldr  r0, =_bss    ldr  r1, =_ebss    mov  r2, #0bss_loop:    str  r2, [r0]    add  r0, r0, #4    cmp  r1, r0    bge  bss_loop                                                                /* Jump to main().                                      */    bl   main                                                                /* The C code should never return.                      */    b    start

⌨️ 快捷键说明

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