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

📄 off

📁 可以在ADS下跑的工程有很多,但在Keil下面的ucOS工程还没有.在这里,提供一个可以在Keil环境下跑起来的基于三星的44b0的ucOS工程,可以在RAM中调试.
💻
📖 第 1 页 / 共 3 页
字号:



ARM Macro Assembler    Page 1 


    1 00000000         ;*
    2 00000000         ;* File: os_cpu_a.s
    3 00000000         ;*
    4 00000000         ;*            (c) Copyright ARM Limited 1999.  All right
                       s reserved. 
    5 00000000         ;*
    6 00000000         ;*                               ARM Specific code
    7 00000000         ;*
    8 00000000         ;*
    9 00000000         ; 
   10 00000000         ; Functions defined in this module:
   11 00000000         ;
   12 00000000         ; void ARMDisableInt(void) /* disable interrupts when in
                        SVC */
   13 00000000         ; void ARMEnableInt(void)  /* enable interrupts when in 
                       SVC */
   14 00000000         ; void OSCtxSw(void)  /* context switch */
   15 00000000         ; void OSStartHighRdy(void) /* start highest priority ta
                       sk */
   16 00000000         
   17 00000000 00000080 
                       NoInt   EQU     0x80
   18 00000000         
   19 00000000 00002000 
                       BIT_TIMER0
                               EQU     (0x1<<13)
   20 00000000 00000400 
                       BIT_TIMER3
                               EQU     (0x1<<10)
   21 00000000 00000100 
                       BIT_TIMER5
                               EQU     (0x1<<8)
   22 00000000 00000010 
                       BIT_SIO EQU     (0x1<<4)
   23 00000000 00200000 
                       BIT_EINT4567
                               EQU     (0x1<<21)
   24 00000000         
   25 00000000 01E00024 
                       I_ISPC  EQU     0x1e00024
   26 00000000 01E0000C 
                       INTMSK  EQU     0x1e0000c
   27 00000000 01D20054 
                       EXTINTPND
                               EQU     0x1d20054
   28 00000000         
   29 00000000                 AREA    |Assembly$$code|, CODE, READONLY
   30 00000000                 EXPORT  TickHandler
   31 00000000         
   32 00000000         
   33 00000000         ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::
                       :::::::::::::::::::::::
   34 00000000         ;-------------------------------------------------------
                       
   35 00000000         ; uC/OS Porting Core Function : ARMDisableInt
   36 00000000         ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::
                       :::::::::::::::::::::::
   37 00000000         
   38 00000000                 EXPORT  ARMDisableInt



ARM Macro Assembler    Page 2 


   39 00000000         
   40 00000000         ARMDisableInt
   41 00000000 E92D0001        STMDB   sp!, {r0}
   42 00000004 E10F0000        MRS     r0, CPSR
   43 00000008 E3800080        ORR     r0, r0, #NoInt
   44 0000000C E12FF000        MSR     CPSR_cxsf, r0
   45 00000010 E8BD0001        LDMIA   sp!, {r0}
   46 00000014 E1A0F00E        MOV     pc, lr
   47 00000018         
   48 00000018         ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::
                       :::::::::::::::::::::::
   49 00000018         ;-------------------------------------------------------
                       
   50 00000018         ; uC/OS Porting Core Function : ARMEnableInt
   51 00000018         ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::
                       :::::::::::::::::::::::
   52 00000018         
   53 00000018                 EXPORT  ARMEnableInt
   54 00000018         
   55 00000018         ARMEnableInt
   56 00000018 E92D0001        STMDB   sp!, {r0}
   57 0000001C E10F0000        MRS     r0, CPSR
   58 00000020 E3C00080        BIC     r0, r0, #NoInt
   59 00000024 E12FF000        MSR     CPSR_cxsf, r0
   60 00000028 E8BD0001        LDMIA   sp!, {r0}
   61 0000002C E1A0F00E        MOV     pc, lr
   62 00000030         
   63 00000030         ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::
                       :::::::::::::::::::::::
   64 00000030         ;-------------------------------------------------------
                       
   65 00000030         ; uC/OS Porting Core Function : OSStartHighRdy          
                          
   66 00000030         ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::
                       :::::::::::::::::::::::
   67 00000030         
   68 00000030                 IMPORT  OSTaskSwHook
   69 00000030                 IMPORT  OSRunning
   70 00000030                 IMPORT  OSTCBHighRdy
   71 00000030         
   72 00000030                 EXPORT  OSStartHighRdy
   73 00000030         
   74 00000030         OSStartHighRdy
   75 00000030 EBFFFFFE        BL      OSTaskSwHook ; Call user defined task sw
                                                   itch hook
   76 00000034         
   77 00000034 E59F0188        LDR     r0, =OSRunning ; Indicate that multitask
                                                   ing has started
   78 00000038 E3A01001        MOV     r1, #1
   79 0000003C E5C01000        STRB    r1, [r0]
   80 00000040         
   81 00000040 E59F0180        LDR     r0, =OSTCBHighRdy ; r0 <= &OSTCBHighRdy
   82 00000044 E5900000        LDR     r0, [r0]    ; r0 <=  OSTCBHighRdy
   83 00000048         
   84 00000048 E590D000        LDR     sp, [r0]    ; sp <=  OSTCBHighRdy->OSTCB
                                                   StkPtr
   85 0000004C         
   86 0000004C E8BD0001        LDMFD   sp!, {r0}   ; restore SP...
   87 00000050 E12EF000        MSR     CPSR_xsf, r0



