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

📄 spi.s79

📁 ARM仿真案例
💻 S79
📖 第 1 页 / 共 2 页
字号:
//////////////////////////////////////////////////////////////////////////////
//                                                                           /
// IAR ARM ANSI C/C++ Compiler V4.40A/W32 EVALUATION   21/Jul/2006  16:27:50 /
// Copyright 1999-2005 IAR Systems. All rights reserved.                     /
// Time limited license: 22 days left                                        /
//                                                                           /
//    Cpu mode        =  interwork                                           /
//    Endian          =  little                                              /
//    Stack alignment =  4                                                   /
//    Source file     =  E:\Project\ucos-ii\spi\App\spi.c                    /
//    Command line    =  E:\Project\ucos-ii\spi\App\spi.c -lCN               /
//                       E:\Project\ucos-ii\spi\Debug\List\ -lA              /
//                       E:\Project\ucos-ii\spi\Debug\List\ -o               /
//                       E:\Project\ucos-ii\spi\Debug\Obj\ -s9 --no_cse      /
//                       --no_unroll --no_inline --no_code_motion --no_tbaa  /
//                       --no_clustering --no_scheduling --debug --cpu_mode  /
//                       thumb --endian little --cpu ARM7TDMI-S              /
//                       --stack_align 4 --interwork -e --fpu None           /
//                       --dlib_config "e:\Program Files\IAR                 /
//                       Systems\Embedded Workbench 4.0                      /
//                       Evaluation\ARM\LIB\dl4tptinl8n.h" -I                /
//                       E:\Project\ucos-ii\spi\ -I                          /
//                       E:\Project\ucos-ii\spi\App\ -I                      /
//                       E:\Project\ucos-ii\spi\ARM\ -I                      /
//                       E:\Project\ucos-ii\spi\BSP\ -I                      /
//                       E:\Project\ucos-ii\spi\uCOS-II\ -I "e:\Program      /
//                       Files\IAR Systems\Embedded Workbench 4.0            /
//                       Evaluation\ARM\INC\"                                /
//    List file       =  E:\Project\ucos-ii\spi\Debug\List\spi.s79           /
//                                                                           /
//                                                                           /
//////////////////////////////////////////////////////////////////////////////

        NAME spi

        RTMODEL "StackAlign4", "USED"
        RTMODEL "__cpu_mode", "__pcs__interwork"
        RTMODEL "__data_model", "absolute"
        RTMODEL "__dlib_file_descriptor", "0"
        RTMODEL "__endian", "little"
        RTMODEL "__rt_version", "6"

        RSEG CSTACK:DATA:NOROOT(2)

