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

📄 off

📁 称植到lpc2124上的UCOS2.85版 是本人初学移植和ARM的成果 可能已有人上传类似的了
💻
📖 第 1 页 / 共 3 页
字号:



ARM Macro Assembler    Page 1 


    1 00000000         ;/******************************************************
                       ***********************/
    2 00000000         ;/* IRQ_HANDLER: Philips LPC214x家族微控制器中断文件    
                                             */
    3 00000000         ;/* 作者:焦进星                                        
                                             */
    4 00000000         ;/* 时间:2008年月1月22日                               
                                             */
    5 00000000         ;/* ARM初学                                             
                                             */
    6 00000000         ;/******************************************************
                       ***********************/
    7 00000000         
    8 00000000         
    9 00000000         
   10 00000000         
   11 00000000                 INCLUDE IRQ.inc     ;/* 首先包含IRQ.inc */
    1 00000000         
    2 00000000         
    3 00000000         
    4 00000000         
    5 00000000 00000010 
                       ARM_MODE_USER
                               EQU     0x10
    6 00000000 00000011 
                       ARM_MODE_FIQ
                               EQU     0x11
    7 00000000 00000012 
                       ARM_MODE_IRQ
                               EQU     0x12
    8 00000000 00000013 
                       ARM_MODE_SVC
                               EQU     0x13
    9 00000000 00000017 
                       ARM_MODE_ABORT
                               EQU     0x17
   10 00000000 0000001B 
                       ARM_MODE_UNDEF
                               EQU     0x1B
   11 00000000 0000001F 
                       ARM_MODE_SYS
                               EQU     0x1F
   12 00000000         
   13 00000000 00000080 
                       I_BIT   EQU     0x80
   14 00000000 00000040 
                       F_BIT   EQU     0x40
   15 00000000 00000020 
                       T_BIT   EQU     0x20
   16 00000000         
   17 00000000         ;External references
   18 00000000                 EXTERN  OSPrioCur
   19 00000000                 EXTERN  OSPrioHighRdy
   20 00000000                 EXTERN  OSIntNesting
   21 00000000                 EXTERN  OSIntExit
   22 00000000                 EXTERN  OSIntCtxSw
   23 00000000         
   24 00000000                 MACRO
   25 00000000         $IRQ_Label



ARM Macro Assembler    Page 2 


                               HANDLER $IRQ_Exception_Function
   26 00000000         
   27 00000000                 EXPORT  $IRQ_Label  ; 输出的标号
   28 00000000                 IMPORT  $IRQ_Exception_Function ; 引用的外部标号
                                                   
   29 00000000         
   30 00000000         $IRQ_Label
   31 00000000         
   32 00000000                 SUB     LR, LR, #4  ;- Adjust and save LR_irq in
                                                    IRQ stack
   33 00000000         
   34 00000000                 STMFD   SP!, {R0-R3, R11, R12, LR} ;- Save scrat
                                                   ch/used registers and LR in 
                                                   IRQ Stack
   35 00000000         ;- #Save R11 only for the register 'LR_svc'
   36 00000000         
   37 00000000                 MRS     R14, SPSR   ;- Save SPSR need to be save
                                                   d for nested interrupt
   38 00000000                 STMFD   SP!, {R14}
   39 00000000         
   40 00000000                 LDR     R11, =OSIntNesting ; OSIntNesting++;
   41 00000000                 LDRB    R12, [R11]
   42 00000000                 ADD     R12, R12,#1
   43 00000000                 STRB    R12, [R11]
   44 00000000         
   45 00000000                 MSR     CPSR_c, #ARM_MODE_SVC ; - Enable Interru
                                                   pt and Switch to SVC mode
   46 00000000                 MOV     R11, LR     ; R11<-LR_svc
   47 00000000         
   48 00000000                 BL      $IRQ_Exception_Function 
                                                   ; 调用c语言的中断处理程序
   49 00000000         
   50 00000000                 MOV     LR, R11     ;- Restore LR_svc
   51 00000000                 MSR     CPSR_c, #(I_BIT | F_BIT | ARM_MODE_IRQ) 
                                                   ;- Disable Interrupt and Swi
                                                   tch back in IRQ mode
   52 00000000         
   53 00000000                 BL      OSIntExit   ; OSIntExit() <not call OSIn
                                                   tCtxSw()>
   54 00000000         
   55 00000000                 LDR     R0, =OSPrioCur ; if (OSPrioCur != OSPrio
                                                   HighRdy)
   56 00000000                 LDR     R1, =OSPrioHighRdy
   57 00000000                 LDRB    R0, [R0]
   58 00000000                 LDRB    R1, [R1]
   59 00000000                 CMP     R0, R1
   60 00000000                 BNE     OSIntCtxSw  ; Do OSIntCtxSw()
   61 00000000         
   62 00000000                 LDMFD   SP!, {R14}  ;- Restore SPSR_irq from IRQ
                                                    stack
   63 00000000                 MSR     SPSR_cxsf, R14
   64 00000000         
   65 00000000                 LDMFD   SP!, {R0-R3, R11, R12, PC}^ ;- Restore a
                                                   djusted LR_irq from IRQ stac
                                                   k directly in the PC
   66 00000000         
   67 00000000                 MEND
   68 00000000         
   69 00000000                 END



