📄 spi.s79
字号:
//////////////////////////////////////////////////////////////////////////////
// /
// 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 + -