??DataTable0 EQU 0
??DataTable1 EQU 0
??DataTable10 EQU 0
??DataTable11 EQU 0
??DataTable12 EQU 0
??DataTable2 EQU 0
??DataTable3 EQU 0
??DataTable4 EQU 0
??DataTable5 EQU 0
??DataTable6 EQU 0
??DataTable7 EQU 0
??DataTable8 EQU 0
??DataTable9 EQU 0
        MULTWEAK ??GetOSPrioCur??rA
        MULTWEAK ??GetSPIFlag??rA
        MULTWEAK ??OSMboxCreate??rT
        MULTWEAK ??OSMboxPend??rT
        MULTWEAK ??OSMboxPost??rT
        MULTWEAK ??OSSemCreate??rT
        MULTWEAK ??OSSemPend??rT
        MULTWEAK ??OSSemPost??rT
        MULTWEAK ??OSSemQuery??rT
        MULTWEAK ??OS_CPU_SR_Restore??rT
        MULTWEAK ??OS_CPU_SR_Save??rT
        MULTWEAK ??SPIEnd??rA
        MULTWEAK ??SPIInit??rA
        MULTWEAK ??SPIRW??rA
        MULTWEAK ??SPIStart??rA
        MULTWEAK ??SPI_Exception??rA
        PUBWEAK ?init?tab?DATA_Z
        PUBLIC GetOSPrioCur
        FUNCTION GetOSPrioCur,0203H
        PUBLIC GetSPIFlag
        FUNCTION GetSPIFlag,0203H
        LOCFRAME CSTACK, 16, STACK
        PUBLIC SPIEnd
        FUNCTION SPIEnd,0203H
        LOCFRAME CSTACK, 4, STACK
        PUBLIC SPIInit
        FUNCTION SPIInit,0203H
        LOCFRAME CSTACK, 4, STACK
        PUBLIC SPIRW
        FUNCTION SPIRW,0203H
        LOCFRAME CSTACK, 16, STACK
        PUBLIC SPIStart
        FUNCTION SPIStart,0203H
        LOCFRAME CSTACK, 8, STACK
        PUBLIC SPI_Exception
        FUNCTION SPI_Exception,0203H
        LOCFRAME CSTACK, 8, STACK
        PUBWEAK VICVectAddr
        PUBWEAK _A_PINSEL0
        PUBLIC cpu_sr
        
        CFI Names cfiNames0
        CFI StackFrame CFA R13 HUGEDATA
        CFI Resource R0:32, R1:32, R2:32, R3:32, R4:32, R5:32, R6:32, R7:32
        CFI Resource R8:32, R9:32, R10:32, R11:32, R12:32, CPSR:32, R13:32
        CFI Resource R14:32, SPSR:32
        CFI VirtualResource ?RET:32
        CFI EndNames cfiNames0
        
        CFI Common cfiCommon0 Using cfiNames0
        CFI CodeAlign 4
        CFI DataAlign 4
        CFI ReturnAddress ?RET CODE
        CFI CFA R13+0
        CFI R0 Undefined
        CFI R1 Undefined
        CFI R2 Undefined
        CFI R3 Undefined
        CFI R4 SameValue
        CFI R5 SameValue
        CFI R6 SameValue
        CFI R7 SameValue
        CFI R8 SameValue
        CFI R9 SameValue
        CFI R10 SameValue
        CFI R11 SameValue
        CFI R12 Undefined
        CFI CPSR SameValue
        CFI R14 Undefined
        CFI SPSR SameValue
        CFI ?RET R14
        CFI EndCommon cfiCommon0
        
        
        CFI Common cfiCommon1 Using cfiNames0
        CFI CodeAlign 2
        CFI DataAlign 4
        CFI ReturnAddress ?RET CODE
        CFI CFA R13+0
        CFI R0 Undefined
        CFI R1 Undefined
        CFI R2 Undefined
        CFI R3 Undefined
        CFI R4 SameValue
        CFI R5 SameValue
        CFI R6 SameValue
        CFI R7 SameValue
        CFI R8 SameValue
        CFI R9 SameValue
        CFI R10 SameValue
        CFI R11 SameValue
        CFI R12 Undefined
        CFI CPSR SameValue
        CFI R14 Undefined
        CFI SPSR SameValue
        CFI ?RET R14
        CFI EndCommon cfiCommon1
        
OSMboxCreate        SYMBOL "OSMboxCreate"
OSMboxPend          SYMBOL "OSMboxPend"
OSMboxPost          SYMBOL "OSMboxPost"
OSSemCreate         SYMBOL "OSSemCreate"
OSSemPend           SYMBOL "OSSemPend"
OSSemPost           SYMBOL "OSSemPost"
OSSemQuery          SYMBOL "OSSemQuery"
OS_CPU_SR_Restore   SYMBOL "OS_CPU_SR_Restore"
OS_CPU_SR_Save      SYMBOL "OS_CPU_SR_Save"
GetOSPrioCur        SYMBOL "GetOSPrioCur"
??GetOSPrioCur??rA  SYMBOL "??rA", GetOSPrioCur
GetSPIFlag          SYMBOL "GetSPIFlag"
??GetSPIFlag??rA    SYMBOL "??rA", GetSPIFlag
??OSMboxCreate??rT  SYMBOL "??rT", OSMboxCreate
??OSMboxPend??rT    SYMBOL "??rT", OSMboxPend
??OSMboxPost??rT    SYMBOL "??rT", OSMboxPost
??OSSemCreate??rT   SYMBOL "??rT", OSSemCreate
??OSSemPend??rT     SYMBOL "??rT", OSSemPend
??OSSemPost??rT     SYMBOL "??rT", OSSemPost
??OSSemQuery??rT    SYMBOL "??rT", OSSemQuery
??OS_CPU_SR_Restore??rT SYMBOL "??rT", OS_CPU_SR_Restore
??OS_CPU_SR_Save??rT SYMBOL "??rT", OS_CPU_SR_Save
SPIEnd              SYMBOL "SPIEnd"
??SPIEnd??rA        SYMBOL "??rA", SPIEnd
SPIInit             SYMBOL "SPIInit"
??SPIInit??rA       SYMBOL "??rA", SPIInit
SPIRW               SYMBOL "SPIRW"
??SPIRW??rA         SYMBOL "??rA", SPIRW
SPIStart            SYMBOL "SPIStart"
??SPIStart??rA      SYMBOL "??rA", SPIStart
SPI_Exception       SYMBOL "SPI_Exception"
??SPI_Exception??rA SYMBOL "??rA", SPI_Exception

        EXTERN OSMboxCreate
        FUNCTION OSMboxCreate,0202H
        EXTERN OSMboxPend
        FUNCTION OSMboxPend,0202H
        EXTERN OSMboxPost
        FUNCTION OSMboxPost,0202H
        EXTERN OSPrioCur
        EXTERN OSSemCreate
        FUNCTION OSSemCreate,0202H
        EXTERN OSSemPend
        FUNCTION OSSemPend,0202H
        EXTERN OSSemPost
        FUNCTION OSSemPost,0202H
        EXTERN OSSemQuery
        FUNCTION OSSemQuery,0202H
        EXTERN OS_CPU_SR_Restore
        FUNCTION OS_CPU_SR_Restore,0202H
        EXTERN OS_CPU_SR_Save
        FUNCTION OS_CPU_SR_Save,0202H

