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

📄 os_cpu_a.i

📁 一个适用于MPC565的uCOS接口程序源码
💻 I
字号:
#
# OS_MPC565_A.i
#
# uC/OS-II MPC565 PowerPC Specific Assembly Language macros and definitions
#
# Author Peter S 5/4/01
#
# Version V1.00
#
#########################################################################
.page
#########################################################################
#   Stack Frame Definition
#       These Stack frame definitions have to be congruent with the 
#       Stack Frame usage in OS_MPC565_C.C
#########################################################################
    OS_FP_SUPPORT .equ 1        ;set to 1 for floating point support also set in OS_CFG.h

    XR1     .equ    0           ;stack pointer
    XCFLR   .equ    XR1+4       ;called functions link register
    XR0     .equ    XCFLR+4
    XSRR0   .equ    XR0+4
    XSRR1   .equ    XSRR0+4
    XCTR    .equ    XSRR1+4
    XXER    .equ    XCTR+4
    XCR     .equ    XXER+4
    XLR     .equ    XCR+4
    XR3     .equ    XLR+4
    XR4     .equ    XR3+4
    XR5     .equ    XR4+4
    XR6     .equ    XR5+4
    XR7     .equ    XR6+4
    XR8     .equ    XR7+4
    XR9     .equ    XR8+4
    XR10    .equ    XR9+4
    XR11    .equ    XR10+4
    XR12    .equ    XR11+4
    XR14    .equ    XR12+4
    XR15    .equ    XR14+4
    XR16    .equ    XR15+4
    XR17    .equ    XR16+4
    XR18    .equ    XR17+4
    XR19    .equ    XR18+4
    XR20    .equ    XR19+4
    XR21    .equ    XR20+4
    XR22    .equ    XR21+4
    XR23    .equ    XR22+4
    XR24    .equ    XR23+4
    XR25    .equ    XR24+4
    XR26    .equ    XR25+4
    XR27    .equ    XR26+4
    XR28    .equ    XR27+4
    XR29    .equ    XR28+4
    XR30    .equ    XR29+4
    XR31    .equ    XR30+4
    XRPAD   .equ    XR31+4+12   ;add padding to make mod 8 for EABI
    STACK_FRAME_SIZE .set   XRPAD
    .if OS_FP_SUPPORT
    XF0     .equ    XRPAD
    XF1     .equ    XF0+8
    XF2     .equ    XF1+8
    XF3     .equ    XF2+8
    XF4     .equ    XF3+8
    XF5     .equ    XF4+8
    XF6     .equ    XF5+8
    XF7     .equ    XF6+8
    XF8     .equ    XF7+8
    XF9     .equ    XF8+8
    XF10    .equ    XF9+8
    XF11    .equ    XF10+8
    XF12    .equ    XF11+8
    XF13    .equ    XF12+8
    XF14    .equ    XF13+8
    XF15    .equ    XF14+8
    XF16    .equ    XF15+8
    XF17    .equ    XF16+8
    XF18    .equ    XF17+8
    XF19    .equ    XF18+8
    XF20    .equ    XF19+8
    XF21    .equ    XF20+8
    XF22    .equ    XF21+8
    XF23    .equ    XF22+8
    XF24    .equ    XF23+8
    XF25    .equ    XF24+8
    XF26    .equ    XF25+8
    XF27    .equ    XF26+8
    XF28    .equ    XF27+8
    XF29    .equ    XF28+8
    XF30    .equ    XF29+8
    XF31    .equ    XF30+8
    XFPSCR  .equ    XF31+8 
    STACK_FRAME_SIZE .set   XFPSCR+8
    .endif

.page
#########################################################################
#   Diagnostic bit set/reset macros
#       These two macros were intended as a diagnostic only. 
#       Set DIAGNOSTICS to 0 for released code
#       QADC port A, must be set as I/O elsewhere
#########################################################################
    DIAGNOSTICS .equ    1        ;add bit twiddling support
    QADC_A      .equ    00304800H
DiaBitSet:      .macro  regA,regB,regC,BIT,CBIT
    .if         DIAGNOSTICS
    addis       regA,r0,(QADC_A+6)@ha
    addi        regB,r0,1
    lbz         regC,(QADC_A+6)@l(regA)
    rlwimi      regC,regB,BIT,CBIT,CBIT
    stb         regC,(QADC_A+6)@l(regA)
    .endif
    .endm       ;QADC_A.PORTQA.B.PQA_BIT = 1;   // diagnostic

DiaBitReset:    .macro  regA,regB,regC,BIT,CBIT
    .if         DIAGNOSTICS
    addis       regA,r0,(QADC_A+6)@ha
    addi        regB,r0,0
    lbz         regC,(QADC_A+6)@l(regA)
    rlwimi      regC,regB,BIT,CBIT,CBIT
    stb         regC,(QADC_A+6)@l(regA)
    .endif
    .endm       ;QADC_A.PORTQA.B.PQA_BIT = 0;   // diagnostic

.page
#########################################################################
#   Save Context Macros
#
#########################################################################
SaveSPRs:       .macro
    stwu        r1,-STACK_FRAME_SIZE(r1)
    stw         r0,XR0(r1)
    mfsrr0      r0
    stw         r0,XSRR0(r1)
    mfsrr1      r0
    stw         r0,XSRR1(r1)
    mflr        r0
    stw         r0,XLR(r1)
    mfcr        r0
    stw         r0,XCR(r1)
    mfxer       r0
    stw         r0,XXER(r1)
    mfctr       r0
    stw         r0,XCTR(r1)
    .endm