ARM Macro Assembler    Page 3 


   12 00000000         
   13 00000000                 PRESERVE8
   14 00000000                 CODE32
   15 00000000         ;//段名    代码  只读
   16 00000000                 AREA    IRQ_HANDLER,CODE,READONLY
   17 00000000         
   18 00000000         ;/* 以下添加中断句柄,用户根据实际情况改变 */
   19 00000000         Timer0Handler
                               HANDLER Timer0_Exception
   26 00000000         
   27 00000000                 EXPORT  Timer0Handler ; 输出的标号
   28 00000000                 IMPORT  Timer0_Exception ; 引用的外部标号
   29 00000000         
   30 00000000         Timer0Handler
   31 00000000         
   32 00000000 E24EE004        SUB     LR, LR, #4  ;- Adjust and save LR_irq in
                                                    IRQ stack
   33 00000004         
   34 00000004 E92D580F        STMFD   SP!, {R0-R3, R11, R12, LR} ;- Save scrat
                                                   ch/used registers and LR in 
                                                   IRQ Stack
   35 00000008         ;- #Save R11 only for the register 'LR_svc'
   36 00000008         
   37 00000008 E14FE000        MRS     R14, SPSR   ;- Save SPSR need to be save
                                                   d for nested interrupt
   38 0000000C E92D4000        STMFD   SP!, {R14}
   39 00000010         
   40 00000010 E59FB1B4        LDR     R11, =OSIntNesting ; OSIntNesting++;
   41 00000014 E5DBC000        LDRB    R12, [R11]
   42 00000018 E28CC001        ADD     R12, R12,#1
   43 0000001C E5CBC000        STRB    R12, [R11]
   44 00000020         
   45 00000020 E321F013        MSR     CPSR_c, #ARM_MODE_SVC ; - Enable Interru
                                                   pt and Switch to SVC mode
   46 00000024 E1A0B00E        MOV     R11, LR     ; R11<-LR_svc
   47 00000028         
   48 00000028 EBFFFFFE        BL      Timer0_Exception 
                                                   ; 调用c语言的中断处理程序
   49 0000002C         
   50 0000002C E1A0E00B        MOV     LR, R11     ;- Restore LR_svc
   51 00000030 E321F0D2        MSR     CPSR_c, #(I_BIT | F_BIT | ARM_MODE_IRQ) 
                                                   ;- Disable Interrupt and Swi
                                                   tch back in IRQ mode
   52 00000034         
   53 00000034 EBFFFFFE        BL      OSIntExit   ; OSIntExit() <not call OSIn
                                                   tCtxSw()>
   54 00000038         
   55 00000038 E59F0190        LDR     R0, =OSPrioCur ; if (OSPrioCur != OSPrio
                                                   HighRdy)
   56 0000003C E59F1190        LDR     R1, =OSPrioHighRdy
   57 00000040 E5D00000        LDRB    R0, [R0]
   58 00000044 E5D11000        LDRB    R1, [R1]
   59 00000048 E1500001        CMP     R0, R1
   60 0000004C 1AFFFFFE        BNE     OSIntCtxSw  ; Do OSIntCtxSw()
   61 00000050         
   62 00000050 E8BD4000        LDMFD   SP!, {R14}  ;- Restore SPSR_irq from IRQ
                                                    stack
   63 00000054 E16FF00E        MSR     SPSR_cxsf, R14
   64 00000058         