// E:\Project\ucos-ii\spi\App\spi.c
//    1 
//    2 /********************************************************************************************************/
//    3 
//    4 #define IN_SPI
//    5 #include "config.h"

        ASEGN DATA_AN:DATA:NOROOT,0fffff030H
// unsigned long volatile __data VICVectAddr
VICVectAddr:
        DS8 4

        ASEGN DATA_AN:DATA:NOROOT,0e002c000H
// union <unnamed> volatile __data _A_PINSEL0
_A_PINSEL0:
        DS8 4
//    6 #ifndef  SPI_MOD
//    7 #define SPI_MOD     0
//    8 #endif 
//    9 
//   10 /* SPI总线接口的特殊寄存器 */
//   11 #define SPI_SPCR        (*((volatile unsigned char *) 0xE0020000))
//   12 #define SPI_SPSR        (*((volatile unsigned char *) 0xE0020004))
//   13 #define SPI_SPDR        (*((volatile unsigned char *) 0xE0020008))
//   14 #define SPI_SPCCR       (*((volatile unsigned char *) 0xE002000C))
//   15 #define SPI_SPINT       (*((volatile unsigned char *) 0xE002001C))

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
//   16 static OS_EVENT *SPIReviceMbox;
SPIReviceMbox:
        DS8 4

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
//   17 static OS_EVENT *SPISem;
SPISem:
        DS8 4

        RSEG DATA_Z:DATA:SORT:NOROOT(0)
//   18 static uint8 UseSPITaskPro;
UseSPITaskPro:
        DS8 1

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock0 Using cfiCommon0
        CFI NoFunction
        ARM
??SPIInit??rA:
        ADD      R12,PC,#+1
        BX       R12
        CFI EndBlock cfiBlock0
        REQUIRE SPIInit
//   19 /*********************************************************************************************************
//   20 ** 函数名称: SPIInit
//   21 ** 功能描述: 初始化SPI总线为主模式
//   22 ********************************************************************************************************/

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock1 Using cfiCommon1
        CFI Function SPIInit
        THUMB
//   23         uint8 SPIInit(uint8 Fdiv)
//   24 {
SPIInit:
        PUSH     {LR}
        CFI ?RET Frame(CFA, -4)
        CFI CFA R13+4
