📄 spi.lst
字号:
87 {
\ SPIRW:
\ 00000000 30B5 PUSH {R4,R5,LR}
\ 00000002 81B0 SUB SP,SP,#+4
\ 00000004 0400 MOVS R4,R0
\ 00000006 0D00 MOVS R5,R1
88 uint8 temp, err;
89
90 temp = GetOSPrioCur();
\ 00000008 ........ BL GetOSPrioCur
\ 0000000C 0006 LSLS R0,R0,#+24
\ 0000000E 000E LSRS R0,R0,#+24
91 if (temp == UseSPITaskPro)
\ 00000010 .... LDR R1,??DataTable13 ;; UseSPITaskPro
\ 00000012 0978 LDRB R1,[R1, #+0]
\ 00000014 8842 CMP R0,R1
\ 00000016 0CD1 BNE ??SPIRW_0
92 {
93 SPI_SPDR = Data;
\ 00000018 .... LDR R0,??DataTable15 ;; 0xe0020008
\ 0000001A 0570 STRB R5,[R0, #+0]
94 temp = (unsigned int)OSMboxPend(SPIReviceMbox, 0, &err);
\ 0000001C 6A46 MOV R2,SP
\ 0000001E 0021 MOVS R1,#+0
\ 00000020 .... LDR R0,??DataTable16 ;; SPIReviceMbox
\ 00000022 0068 LDR R0,[R0, #+0]
\ 00000024 ........ _BLF OSMboxPend,??OSMboxPend??rT
\ 00000028 0006 LSLS R0,R0,#+24
\ 0000002A 000E LSRS R0,R0,#+24
95 *Rt = temp;
\ 0000002C 2070 STRB R0,[R4, #+0]
96 return TRUE;
\ 0000002E 0120 MOVS R0,#+1
\ 00000030 00E0 B ??SPIRW_1
97 }
98 else
99 {
100 return FALSE;
\ ??SPIRW_0:
\ 00000032 0020 MOVS R0,#+0
\ ??SPIRW_1:
\ 00000034 01B0 ADD SP,SP,#+4
\ 00000036 30BC POP {R4,R5}
\ 00000038 02BC POP {R1}
\ 0000003A 0847 BX R1 ;; return
101 }
102 }
103
104 /*********************************************************************************************************
105 ** 函数名称: SPIEnd
106 ** 功能描述: 访问SPI结束
107 ********************************************************************************************************/
\ In segment CODE, align 4, keep-with-next
108 uint8 SPIEnd(void)
109 {
\ SPIEnd:
\ 00000000 00B5 PUSH {LR}
110 uint8 temp;
111
112 temp = GetOSPrioCur();
\ 00000002 ........ BL GetOSPrioCur
\ 00000006 0006 LSLS R0,R0,#+24
\ 00000008 000E LSRS R0,R0,#+24
113 if (temp == UseSPITaskPro)
\ 0000000A .... LDR R1,??DataTable13 ;; UseSPITaskPro
\ 0000000C 0978 LDRB R1,[R1, #+0]
\ 0000000E 8842 CMP R0,R1
\ 00000010 08D1 BNE ??SPIEnd_0
114 {
115 UseSPITaskPro = OS_PRIO_SELF;
\ 00000012 .... LDR R0,??DataTable13 ;; UseSPITaskPro
\ 00000014 FF21 MOVS R1,#+255
\ 00000016 0170 STRB R1,[R0, #+0]
116 OSSemPost(SPISem);
\ 00000018 .... LDR R0,??DataTable14 ;; SPISem
\ 0000001A 0068 LDR R0,[R0, #+0]
\ 0000001C ........ _BLF OSSemPost,??OSSemPost??rT
117 return TRUE;
\ 00000020 0120 MOVS R0,#+1
\ 00000022 00E0 B ??SPIEnd_1
118 }
119 else
120 {
121 return FALSE;
\ ??SPIEnd_0:
\ 00000024 0020 MOVS R0,#+0
\ ??SPIEnd_1:
\ 00000026 02BC POP {R1}
\ 00000028 0847 BX R1 ;; return
122 }
123 }
124
125 /*********************************************************************************************************
126 ** 函数名称: SPI_Exception
127 ** 功能描述: SPI中断服务程序
128 ********************************************************************************************************/
\ In segment DATA_Z, align 4, align-sorted
129 OS_CPU_SR cpu_sr;
\ cpu_sr:
\ 00000000 DS8 4
\ In segment CODE, align 4, keep-with-next
130 void SPI_Exception(void)
131 {
\ SPI_Exception:
\ 00000000 10B5 PUSH {R4,LR}
132 INT8U temp, temp1;
133
134 OS_ENTER_CRITICAL();
\ 00000002 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
\ 00000006 1049 LDR R1,??SPI_Exception_0 ;; cpu_sr
\ 00000008 0860 STR R0,[R1, #+0]
135 temp = SPI_SPSR;
\ 0000000A 1048 LDR R0,??SPI_Exception_0+0x4 ;; 0xe0020004
\ 0000000C 0478 LDRB R4,[R0, #+0]
136 if ((temp & 0x80) != 0)
\ 0000000E 2006 LSLS R0,R4,#+24
\ 00000010 08D5 BPL ??SPI_Exception_1
137 {
138 temp1 = SPI_SPDR;
\ 00000012 .... LDR R0,??DataTable15 ;; 0xe0020008
\ 00000014 0078 LDRB R0,[R0, #+0]
139 OSMboxPost(SPIReviceMbox, (void *)(temp1|0x100));
\ 00000016 8021 MOVS R1,#+128
\ 00000018 4900 LSLS R1,R1,#+1 ;; #+256
\ 0000001A 0143 ORRS R1,R1,R0
\ 0000001C .... LDR R0,??DataTable16 ;; SPIReviceMbox
\ 0000001E 0068 LDR R0,[R0, #+0]
\ 00000020 ........ _BLF OSMboxPost,??OSMboxPost??rT
140 }
141
142 if ((temp & 0x10) != 0)
\ ??SPI_Exception_1:
\ 00000024 E006 LSLS R0,R4,#+27
\ 00000026 02D5 BPL ??SPI_Exception_2
143 {
144 SPI_SPCR = 0xa0 | SPI_MOD;
\ 00000028 .... LDR R0,??DataTable17 ;; 0xe0020000
\ 0000002A A021 MOVS R1,#+160
\ 0000002C 0170 STRB R1,[R0, #+0]
145 }
146 SPI_SPINT = 0x01;
\ ??SPI_Exception_2:
\ 0000002E 0848 LDR R0,??SPI_Exception_0+0x8 ;; 0xe002001c
\ 00000030 0121 MOVS R1,#+1
\ 00000032 0170 STRB R1,[R0, #+0]
147 VICVectAddr = 0; // 通知中断控制器中断结束
\ 00000034 0748 LDR R0,??SPI_Exception_0+0xC ;; 0xfffff030
\ 00000036 0021 MOVS R1,#+0
\ 00000038 0160 STR R1,[R0, #+0]
148 OS_EXIT_CRITICAL();
\ 0000003A 0348 LDR R0,??SPI_Exception_0 ;; cpu_sr
\ 0000003C 0068 LDR R0,[R0, #+0]
\ 0000003E ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
149 }
\ 00000042 10BC POP {R4}
\ 00000044 01BC POP {R0}
\ 00000046 0047 BX R0 ;; return
\ ??SPI_Exception_0:
\ 00000048 ........ DC32 cpu_sr
\ 0000004C 040002E0 DC32 0xe0020004
\ 00000050 1C0002E0 DC32 0xe002001c
\ 00000054 30F0FFFF DC32 0xfffff030
\ In segment CODE, align 4, keep-with-next
\ ??DataTable13:
\ 00000000 ........ DC32 UseSPITaskPro
\ In segment CODE, align 4, keep-with-next
\ ??DataTable14:
\ 00000000 ........ DC32 SPISem
\ In segment CODE, align 4, keep-with-next
\ ??DataTable15:
\ 00000000 080002E0 DC32 0xe0020008
\ In segment CODE, align 4, keep-with-next
\ ??DataTable16:
\ 00000000 ........ DC32 SPIReviceMbox
\ In segment CODE, align 4, keep-with-next
\ ??DataTable17:
\ 00000000 000002E0 DC32 0xe0020000
150
151 /*********************************************************************************************************
152 ** End Of File
153 ********************************************************************************************************/
Maximum stack usage in bytes:
Function CSTACK
-------- ------
GetOSPrioCur 0
GetSPIFlag 16
SPIEnd 4
SPIInit 4
SPIRW 16
SPIStart 8
SPI_Exception 8
Segment part sizes:
Function/Label Bytes
-------------- -----
VICVectAddr 4
_A_PINSEL0 4
SPIReviceMbox 4
SPISem 4
UseSPITaskPro 1
SPIInit 92
GetSPIFlag 38
GetOSPrioCur 12
SPIStart 32
SPIRW 60
SPIEnd 42
cpu_sr 4
SPI_Exception 88
??DataTable13 4
??DataTable14 4
??DataTable15 4
??DataTable16 4
??DataTable17 4
Others 140
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 + -