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

📄 os_cpu_a.lst

📁 ucos在ARM7上的移植
💻 LST
📖 第 1 页 / 共 5 页
字号:



ARM Macro Assembler    Page 1 


    1 00000000         ;
    2 00000000         ;*******************************************************
                       *************************************************
    3 00000000         ;                                               uC/OS-II
                       
    4 00000000         ;                                         The Real-Time 
                       Kernel
    5 00000000         ;
    6 00000000         ;
    7 00000000         ;                             (c) Copyright 1992-2007, M
                       icrium, Weston, FL
    8 00000000         ;                                          All Rights Re
                       served
    9 00000000         ;
   10 00000000         ;                                           Generic ARM 
                       Port
   11 00000000         ;
   12 00000000         ; File      : OS_CPU_A.ASM
   13 00000000         ; Version   : V1.82
   14 00000000         ; By        : Jean J. Labrosse
   15 00000000         ;             Jean-Denis Hatier
   16 00000000         ;
   17 00000000         ; For       : ARM7 or ARM9
   18 00000000         ; Mode      : ARM or Thumb
   19 00000000         ; Toolchain : RealView Development Suite
   20 00000000         ;             RealView Microcontroller Development Kit (
                       MDK)
   21 00000000         ;             ARM Developer Suite (ADS)
   22 00000000         ;             Keil uVision
   23 00000000         ;*******************************************************
                       *************************************************
   24 00000000         ;
   25 00000000         
   26 00000000         ;*******************************************************
                       *************************************************
   27 00000000         ;                                           PUBLIC FUNCT
                       IONS
   28 00000000         ;*******************************************************
                       *************************************************
   29 00000000         ; External references.
   30 00000000                 IMPORT           OSRunning
   31 00000000                 IMPORT           OSPrioCur
   32 00000000                 IMPORT           OSPrioHighRdy
   33 00000000                 IMPORT           OSTCBCur
   34 00000000                 IMPORT           OSTCBHighRdy
   35 00000000                 IMPORT           OSIntNesting
   36 00000000                 IMPORT           OSIntExit
   37 00000000                 IMPORT           OSTaskSwHook
   38 00000000         
   39 00000000         ; Functions declared in this file.
   40 00000000                 EXPORT           OS_CPU_SR_Save
   41 00000000                 EXPORT           OS_CPU_SR_Restore
   42 00000000                 EXPORT           OSStartHighRdy
   43 00000000                 EXPORT           OSCtxSw
   44 00000000                 EXPORT           OSIntCtxSw
   45 00000000         
   46 00000000         ; Functions related to exception handling.
   47 00000000                 EXPORT           OS_CPU_ARM_ExceptResetHndlr
   48 00000000                 EXPORT           OS_CPU_ARM_ExceptUndefInstrHndl



ARM Macro Assembler    Page 2 


r
   49 00000000                 EXPORT           OS_CPU_ARM_ExceptSwiHndlr
   50 00000000                 EXPORT           OS_CPU_ARM_ExceptPrefetchAbortH