ARM Macro Assembler    Page 4 


   65 00000058 E8FD980F        LDMFD   SP!, {R0-R3, R11, R12, PC}^ ;- Restore a
                                                   djusted LR_irq from IRQ stac
                                                   k directly in the PC
   66 0000005C         
   20 0000005C         
   21 0000005C         FIQHandler
                               HANDLER FIQ_Exception
   26 0000005C         
   27 0000005C                 EXPORT  FIQHandler  ; 输出的标号
   28 0000005C                 IMPORT  FIQ_Exception ; 引用的外部标号
   29 0000005C         
   30 0000005C         FIQHandler
   31 0000005C         
   32 0000005C E24EE004        SUB     LR, LR, #4  ;- Adjust and save LR_irq in
                                                    IRQ stack
   33 00000060         
   34 00000060 E92D580F        STMFD   SP!, {R0-R3, R11, R12, LR} ;- Save scrat
                                                   ch/used registers and LR in 
                                                   IRQ Stack
   35 00000064         ;- #Save R11 only for the register 'LR_svc'
   36 00000064         
   37 00000064 E14FE000        MRS     R14, SPSR   ;- Save SPSR need to be save
                                                   d for nested interrupt
   38 00000068 E92D4000        STMFD   SP!, {R14}
   39 0000006C         
   40 0000006C E59FB158        LDR     R11, =OSIntNesting ; OSIntNesting++;
   41 00000070 E5DBC000        LDRB    R12, [R11]
   42 00000074 E28CC001        ADD     R12, R12,#1
   43 00000078 E5CBC000        STRB    R12, [R11]
   44 0000007C         
   45 0000007C E321F013        MSR     CPSR_c, #ARM_MODE_SVC ; - Enable Interru
                                                   pt and Switch to SVC mode
   46 00000080 E1A0B00E        MOV     R11, LR     ; R11<-LR_svc
   47 00000084         
   48 00000084 EBFFFFFE        BL      FIQ_Exception ; 调用c语言的中断处理程序
   49 00000088         
   50 00000088 E1A0E00B        MOV     LR, R11     ;- Restore LR_svc
   51 0000008C E321F0D2        MSR     CPSR_c, #(I_BIT | F_BIT | ARM_MODE_IRQ) 
                                                   ;- Disable Interrupt and Swi
                                                   tch back in IRQ mode
   52 00000090         
   53 00000090 EBFFFFFE        BL      OSIntExit   ; OSIntExit() <not call OSIn
                                                   tCtxSw()>
   54 00000094         
   55 00000094 E59F0134        LDR     R0, =OSPrioCur ; if (OSPrioCur != OSPrio
                                                   HighRdy)
   56 00000098 E59F1134        LDR     R1, =OSPrioHighRdy
   57 0000009C E5D00000        LDRB    R0, [R0]
   58 000000A0 E5D11000        LDRB    R1, [R1]
   59 000000A4 E1500001        CMP     R0, R1
   60 000000A8 1AFFFFFE        BNE     OSIntCtxSw  ; Do OSIntCtxSw()
   61 000000AC         
   62 000000AC E8BD4000        LDMFD   SP!, {R14}  ;- Restore SPSR_irq from IRQ
                                                    stack
   63 000000B0 E16FF00E        MSR     SPSR_cxsf, R14
   64 000000B4         
   65 000000B4 E8FD980F        LDMFD   SP!, {R0-R3, R11, R12, PC}^ ;- Restore a
                                                   djusted LR_irq from IRQ stac
                                                   k directly in the PC



ARM Macro Assembler    Page 5 


   66 000000B8         
   22 000000B8         
   23 000000B8         DefaultVICHandler
                               HANDLER DefaultVIC_Exception
   26 000000B8         

⌨️ 快捷键说明

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