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

📄 spi.s79

📁 ARM仿真案例
💻 S79
📖 第 1 页 / 共 2 页
字号:
        CFI EndBlock cfiBlock5
//   72 }

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock6 Using cfiCommon0
        CFI NoFunction
        ARM
??SPIStart??rA:
        ADD      R12,PC,#+1
        BX       R12
        CFI EndBlock cfiBlock6
        REQUIRE SPIStart

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock7 Using cfiCommon1
        CFI Function SPIStart
        THUMB
//   73  uint8 SPIStart(void)
//   74 {
SPIStart:
        PUSH     {LR}
        CFI ?RET Frame(CFA, -4)
        CFI CFA R13+4
        SUB      SP,SP,#+4
        CFI CFA R13+8
//   75     uint8 err;
//   76     
//   77     OSSemPend(SPISem, 0, &err);
        MOV      R2,SP
        MOVS     R1,#+0
        LDR      R0,??DataTable14  ;; SPISem
        LDR      R0,[R0, #+0]
        _BLF     OSSemPend,??OSSemPend??rT
//   78     UseSPITaskPro = GetOSPrioCur();
        BL       GetOSPrioCur
        LDR      R1,??DataTable13  ;; UseSPITaskPro
        STRB     R0,[R1, #+0]
//   79     return TRUE;
        MOVS     R0,#+1
        ADD      SP,SP,#+4
        CFI CFA R13+4
        POP      {R1}
        BX       R1               ;; return
        CFI EndBlock cfiBlock7
//   80 }

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock8 Using cfiCommon0
        CFI NoFunction
        ARM
??SPIRW??rA:
        ADD      R12,PC,#+1
        BX       R12
        CFI EndBlock cfiBlock8
        REQUIRE SPIRW
//   81 
//   82 /*********************************************************************************************************
//   83 ** 函数名称: SPIRW
//   84 ** 功能描述: 读写SPI 
//   85 ********************************************************************************************************/

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock9 Using cfiCommon1
        CFI Function SPIRW
        THUMB
//   86         uint8 SPIRW(uint8 *Rt, uint8 Data)
//   87 {
SPIRW:
        PUSH     {R4,R5,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R5 Frame(CFA, -8)
        CFI R4 Frame(CFA, -12)
        CFI CFA R13+12
        SUB      SP,SP,#+4
        CFI CFA R13+16
        MOVS     R4,R0
        MOVS     R5,R1
//   88     uint8 temp, err;
//   89     
//   90     temp = GetOSPrioCur();
        BL       GetOSPrioCur
        LSLS     R0,R0,#+24
        LSRS     R0,R0,#+24
//   91     if (temp == UseSPITaskPro)
        LDR      R1,??DataTable13  ;; UseSPITaskPro
        LDRB     R1,[R1, #+0]
        CMP      R0,R1
        BNE      ??SPIRW_0
//   92     {
//   93         SPI_SPDR = Data;
        LDR      R0,??DataTable15  ;; 0xe0020008
        STRB     R5,[R0, #+0]
//   94         temp = (unsigned int)OSMboxPend(SPIReviceMbox, 0, &err);
        MOV      R2,SP
        MOVS     R1,#+0
        LDR      R0,??DataTable16  ;; SPIReviceMbox
        LDR      R0,[R0, #+0]
        _BLF     OSMboxPend,??OSMboxPend??rT
        LSLS     R0,R0,#+24
        LSRS     R0,R0,#+24
//   95         *Rt = temp;
        STRB     R0,[R4, #+0]
//   96         return TRUE;
        MOVS     R0,#+1
        B        ??SPIRW_1
//   97     }
//   98     else
//   99     {
//  100         return FALSE;
??SPIRW_0:
        MOVS     R0,#+0
??SPIRW_1:
        ADD      SP,SP,#+4
        CFI CFA R13+12
        POP      {R4,R5}
        POP      {R1}
        BX       R1               ;; return
        CFI EndBlock cfiBlock9
//  101     }
//  102 }

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock10 Using cfiCommon0
        CFI NoFunction
        ARM
??SPIEnd??rA:
        ADD      R12,PC,#+1
        BX       R12
        CFI EndBlock cfiBlock10
        REQUIRE SPIEnd
//  103 
//  104 /*********************************************************************************************************
//  105 ** 函数名称: SPIEnd
//  106 ** 功能描述: 访问SPI结束
//  107 ********************************************************************************************************/

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock11 Using cfiCommon1
        CFI Function SPIEnd
        THUMB
//  108        uint8 SPIEnd(void)
//  109 {
SPIEnd:
        PUSH     {LR}
        CFI ?RET Frame(CFA, -4)
        CFI CFA R13+4
//  110     uint8 temp;
//  111     
//  112     temp = GetOSPrioCur();
        BL       GetOSPrioCur
        LSLS     R0,R0,#+24
        LSRS     R0,R0,#+24
//  113     if (temp == UseSPITaskPro)
        LDR      R1,??DataTable13  ;; UseSPITaskPro
        LDRB     R1,[R1, #+0]
        CMP      R0,R1
        BNE      ??SPIEnd_0
//  114     {
//  115         UseSPITaskPro = OS_PRIO_SELF;
        LDR      R0,??DataTable13  ;; UseSPITaskPro
        MOVS     R1,#+255
        STRB     R1,[R0, #+0]
//  116         OSSemPost(SPISem);
        LDR      R0,??DataTable14  ;; SPISem
        LDR      R0,[R0, #+0]
        _BLF     OSSemPost,??OSSemPost??rT
//  117         return TRUE;
        MOVS     R0,#+1
        B        ??SPIEnd_1
//  118     }
//  119     else
//  120     {
//  121         return FALSE;
??SPIEnd_0:
        MOVS     R0,#+0
??SPIEnd_1:
        POP      {R1}
        BX       R1               ;; return
        CFI EndBlock cfiBlock11
//  122     }
//  123 }

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable13:
        DC32     UseSPITaskPro

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable14:
        DC32     SPISem

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock12 Using cfiCommon0
        CFI NoFunction
        ARM
??SPI_Exception??rA:
        ADD      R12,PC,#+1
        BX       R12
        CFI EndBlock cfiBlock12
        REQUIRE SPI_Exception
//  124 
//  125 /*********************************************************************************************************
//  126 ** 函数名称: SPI_Exception
//  127 ** 功能描述: SPI中断服务程序
//  128 ********************************************************************************************************/

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
//  129 OS_CPU_SR cpu_sr;
cpu_sr:
        DS8 4

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock13 Using cfiCommon1
        CFI Function SPI_Exception
        THUMB
//  130 void SPI_Exception(void)
//  131 {
SPI_Exception:
        PUSH     {R4,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R4 Frame(CFA, -8)
        CFI CFA R13+8
//  132     INT8U temp, temp1;
//  133     
//  134     OS_ENTER_CRITICAL();
        _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
        LDR      R1,??SPI_Exception_0  ;; cpu_sr
        STR      R0,[R1, #+0]
//  135     temp = SPI_SPSR;
        LDR      R0,??SPI_Exception_0+0x4  ;; 0xe0020004
        LDRB     R4,[R0, #+0]
//  136     if ((temp & 0x80) != 0)
        LSLS     R0,R4,#+24
        BPL      ??SPI_Exception_1
//  137     {
//  138         temp1 = SPI_SPDR;
        LDR      R0,??DataTable15  ;; 0xe0020008
        LDRB     R0,[R0, #+0]
//  139         OSMboxPost(SPIReviceMbox, (void *)(temp1|0x100));
        MOVS     R1,#+128
        LSLS     R1,R1,#+1        ;; #+256
        ORRS     R1,R1,R0
        LDR      R0,??DataTable16  ;; SPIReviceMbox
        LDR      R0,[R0, #+0]
        _BLF     OSMboxPost,??OSMboxPost??rT
//  140     }
//  141     
//  142     if ((temp & 0x10) != 0)
??SPI_Exception_1:
        LSLS     R0,R4,#+27
        BPL      ??SPI_Exception_2
//  143     {
//  144         SPI_SPCR = 0xa0 | SPI_MOD;
        LDR      R0,??DataTable17  ;; 0xe0020000
        MOVS     R1,#+160
        STRB     R1,[R0, #+0]
//  145     }
//  146     SPI_SPINT = 0x01;    
??SPI_Exception_2:
        LDR      R0,??SPI_Exception_0+0x8  ;; 0xe002001c
        MOVS     R1,#+1
        STRB     R1,[R0, #+0]
//  147     VICVectAddr = 0;            // 通知中断控制器中断结束
        LDR      R0,??SPI_Exception_0+0xC  ;; 0xfffff030
        MOVS     R1,#+0
        STR      R1,[R0, #+0]
//  148     OS_EXIT_CRITICAL();
        LDR      R0,??SPI_Exception_0  ;; cpu_sr
        LDR      R0,[R0, #+0]
        _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
//  149 }
        POP      {R4}
        POP      {R0}
        BX       R0               ;; return
        DATA
??SPI_Exception_0:
        DC32     cpu_sr
        DC32     0xe0020004
        DC32     0xe002001c
        DC32     0xfffff030
        CFI EndBlock cfiBlock13

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable15:
        DC32     0xe0020008

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable16:
        DC32     SPIReviceMbox

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable17:
        DC32     0xe0020000

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock14 Using cfiCommon1
        CFI NoFunction
        THUMB
??OSMboxCreate??rT:
        LDR      R3,??Subroutine7_0  ;; OSMboxCreate
        BX       R3
        DATA
??Subroutine7_0:
        DC32     OSMboxCreate
        CFI EndBlock cfiBlock14

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock15 Using cfiCommon1
        CFI NoFunction
        THUMB
??OSSemCreate??rT:
        LDR      R3,??Subroutine8_0  ;; OSSemCreate
        BX       R3
        DATA
??Subroutine8_0:
        DC32     OSSemCreate
        CFI EndBlock cfiBlock15

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock16 Using cfiCommon1
        CFI NoFunction
        THUMB
??OSSemQuery??rT:
        LDR      R3,??Subroutine9_0  ;; OSSemQuery
        BX       R3
        DATA
??Subroutine9_0:
        DC32     OSSemQuery
        CFI EndBlock cfiBlock16

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock17 Using cfiCommon1
        CFI NoFunction
        THUMB
??OSSemPend??rT:
        LDR      R3,??Subroutine10_0  ;; OSSemPend
        BX       R3
        DATA
??Subroutine10_0:
        DC32     OSSemPend
        CFI EndBlock cfiBlock17

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock18 Using cfiCommon1
        CFI NoFunction
        THUMB
??OSMboxPend??rT:
        LDR      R3,??Subroutine11_0  ;; OSMboxPend
        BX       R3
        DATA
??Subroutine11_0:
        DC32     OSMboxPend
        CFI EndBlock cfiBlock18

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock19 Using cfiCommon1
        CFI NoFunction
        THUMB
??OSSemPost??rT:
        LDR      R3,??Subroutine12_0  ;; OSSemPost
        BX       R3
        DATA
??Subroutine12_0:
        DC32     OSSemPost
        CFI EndBlock cfiBlock19

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock20 Using cfiCommon1
        CFI NoFunction
        THUMB
??OS_CPU_SR_Save??rT:
        LDR      R3,??Subroutine13_0  ;; OS_CPU_SR_Save
        BX       R3
        DATA
??Subroutine13_0:
        DC32     OS_CPU_SR_Save
        CFI EndBlock cfiBlock20

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock21 Using cfiCommon1
        CFI NoFunction
        THUMB
??OSMboxPost??rT:
        LDR      R3,??Subroutine14_0  ;; OSMboxPost
        BX       R3
        DATA
??Subroutine14_0:
        DC32     OSMboxPost
        CFI EndBlock cfiBlock21

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock22 Using cfiCommon1
        CFI NoFunction
        THUMB
??OS_CPU_SR_Restore??rT:
        LDR      R3,??Subroutine15_0  ;; OS_CPU_SR_Restore
        BX       R3
        DATA
??Subroutine15_0:
        DC32     OS_CPU_SR_Restore
        CFI EndBlock cfiBlock22

        RSEG INITTAB:CODE:ROOT(2)
        DATA
?init?tab?DATA_Z:
        DCD      sfe(DATA_Z) - sfb(DATA_Z), sfb(DATA_Z), sfb(DATA_Z)

        END
//  150 
//  151 /*********************************************************************************************************
//  152 **                            End Of File
//  153 ********************************************************************************************************/
// 
// 512 bytes in segment CODE
//   8 bytes in segment DATA_AN
//  13 bytes in segment DATA_Z
//  12 bytes in segment INITTAB
// 
// 384 bytes of CODE memory (+ 140 bytes shared)
//  13 bytes of DATA memory (+   8 bytes shared)
//
//Errors: none
//Warnings: none

⌨️ 快捷键说明

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