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