ARM Macro Assembler    Page 3 


   88 00000054 E8BDDFFF        LDMFD   sp!, {r0-r12, lr, pc} ; Load task's cont
                                                   ext & Run task
   89 00000058         
   90 00000058         ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::
                       :::::::::::::::::::::::
   91 00000058         ;-------------------------------------------------------
                       -
   92 00000058         ; uC/OS Porting Core Function : OSCtxSw                
   93 00000058         ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::
                       :::::::::::::::::::::::
   94 00000058         
   95 00000058                 IMPORT  OSTCBCur
   96 00000058                 IMPORT  OSTaskSwHook
   97 00000058                 IMPORT  OSTCBHighRdy
   98 00000058                 IMPORT  OSPrioCur
   99 00000058                 IMPORT  OSPrioHighRdy
  100 00000058         
  101 00000058                 EXPORT  OSCtxSw
  102 00000058         
  103 00000058         OSCtxSw
  104 00000058 E92D4000        STMFD   sp!, {lr}   ; push resume address
  105 0000005C E92D5FFF        STMFD   sp!, {r0-r12, lr} ; push rest context
  106 00000060 E10F0000        MRS     r0, CPSR
  107 00000064 E92D0001        STMFD   sp!, {r0}   ; push CPSR
  108 00000068         
  109 00000068 E59F015C        LDR     r0, =OSTCBCur ; r0 <= &OSTCBCur
  110 0000006C E5900000        LDR     r0, [r0]    ; r0 <=  OSTCBCur
  111 00000070 E580D000        STR     sp, [r0]    ; OSTCBCur->OSTCBStkPtr = sp
                                                   
  112 00000074         
  113 00000074 EBFFFFFE        BL      OSTaskSwHook ; Call user defined task sw
                                                   itch hook
  114 00000078         
  115 00000078 E59F014C        LDR     r0, =OSTCBCur ; r0 <= &OSTCBCur
  116 0000007C E59F1144        LDR     r1, =OSTCBHighRdy ; r1 <= &OSTCBHighRdy
  117 00000080         
  118 00000080 E5912000        LDR     r2, [r1]    ; r2 <=  OSTCBHighRdy
  119 00000084 E5802000        STR     r2, [r0]    ; OSTCBCur = OSTCBHighRdy
  120 00000088         
  121 00000088 E59F0140        LDR     r0, =OSPrioCur ; r0 <= &OSPrioCur
  122 0000008C E59F1140        LDR     r1, =OSPrioHighRdy 
                                                   ; r1 <= &OSPrioHighRdy
  123 00000090         
  124 00000090 E5D13000        LDRB    r3, [r1]    ; r3 <=  OSPrioHighRdy
  125 00000094 E5C03000        STRB    r3, [r0]    ; OSPrioCur = OSPrioHighRdy
  126 00000098         
  127 00000098 E592D000        LDR     sp, [r2]    ; sp <=  OSTCBHighRdy->OSTCB
                                                   StkPtr
  128 0000009C         
  129 0000009C E8BD0001        LDMFD   sp!, {r0}   ; restore SP...
  130 000000A0 E12EF000        MSR     CPSR_xsf, r0
  131 000000A4 E8BDDFFF        LDMFD   sp!, {r0-r12, lr , pc} ; Load task's con
                                                   text & Run task
  132 000000A8         
  133 000000A8         
  134 000000A8         ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::
                       :::::::::::::::::::::::
  135 000000A8         ;-------------------------------------------------------
                       -