SaveGPRs:       .macro  BIT,CBIT
    stw         r3,XR3(r1)
    stw         r4,XR4(r1)
    .if         NARG > 1
    DiaBitSet   r4,r3,r0,BIT,CBIT
    .endc
    stw         r5,XR5(r1)
    stw         r6,XR6(r1)
    stw         r7,XR7(r1)
    stw         r8,XR8(r1)
    stw         r9,XR9(r1)
    stw         r10,XR10(r1)
    stw         r11,XR11(r1)
    stw         r12,XR12(r1)
    stmw        r14,XR14(r1)

    .if OS_FP_SUPPORT
    mfmsr       r0
    ori         r0,r0,0x2000            ;make floating point available
    mtmsr       r0
    stfd        f0,XF0(r1)
    stfd        f1,XF1(r1)
    stfd        f2,XF2(r1)
    stfd        f3,XF3(r1)
    stfd        f4,XF4(r1)
    stfd        f5,XF5(r1)
    stfd        f6,XF6(r1)
    stfd        f7,XF7(r1)
    stfd        f8,XF8(r1)
    stfd        f9,XF9(r1)
    stfd        f10,XF10(r1)
    stfd        f11,XF11(r1)
    stfd        f12,XF12(r1)
    stfd        f13,XF13(r1)
    stfd        f14,XF14(r1)
    stfd        f15,XF15(r1)
    stfd        f16,XF16(r1)
    stfd        f17,XF17(r1)
    stfd        f18,XF18(r1)
    stfd        f19,XF19(r1)
    stfd        f20,XF20(r1)
    stfd        f21,XF21(r1)
    stfd        f22,XF22(r1)
    stfd        f23,XF23(r1)
    stfd        f24,XF24(r1)
    stfd        f25,XF25(r1)
    stfd        f26,XF26(r1)
    stfd        f27,XF27(r1)
    stfd        f28,XF28(r1)
    stfd        f29,XF29(r1)
    stfd        f30,XF30(r1)
    stfd        f31,XF31(r1)
    mffs        f0                  ;save Floating Point Status Register
    stfd        f0,XFPSCR(r1)
    .endif
    .endm

.page
#########################################################################
#   Restore Context Macros
#
#########################################################################
RestoreGPRs:    .macro BIT,CBIT
    .if OS_FP_SUPPORT
    mfmsr       r0
    ori         r0,r0,0x2000            ;make floating point available
    mtmsr       r0
    lfd         f0,XFPSCR(r1)           ;restore Floating Point Status Register
    mtfsf       0,f0
    mtfsf       1,f0
    mtfsf       2,f0
    mtfsf       3,f0
    mtfsf       4,f0
    mtfsf       5,f0
    mtfsf       6,f0
    mtfsf       7,f0
    lfd         f31,XF31(r1)
    lfd         f30,XF30(r1)
    lfd         f29,XF29(r1)
    lfd         f28,XF28(r1)
    lfd         f27,XF27(r1)        
    lfd         f26,XF26(r1)        
    lfd         f25,XF25(r1)            
    lfd         f24,XF24(r1)    
    lfd         f23,XF23(r1)
    lfd         f22,XF22(r1)
    lfd         f21,XF21(r1)        
    lfd         f20,XF20(r1)        
    lfd         f19,XF19(r1)        
    lfd         f18,XF18(r1)    
    lfd         f17,XF17(r1)
    lfd         f16,XF16(r1)
    lfd         f15,XF15(r1)            
    lfd         f14,XF14(r1)
    lfd         f13,XF13(r1)
    lfd         f12,XF12(r1)
    lfd         f11,XF11(r1)
    lfd         f10,XF10(r1)
    lfd         f9,XF9(r1)
    lfd         f8,XF8(r1)
    lfd         f7,XF7(r1)
    lfd         f6,XF6(r1)
    lfd         f5,XF5(r1)
    lfd         f4,XF4(r1)
    lfd         f3,XF3(r1)
    lfd         f2,XF2(r1)
    lfd         f1,XF1(r1)
    lfd         f0,XF0(r1)
    .endif

    lmw         r14,XR14(r1)
    lwz         r12,XR12(r1)
    lwz         r11,XR11(r1)
    lwz         r10,XR10(r1)
    lwz         r9,XR9(r1)
    lwz         r8,XR8(r1)
    lwz         r7,XR7(r1)
    lwz         r6,XR6(r1)
    lwz         r5,XR5(r1)
    .if         NARG > 1
    DiaBitReset r3,r4,r0,BIT,CBIT
    .endc
    lwz         r4,XR4(r1)
    lwz         r3,XR3(r1)
    .endm

RestoreSPRs:    .macro
    lwz         r0,XCTR(r1)
    mtctr       r0
    lwz         r0,XXER(r1)
    mtxer       r0
    lwz         r0,XCR(r1)
    mtcrf       255,r0
    lwz         r0,XLR(r1)
    mtlr        r0
    lwz         r0,XSRR1(r1)
    mtsrr1      r0
    lwz         r0,XSRR0(r1)
    mtsrr0      r0
    lwz         r0,XR0(r1)
    addi        r1,r1,STACK_FRAME_SIZE
    .endm

⌨️ 快捷键说明

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