ndlr
   51 00000000                 EXPORT           OS_CPU_ARM_ExceptDataAbortHndlr
   52 00000000                 EXPORT           OS_CPU_ARM_ExceptAddrAbortHndlr
   53 00000000                 EXPORT           OS_CPU_ARM_ExceptIrqHndlr
   54 00000000                 EXPORT           OS_CPU_ARM_ExceptFiqHndlr
   55 00000000         
   56 00000000                 IMPORT           OS_CPU_ExceptHndlr
   57 00000000         
   58 00000000         
   59 00000000         ;*******************************************************
                       *************************************************
   60 00000000         ;                                                EQUATES
                       
   61 00000000         ;*******************************************************
                       *************************************************
   62 00000000         
   63 00000000 000000C0 
                       OS_CPU_ARM_CONTROL_INT_DIS
                               EQU              0xC0        ; Disable both FIQ 
                                                            and IRQ.
   64 00000000 00000040 
                       OS_CPU_ARM_CONTROL_FIQ_DIS
                               EQU              0x40        ; Disable FIQ.
   65 00000000 00000080 
                       OS_CPU_ARM_CONTROL_IRQ_DIS
                               EQU              0x80        ; Disable IRQ.
   66 00000000 00000020 
                       OS_CPU_ARM_CONTROL_THUMB
                               EQU              0x20        ; Set THUMB mode.
   67 00000000 00000000 
                       OS_CPU_ARM_CONTROL_ARM
                               EQU              0x00        ; Set ARM mode.
   68 00000000         
   69 00000000 0000001F 
                       OS_CPU_ARM_MODE_MASK
                               EQU              0x1F
   70 00000000 00000010 
                       OS_CPU_ARM_MODE_USR
                               EQU              0x10
   71 00000000 00000011 
                       OS_CPU_ARM_MODE_FIQ
                               EQU              0x11
   72 00000000 00000012 
                       OS_CPU_ARM_MODE_IRQ
                               EQU              0x12
   73 00000000 00000013 
                       OS_CPU_ARM_MODE_SVC
                               EQU              0x13
   74 00000000 00000017 
                       OS_CPU_ARM_MODE_ABT
                               EQU              0x17
   75 00000000 0000001B 
                       OS_CPU_ARM_MODE_UND
                               EQU              0x1B
   76 00000000 0000001F 
                       OS_CPU_ARM_MODE_SYS



ARM Macro Assembler    Page 3 


                               EQU              0x1F
   77 00000000         
   78 00000000 00000000 
                       OS_CPU_ARM_EXCEPT_RESET
                               EQU              0x00
   79 00000000 00000001 
                       OS_CPU_ARM_EXCEPT_UNDEF_INSTR
                               EQU              0x01
   80 00000000 00000002 
                       OS_CPU_ARM_EXCEPT_SWI
                               EQU              0x02
   81 00000000 00000003 
                       OS_CPU_ARM_EXCEPT_PREFETCH_ABORT
                               EQU              0x03
   82 00000000 00000004 
                       OS_CPU_ARM_EXCEPT_DATA_ABORT
                               EQU              0x04
   83 00000000 00000005 
                       OS_CPU_ARM_EXCEPT_ADDR_ABORT
                               EQU              0x05
   84 00000000 00000006 
                       OS_CPU_ARM_EXCEPT_IRQ
                               EQU              0x06
   85 00000000 00000007 
                       OS_CPU_ARM_EXCEPT_FIQ
                               EQU              0x07
   86 00000000         
   87 00000000         
   88 00000000         ;*******************************************************
                       *************************************************
   89 00000000         ;                                      CODE GENERATION D
                       IRECTIVES
   90 00000000         ;*******************************************************
                       *************************************************
   91 00000000         
   92 00000000                 REQUIRE8
   93 00000000                 PRESERVE8
   94 00000000         
   95 00000000         ;*******************************************************
                       **************************************************
   96 00000000         ;                                  CRITICAL SECTION METH
                       OD 3 FUNCTIONS
   97 00000000         ;
   98 00000000         ; Description: Disable/Enable interrupts by preserving t
                       he state of interrupts.  Generally speaking you
   99 00000000         ;              would store the state of the interrupt di
                       sable flag in the local variable 'cpu_sr' and then
  100 00000000         ;              disable interrupts.  'cpu_sr' is allocate
                       d in all of uC/OS-II's functions that need to
  101 00000000         ;              disable interrupts.  You would restore th
                       e interrupt disable state by copying back 'cpu_sr'
  102 00000000         ;              into the CPU's status register.
  103 00000000         ;
  104 00000000         ; Prototypes : OS_CPU_SR  OS_CPU_SR_Save    (void);
  105 00000000         ;              void       OS_CPU_SR_Restore (OS_CPU_SR  
                       os_cpu_sr);
  106 00000000         ;
  107 00000000         ;
  108 00000000         ; Note(s)    : (1) These functions are used in general l