ARM Macro Assembler    Page 4 


  136 000000A8         ; uC/OS Porting Core Function : OSIntCtxSw              
                       
  137 000000A8         ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::
                       :::::::::::::::::::::::
  138 000000A8         
  139 000000A8                 IMPORT  OSTCBCur
  140 000000A8                 IMPORT  OSTaskSwHook
  141 000000A8                 IMPORT  OSTCBHighRdy
  142 000000A8                 IMPORT  OSPrioCur
  143 000000A8                 IMPORT  OSPrioHighRdy
  144 000000A8         
  145 000000A8                 EXPORT  OSIntCtxSw
  146 000000A8         
  147 000000A8         OSIntCtxSw
  148 000000A8 E59F0128        LDR     r0, =SAVED_SVC_SP
  149 000000AC E5901000        LDR     r1, [r0]
  150 000000B0         
  151 000000B0 E59F0114        LDR     r0, =OSTCBCur ; r0 <= &OSCTBCur
  152 000000B4 E5900000        LDR     r0, [r0]    ; r0 <=  OSCTBCur
  153 000000B8         
  154 000000B8 E5801000        STR     r1, [r0]    ; OSTCBCur->OSTCBStkPtr = sp
                                                   
  155 000000BC         
  156 000000BC EBFFFFFE        BL      OSTaskSwHook ; Call user defined task sw
                                                   itch hook
  157 000000C0         
  158 000000C0 E59F0104        LDR     r0, =OSTCBCur ; r0 <= &OSTCBCur
  159 000000C4 E59F10FC        LDR     r1, =OSTCBHighRdy ; r1 <= &OSTCBHighRdy
  160 000000C8         
  161 000000C8 E5912000        LDR     r2, [r1]    ; r2 <=  OSTCBHighRdy
  162 000000CC E5802000        STR     r2, [r0]    ; OSTCBCur = OSTCBHighRdy
  163 000000D0         
  164 000000D0 E59F00F8        LDR     r0, =OSPrioCur ; r0 <= &OSPrioCur
  165 000000D4 E59F10F8        LDR     r1, =OSPrioHighRdy 
                                                   ; r1 <= &OSPrioHighRdy
  166 000000D8         
  167 000000D8 E5D13000        LDRB    r3, [r1]    ; r3 <=  OSPrioHighRdy
  168 000000DC E5C03000        STRB    r3, [r0]    ; OSPrioCur = OSPrioHighRdy
  169 000000E0         
  170 000000E0 E592D000        LDR     sp, [r2]    ; sp <=  OSTCBHighRdy->OSTCB
                                                   StkPtr
  171 000000E4         
  172 000000E4         ;在不打开中断的情况下,进行任务切换
  173 000000E4 E8BD0001        LDMFD   sp!, {r0}
  174 000000E8 E12EF000        MSR     CPSR_xsf, r0
  175 000000EC E8BDDFFF        LDMFD   sp!, {r0-r12, lr, pc} ; * the interrupt 
                                                   is enable after executing th
                                                   is sentence
  176 000000F0         
  177 000000F0         ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::
                       :::::::::::::::::::::::
  178 000000F0         ;-------------------------------------------------------
                       
  179 000000F0         ; uC/OS Porting Core Function : ExIntHandler4567
  180 000000F0         ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::
                       :::::::::::::::::::::::
  181 000000F0         
  182 000000F0                 IMPORT  OSIntNesting
  183 000000F0                 IMPORT  OSTimeTick