//   25     PINSEL0 = (PINSEL0 & 0xffff00ff) | 0x5500;  /* 选择管脚为UART0 */
        LDR      R1,??SPIInit_0   ;; 0xe002c000
        LDR      R2,[R1, #+0]
        LDR      R3,??SPIInit_0+0x4  ;; 0xffff00ff
        ANDS     R3,R3,R2
        MOVS     R2,#+170
        LSLS     R2,R2,#+7        ;; #+21760
        ORRS     R2,R2,R3
        STR      R2,[R1, #+0]
//   26 
//   27     SPI_SPCCR = Fdiv & 0xfe;                    /* 分频值 */
        LDR      R1,??SPIInit_0+0x8  ;; 0xe002000c
        MOVS     R2,#+254
        ANDS     R2,R2,R0
        STRB     R2,[R1, #+0]
//   28     SPI_SPCR = 0xa0 | SPI_MOD;                  /* 主机、允许中断 */
        LDR      R0,??DataTable17  ;; 0xe0020000
        MOVS     R1,#+160
        STRB     R1,[R0, #+0]
//   29 
//   30     UseSPITaskPro = OS_PRIO_SELF;               /* 避免任务不按照规范编写程序而使访问SPI混乱 */
        LDR      R0,??DataTable13  ;; UseSPITaskPro
        MOVS     R1,#+255
        STRB     R1,[R0, #+0]
//   31     SPIReviceMbox = OSMboxCreate(NULL);         /* 用于中断返回收到的数据 */
        MOVS     R0,#+0
        _BLF     OSMboxCreate,??OSMboxCreate??rT
        LDR      R1,??DataTable16  ;; SPIReviceMbox
        STR      R0,[R1, #+0]
//   32     if (SPIReviceMbox == NULL)
        LDR      R0,??DataTable16  ;; SPIReviceMbox
        LDR      R0,[R0, #+0]
        CMP      R0,#+0
        BEQ      ??SPIInit_1
//   33     {
//   34         return FALSE;
//   35     }
//   36     SPISem = OSSemCreate(1);                    /* 用于互斥访问SPI总线 */
        MOVS     R0,#+1
        _BLF     OSSemCreate,??OSSemCreate??rT
        LDR      R1,??DataTable14  ;; SPISem
        STR      R0,[R1, #+0]
//   37     if (SPISem != NULL)
        LDR      R0,??DataTable14  ;; SPISem
        LDR      R0,[R0, #+0]
        CMP      R0,#+0
        BEQ      ??SPIInit_1
//   38     {
//   39         return TRUE;
        MOVS     R0,#+1
//   40     }
//   41     else
//   42     {
//   43         return FALSE;
??SPIInit_1:
        POP      {R1}
        BX       R1               ;; return
        DATA
??SPIInit_0:
        DC32     0xe002c000
        DC32     0xffff00ff
        DC32     0xe002000c
        CFI EndBlock cfiBlock1
//   44     }
//   45 }

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock2 Using cfiCommon0
        CFI NoFunction
        ARM
??GetSPIFlag??rA:
        ADD      R12,PC,#+1
        BX       R12
        CFI EndBlock cfiBlock2
        REQUIRE GetSPIFlag
//   46 
//   47 /*********************************************************************************************************
//   48 ** 函数名称: GetSPIFlag
//   49 ** 功能描述: 获取SPI状态 
//   50 ********************************************************************************************************/

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock3 Using cfiCommon1
        CFI Function GetSPIFlag
        THUMB
//   51        uint8 GetSPIFlag(void)
//   52 {
GetSPIFlag:
        PUSH     {LR}
        CFI ?RET Frame(CFA, -4)
        CFI CFA R13+4
        SUB      SP,SP,#+12
        CFI CFA R13+16
//   53     OS_SEM_DATA SemData;
//   54     
//   55     if (OSSemQuery(SPISem, &SemData) == OS_NO_ERR)
        MOV      R1,SP
        LDR      R0,??DataTable14  ;; SPISem
        LDR      R0,[R0, #+0]
        _BLF     OSSemQuery,??OSSemQuery??rT
        CMP      R0,#+0
        BNE      ??GetSPIFlag_0
//   56     {
//   57         if (SemData.OSCnt != 0)
        MOV      R0,SP
        LDRH     R0,[R0, #+0]
        CMP      R0,#+0
        BEQ      ??GetSPIFlag_0
//   58         {
//   59             return 0;
        MOVS     R0,#+0
        B        ??GetSPIFlag_1
//   60         }
//   61     }
//   62     return 1;
??GetSPIFlag_0:
        MOVS     R0,#+1
??GetSPIFlag_1:
        ADD      SP,SP,#+12
        CFI CFA R13+4
        POP      {R1}
        BX       R1               ;; return
        CFI EndBlock cfiBlock3
//   63 }

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock4 Using cfiCommon0
        CFI NoFunction
        ARM
??GetOSPrioCur??rA:
        ADD      R12,PC,#+1
        BX       R12
        CFI EndBlock cfiBlock4
        REQUIRE GetOSPrioCur
//   64 
//   65 /*********************************************************************************************************
//   66 ** 函数名称: SPIStart
//   67 ** 功能描述: 开始访问SPI 
//   68 ********************************************************************************************************/

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock5 Using cfiCommon1
        CFI Function GetOSPrioCur
        THUMB
//   69  uint32 GetOSPrioCur(void)
//   70 {
//   71     return OSPrioCur;
GetOSPrioCur:
        LDR      R0,??GetOSPrioCur_0  ;; OSPrioCur
        LDRB     R0,[R0, #+0]
        BX       LR               ;; return
        Nop      
        DATA
??GetOSPrioCur_0:
        DC32     OSPrioCur

⌨️ 快捷键说明

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