ARM Macro Assembler    Page 4 


                       ike this:
  109 00000000         ;
  110 00000000         ;                 void Task (void  *p_arg)
  111 00000000         ;                 {
  112 00000000         ;                                                       
                               /* Allocate storage for CPU status register.    
                               */
  113 00000000         ;                 #if (OS_CRITICAL_METHOD == 3)
  114 00000000         ;                      OS_CPU_SR  os_cpu_sr;
  115 00000000         ;                 #endif
  116 00000000         ;
  117 00000000         ;                          :
  118 00000000         ;                          :
  119 00000000         ;                      OS_ENTER_CRITICAL();             
                               /* os_cpu_sr = OS_CPU_SR_Save();                
                               */
  120 00000000         ;                          :
  121 00000000         ;                          :
  122 00000000         ;                      OS_EXIT_CRITICAL();              
                               /* OS_CPU_SR_Restore(cpu_sr);                   
                               */
  123 00000000         ;                          :
  124 00000000         ;                          :
  125 00000000         ;                 }
  126 00000000         ;*******************************************************
                       **************************************************
  127 00000000         
  128 00000000                 AREA             CODE, CODE, READONLY
  129 00000000                 CODE32
  130 00000000         
  131 00000000         OS_CPU_SR_Save
  132 00000000 E10F0000        MRS              R0, CPSR
  133 00000004 E38010C0        ORR              R1, R0, #OS_CPU_ARM_CONTROL_INT
_DIS 
                                                            ; Set IRQ and FIQ b
                                                            its in CPSR to disa
                                                            ble all interrupts.
                                                            
  134 00000008 E121F001        MSR              CPSR_c, R1
  135 0000000C E12FFF1E        BX               LR          ; Disabled, return 
                                                            the original CPSR c
                                                            ontents in R0.
  136 00000010         
  137 00000010         
  138 00000010         OS_CPU_SR_Restore
  139 00000010 E121F000        MSR              CPSR_c, R0
  140 00000014 E12FFF1E        BX               LR
  141 00000018         
  142 00000018         
  143 00000018         ;*******************************************************
                       **************************************************
  144 00000018         ;                                           START MULTIT
                       ASKING
  145 00000018         ;                                       void OSStartHigh
                       Rdy(void)
  146 00000018         ;
  147 00000018         ; Note(s) : 1) OSStartHighRdy() MUST:
  148 00000018         ;              a) Call OSTaskSwHook() then,
  149 00000018         ;              b) Set OSRunning to TRUE,



ARM Macro Assembler    Page 5 


  150 00000018         ;              c) Switch to the highest priority task.
  151 00000018         ;*******************************************************
                       **************************************************
  152 00000018         
  153 00000018                 AREA             CODE, CODE, READONLY
  154 00000018                 CODE32
  155 00000018         
  156 00000018         OSStartHighRdy
  157 00000018         
  158 00000018         ; Change to SVC mode.
  159 00000018 E321F0D3        MSR              CPSR_c, #(OS_CPU_ARM_CONTROL_IN
T_DIS | OS_CPU_ARM_MODE_SVC)
  160 0000001C         
  161 0000001C E59F0248        LDR              R0, __OS_TaskSwHook 
                                                            ; OSTaskSwHook();
  162 00000020 E1A0E00F        MOV              LR, PC
  163 00000024 E12FFF10        BX               R0
  164 00000028         
  165 00000028 E59F0224        LDR              R0, __OS_Running 
                                                            ; OSRunning = TRUE;
                                                            
  166 0000002C E3A01001        MOV              R1, #1
  167 00000030 E5C01000        STRB             R1, [R0]
  168 00000034         
  169 00000034         ; SWITCH TO HIGHEST PRIORITY TASK:
  170 00000034 E59F0228        LDR              R0, __OS_TCBHighRdy ;    Get hi
                                                            ghest priority task
                                                             TCB address,
  171 00000038 E5900000        LDR              R0, [R0]    ;    Get stack poin
                                                            ter,
  172 0000003C E590D000        LDR              SP, [R0]    ;    Switch to the 
                                                            new stack,
  173 00000040         
  174 00000040 E49D0004        LDR              R0, [SP], #4 ;    Pop new task'
                                                            s CPSR,
  175 00000044 E16FF000        MSR              SPSR_cxsf, R0
  176 00000048         
  177 00000048 E8FDDFFF        LDMFD            SP!, {R0-R12, LR, PC}^ ;    Pop
                                                             new task's context
                                                            .

⌨️ 快捷键说明

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