ARM Macro Assembler    Page 5 


  184 000000F0                 IMPORT  OSIntExit
  185 000000F0         
  186 000000F0         IntExit
  187 000000F0 E12FF003        MSR     CPSR_cxsf, r3
  188 000000F4 E892800F        LDMFD   r2, {r0-r3, pc} ; do not execute the ISR
                                                    to prevent pumping the stac
                                                   k
  189 000000F8         
  190 000000F8                 EXPORT  TickHandler
  191 000000F8         TickHandler
  192 000000F8 E24EE004        SUB     lr, lr, #4
  193 000000FC E92D400F        STMFD   sp!, {r0-r3, lr} ; push r0-r3, pc
  194 00000100         
  195 00000100 E59F00D4        LDR     r0, =I_ISPC
  196 00000104 E3A01F40        LDR     r1, =BIT_TIMER5
  197 00000108 E5801000        STR     r1, [r0]    ; clear the interrupt pendin
                                                   g bit
  198 0000010C         
  199 0000010C E1A0100E        MOV     r1, lr      ; r1 <- return pc
  200 00000110 E1A0200D        MOV     r2, sp      ; r2 <- sp_irq
  201 00000114 E28DD014        ADD     sp, sp, #20 ; adjust the sp
  202 00000118         
  203 00000118         ;............ Added for the sake of preventing interrupt
                        nesting ................
  204 00000118 E14F3000        mrs     r3, spsr    ; r3 <- spsr_irq
  205 0000011C E3830080        orr     r0, r3, #0x80 ; mask the interrupt
  206 00000120 E169F000        msr     spsr_cf, r0 ; change spsr_irq
  207 00000124         ;.......................................................
                       .........................
  208 00000124         
  209 00000124 E59F00B4        LDR     r0,=IRQ_2
  210 00000128 E1B0F000        MOVS    pc,r0       ; At this point, cpsr_svc :=
                                                    spsr_irq...
  211 0000012C         IRQ_2
  212 0000012C E59F00B0        ldr     r0, =OSIntNesting
  213 00000130 E5D00000        ldrb    r0, [r0]
  214 00000134 E3500008        cmp     r0, #8
  215 00000138 2AFFFFFE        bcs     IntExit     ; 如果OSIntNesting>8, IntExi
                                                   t
  216 0000013C E3500000        CMP     r0, #0
  217 00000140 0A000006        BEQ     %F1
  218 00000144         0
  219 00000144 E92D0002        stmfd   sp!, {r1}   ; push SVC's pc to task stac
                                                   k
  220 00000148 E92D5FF0        stmfd   sp!, {r4-r12,lr} ; push SVC's r14, r12-r
                                                   4 to task stack
  221 0000014C E1A07003        mov     r7, r3      ; cpsr
  222 00000150 E892000F        ldmfd   r2, {r0-r3} ; pop r0~r3 in irq stack
  223 00000154 E92D000F        stmfd   sp!, {r0-r3} ; push r0~r3 to task stack
  224 00000158 E92D0080        stmfd   sp!, {r7}   ; push cpsr to task stack
  225 0000015C EA000009        B       %F2
  226 00000160         
  227 00000160         1
  228 00000160 E92D0002        stmfd   sp!, {r1}   ; push SVC's pc to task stac
                                                   k
  229 00000164 E92D5FF0        stmfd   sp!, {r4-r12,lr} ; push SVC's r14, r12-r
                                                   4 to task stack
  230 00000168 E1A07003        mov     r7, r3      ; cpsr
  231 0000016C E892000F        ldmfd   r2, {r0-r3} ; pop r0~r3 in irq stack



ARM Macro Assembler    Page 6 


  232 00000170 E92D000F        stmfd   sp!, {r0-r3} ; push r0~r3 to task stack
  233 00000174 E92D0080        stmfd   sp!, {r7}   ; push cpsr to task stack
  234 00000178         
  235 00000178 E59F0058        LDR     r0, =SAVED_SVC_SP
  236 0000017C E580D000        STR     sp, [r0]
  237 00000180 E59F0060        LDR     r0, =IntReStackTop
  238 00000184 E1A0D000        MOV     sp, r0
  239 00000188         
  240 00000188         2
  241 00000188 E59F0054        LDR     r0, =OSIntNesting 
                                                   ; Notify uC/OS-II of ISR
  242 0000018C E5D01000        LDRB    r1, [r0]
  243 00000190 E2811001        ADD     r1, r1, #1  ;OSIntNesting++
  244 00000194 E5C01000        STRB    r1, [r0]
  245 00000198         
  246 00000198 EBFFFFFE        BL      OSTimeTick  ; Process system tick
  247 0000019C EBFFFFFE        BL      OSIntExit   ; Notify uC/OS-II of end of 
                                                   ISR
  248 000001A0         
  249 000001A0 E59F003C        LDR     r0, =OSIntNesting
  250 000001A4 E5D00000        LDRB    r0, [r0]
  251 000001A8 E3500000        CMP     r0, #0
  252 000001AC 1A000001        BNE     %F1
  253 000001B0         
  254 000001B0 E59F0020        LDR     r0, =SAVED_SVC_SP
  255 000001B4 E590D000        LDR     sp, [r0]
  256 000001B8         
  257 000001B8         1
  258 000001B8 E8BD0001        LDMFD   sp!, {r0}
  259 000001BC E12FF000        MSR     CPSR_cxsf, r0
  260 000001C0 E8BDDFFF        LDMFD   sp!, {r0-r12, lr, pc} 
                                                   ; restore the context
  261 000001C4         
  262 000001C4         
  263 000001C4         
  264 000001C4         
  265 000001C4         
  266 000001C4 00000000 
              00000000 
              00000000 
              00000000 
              00000000 
              00000000 
              01E00024 
              0000012C 
              00000000 
              00000000 
              00000000 
              00000000         AREA    INT_DATA, DATA, READWRITE
  267 00000000         
  268 00000000 00000000 
                       SAVED_SVC_SP
                               DCD     0
  269 00000004 00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 



ARM Macro Assembler    Page 7 


              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 



ARM Macro Assembler    Page 8 


              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 
              00 00 00 

⌨️ 快捷键说明

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