📄 mcp2515.lst
字号:
\ McpReset:
\ 00000000 00502DE9 PUSH {R12,LR}
94 unsigned char command[4];
95
96 command[0] = RESET;
\ 00000004 C010A0E3 MOV R1,#+192
\ 00000008 0010CDE5 STRB R1,[SP, #+0]
97
98 SPI_CfgPCS(AT91C_BASE_SPI0,MCP2515_Cs);
\ 0000000C 0E10A0E3 MOV R1,#+14
\ 00000010 ........ LDR R0,??DataTable14 ;; 0xfffc8000
\ 00000014 ........ BL SPI_CfgPCS
99
100 MCP_Spi0Write ( command,1,0,0 );
\ 00000018 0030A0E3 MOV R3,#+0
\ 0000001C 0020A0E3 MOV R2,#+0
\ 00000020 0110A0E3 MOV R1,#+1
\ 00000024 0D00B0E1 MOVS R0,SP
\ 00000028 ........ BL MCP_Spi0Write
101
102 r_flag = 1;
\ 0000002C ........ LDR R0,??DataTable12 ;; r_flag
\ 00000030 0110A0E3 MOV R1,#+1
\ 00000034 0010C0E5 STRB R1,[R0, #+0]
103 }
\ 00000038 0180BDE8 POP {R0,PC} ;; return
104
105
106 //*****************************************************************************
107 //* 函数名称:MCP2515_Write
108 //* 函数功能: 写 1 字节数据到 MCP2515
109 //* 入口参数: 1.Addr : 发送寄存器地址
110 //* 2.data : 待发送的数据
111 //* MCP2515 有三个发送寄存器 地址分别是: 0x30,0x40,0x50
112 //* 返回值 : 无
113 //*****************************************************************************
\ In section .text, align 4, keep-with-next
114 void MCP2515_Write(unsigned char Addr, unsigned char data)
115 {
\ MCP2515_Write:
\ 00000000 13402DE9 PUSH {R0,R1,R4,LR}
\ 00000004 0040B0E1 MOVS R4,R0
116 unsigned char command[4];
117
118 command[0] = WRITE;
\ 00000008 0210A0E3 MOV R1,#+2
\ 0000000C 0010CDE5 STRB R1,[SP, #+0]
119 command[1] = Addr;
\ 00000010 0140CDE5 STRB R4,[SP, #+1]
120
121 SPI_CfgPCS(AT91C_BASE_SPI0,MCP2515_Cs); // 片选 MCP2515
\ 00000014 0E10A0E3 MOV R1,#+14
\ 00000018 ........ LDR R0,??DataTable14 ;; 0xfffc8000
\ 0000001C ........ BL SPI_CfgPCS
122
123 MCP_Spi0Write (command,2,&data,1);
\ 00000020 0130A0E3 MOV R3,#+1
\ 00000024 04208DE2 ADD R2,SP,#+4
\ 00000028 0210A0E3 MOV R1,#+2
\ 0000002C 0D00B0E1 MOVS R0,SP
\ 00000030 ........ BL MCP_Spi0Write
124
125 DelayF(DelayTime);
\ 00000034 0800A0E3 MOV R0,#+8
\ 00000038 ........ BL DelayF
126 }
\ 0000003C 1380BDE8 POP {R0,R1,R4,PC} ;; return
127
128
129 //*****************************************************************************
130 //* 函数名称:WriteData
131 //* 函数功能:写n字节数据到 MCP2515
132 //* 入口参数:Addr : 写到 MCP2515 寄存器地址
133 //* *data : 写数据的存放地址
134 //* data_size : 写数据的长度
135 //* 返回值 :无
136 //*****************************************************************************
\ In section .text, align 4, keep-with-next
137 void WriteData(unsigned char Addr,unsigned char* data,unsigned int data_size)
138 {
\ WriteData:
\ 00000000 70402DE9 PUSH {R4-R6,LR}
\ 00000004 08D04DE2 SUB SP,SP,#+8
\ 00000008 0050B0E1 MOVS R5,R0
\ 0000000C 0160B0E1 MOVS R6,R1
\ 00000010 0240B0E1 MOVS R4,R2
139 unsigned char command[4];
140
141 command[0] = WRITE;
\ 00000014 0210A0E3 MOV R1,#+2
\ 00000018 0010CDE5 STRB R1,[SP, #+0]
142 command[1] = Addr;
\ 0000001C 0150CDE5 STRB R5,[SP, #+1]
143
144 SPI_CfgPCS(AT91C_BASE_SPI0,MCP2515_Cs); // 片选 MCP2515
\ 00000020 0E10A0E3 MOV R1,#+14
\ 00000024 ........ LDR R0,??DataTable14 ;; 0xfffc8000
\ 00000028 ........ BL SPI_CfgPCS
145 MCP_Spi0Write(command,2,data,data_size );
\ 0000002C 0430B0E1 MOVS R3,R4
\ 00000030 0620B0E1 MOVS R2,R6
\ 00000034 0210A0E3 MOV R1,#+2
\ 00000038 0D00B0E1 MOVS R0,SP
\ 0000003C ........ BL MCP_Spi0Write
146
147 DelayF(DelayTime);
\ 00000040 0800A0E3 MOV R0,#+8
\ 00000044 ........ BL DelayF
148 }
\ 00000048 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return
149
150
151 //*****************************************************************************
152 //* 函数名称:ReadData
153 //* 函数功能:从 MCP2515 读取n字节数据
154 //* 入口参数:Addr : MCP2515 寄存器地址
155 //* *data : 读取数据后的存放地址
156 //* data_size : 读取数据的长度
157 //* 返回值 :无
158 //*****************************************************************************
\ In section .text, align 4, keep-with-next
159 void MCP2515_Read(unsigned char Addr,unsigned char databuff)
160 {
\ MCP2515_Read:
\ 00000000 13402DE9 PUSH {R0,R1,R4,LR}
\ 00000004 0040B0E1 MOVS R4,R0
161 unsigned char command[4];
162
163 command[0] = READ;
\ 00000008 0310A0E3 MOV R1,#+3
\ 0000000C 0010CDE5 STRB R1,[SP, #+0]
164 command[1] = Addr;
\ 00000010 0140CDE5 STRB R4,[SP, #+1]
165
166 while(r_flag);
\ ??MCP2515_Read_0:
\ 00000014 ........ LDR R0,??DataTable12 ;; r_flag
\ 00000018 0000D0E5 LDRB R0,[R0, #+0]
\ 0000001C 000050E3 CMP R0,#+0
\ 00000020 FBFFFF1A BNE ??MCP2515_Read_0
167 r_flag = 1;
\ 00000024 ........ LDR R0,??DataTable12 ;; r_flag
\ 00000028 0110A0E3 MOV R1,#+1
\ 0000002C 0010C0E5 STRB R1,[R0, #+0]
168
169 SPI_CfgPCS(AT91C_BASE_SPI0,MCP2515_Cs); // 片选 MCP2515
\ 00000030 0E10A0E3 MOV R1,#+14
\ 00000034 ........ LDR R0,??DataTable14 ;; 0xfffc8000
\ 00000038 ........ BL SPI_CfgPCS
170
171 MCP_Spi0Write ( command,2,&databuff,1);
\ 0000003C 0130A0E3 MOV R3,#+1
\ 00000040 04208DE2 ADD R2,SP,#+4
\ 00000044 0210A0E3 MOV R1,#+2
\ 00000048 0D00B0E1 MOVS R0,SP
\ 0000004C ........ BL MCP_Spi0Write
172 DelayF(DelayTime);
\ 00000050 0800A0E3 MOV R0,#+8
\ 00000054 ........ BL DelayF
173 }
\ 00000058 1380BDE8 POP {R0,R1,R4,PC} ;; return
174
175
176 //*****************************************************************************
177 //* 函数名称:ReadData
178 //* 函数功能:从 MCP2515 读取n字节数据
179 //* 入口参数:Addr : MCP2515 寄存器地址
180 //* *data : 读取数据后的存放地址
181 //* data_size : 读取数据的长度
182 //* 返回值 :无
183 //*****************************************************************************
\ In section .text, align 4, keep-with-next
184 void ReadData(unsigned char Addr,unsigned char* databuff,unsigned int data_size)
185 {
\ ReadData:
\ 00000000 70402DE9 PUSH {R4-R6,LR}
\ 00000004 08D04DE2 SUB SP,SP,#+8
\ 00000008 0050B0E1 MOVS R5,R0
\ 0000000C 0160B0E1 MOVS R6,R1
\ 00000010 0240B0E1 MOVS R4,R2
186 unsigned char command[4];
187
188 command[0] = READ;
\ 00000014 0310A0E3 MOV R1,#+3
\ 00000018 0010CDE5 STRB R1,[SP, #+0]
189 command[1] = Addr;
\ 0000001C 0150CDE5 STRB R5,[SP, #+1]
190
191 while(r_flag);
\ ??ReadData_0:
\ 00000020 ........ LDR R0,??DataTable12 ;; r_flag
\ 00000024 0000D0E5 LDRB R0,[R0, #+0]
\ 00000028 000050E3 CMP R0,#+0
\ 0000002C FBFFFF1A BNE ??ReadData_0
192 r_flag = 1;
\ 00000030 ........ LDR R0,??DataTable12 ;; r_flag
\ 00000034 0110A0E3 MOV R1,#+1
\ 00000038 0010C0E5 STRB R1,[R0, #+0]
193
194 SPI_CfgPCS(AT91C_BASE_SPI0,MCP2515_Cs); // 片选 MCP2515
\ 0000003C 0E10A0E3 MOV R1,#+14
\ 00000040 ........ LDR R0,??DataTable14 ;; 0xfffc8000
\ 00000044 ........ BL SPI_CfgPCS
195
196 MCP_Spi0Write ( command,2,databuff,data_size );
\ 00000048 0430B0E1 MOVS R3,R4
\ 0000004C 0620B0E1 MOVS R2,R6
\ 00000050 0210A0E3 MOV R1,#+2
\ 00000054 0D00B0E1 MOVS R0,SP
\ 00000058 ........ BL MCP_Spi0Write
197
198 DelayF(DelayTime);
\ 0000005C 0800A0E3 MOV R0,#+8
\ 00000060 ........ BL DelayF
199 }
\ 00000064 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return
200
201
202 //*****************************************************************************
203 //* 函数名称:WriteBits
204 //* 函数功能:MCP2515 位修改
205 //* 入口参数:Addr : MCP2515 寄存器地址
206 //* data : 修改的数据
207 //* mask : 屏蔽位
208 //* 返回值 :无
209 //*****************************************************************************
\ In section .text, align 4, keep-with-next
210 void WriteBits( unsigned char Addr, unsigned char data, unsigned char mask)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -