📄 bsp_i2c.lst
字号:
\ 000000C4 004080E5 STR R4,[R0, #+0]
241 I2C_Count = count;
\ 000000C8 ........ LDR R0,??DataTable63 ;; I2C_Count
\ 000000CC 0050C0E5 STRB R5,[R0, #+0]
242
243 I20CONSET = I2CON_STA
244 | I2CON_AA;
\ 000000D0 E004A0E3 MOV R0,#-536870912
\ 000000D4 700B80E3 ORR R0,R0,#0x1C000
\ 000000D8 2410A0E3 MOV R1,#+36
\ 000000DC 001080E5 STR R1,[R0, #+0]
245
246
247 VICIntEnable = (1 << VIC_I2C0); /* Enable the interrupt source */
\ 000000E0 EF00E0E3 MVN R0,#+239
\ 000000E4 F00EC0E3 BIC R0,R0,#0xF00
\ 000000E8 801FA0E3 MOV R1,#+512
\ 000000EC 001080E5 STR R1,[R0, #+0]
248 OSSemPend(I2C_SemWait, 0, &err); /* Wait until complete */
\ 000000F0 0D20B0E1 MOVS R2,SP
\ 000000F4 0010A0E3 MOV R1,#+0
\ 000000F8 ........ LDR R0,??DataTable65 ;; I2C_SemWait
\ 000000FC 000090E5 LDR R0,[R0, #+0]
\ 00000100 ........ _BLF OSSemPend,??OSSemPend??rA
249
250
251 OSSemPost(I2C_SemBusy); /* Free I2C */
\ 00000104 ........ LDR R0,??DataTable28 ;; I2C_SemBusy
\ 00000108 000090E5 LDR R0,[R0, #+0]
\ 0000010C ........ _BLF OSSemPost,??OSSemPost??rA
252 }
\ 00000110 08D08DE2 ADD SP,SP,#+8 ;; stack cleaning
\ 00000114 3080BDE8 POP {R4,R5,PC} ;; return
253
254 /*
255 *********************************************************************************************************
256 * I2C_Write()
257 *
258 * Description : This function writes to the I2C bus.
259 *
260 * Arguements : p_buf is a pointer to the buffer storing the data to be written
261 * count is the number of bytes to write
262 *
263 * Returns : None
264 *********************************************************************************************************
265 */
266
\ In segment CODE, align 4, keep-with-next
267 void I2C_Write (CPU_INT08U *p_buf, CPU_INT08U count)
268 {
\ I2C_Write:
\ 00000000 30402DE9 PUSH {R4,R5,LR}
\ 00000004 04D04DE2 SUB SP,SP,#+4
\ 00000008 0040B0E1 MOVS R4,R0
\ 0000000C 0150B0E1 MOVS R5,R1
269 CPU_INT08U err;
270
271
272 OSSemPend(I2C_SemBusy, 0, &err); /* Wait until I2C is free */
\ 00000010 0D20B0E1 MOVS R2,SP
\ 00000014 0010A0E3 MOV R1,#+0
\ 00000018 ........ LDR R0,??DataTable28 ;; I2C_SemBusy
\ 0000001C 000090E5 LDR R0,[R0, #+0]
\ 00000020 ........ _BLF OSSemPend,??OSSemPend??rA
273
274 I20CONCLR = I2CON_I2EN
275 | I2CON_STA
276 | I2CON_SI
277 | I2CON_AA;
\ 00000024 ........ LDR R0,??DataTable66 ;; 0xffffffffe001c018
\ 00000028 6C10A0E3 MOV R1,#+108
\ 0000002C 001080E5 STR R1,[R0, #+0]
278
279 I20CONSET = I2CON_I2EN;
\ 00000030 E004A0E3 MOV R0,#-536870912
\ 00000034 700B80E3 ORR R0,R0,#0x1C000
\ 00000038 4010A0E3 MOV R1,#+64
\ 0000003C 001080E5 STR R1,[R0, #+0]
280
281 I2C_Address = (PCA9532_ADDRESS & 0xFE); /* Clear lower bit of address */
\ 00000040 ........ LDR R0,??DataTable29 ;; I2C_Address
\ 00000044 C010A0E3 MOV R1,#+192
\ 00000048 0010C0E5 STRB R1,[R0, #+0]
282 I2C_BufPtr = p_buf;
\ 0000004C ........ LDR R0,??DataTable61 ;; I2C_BufPtr
\ 00000050 004080E5 STR R4,[R0, #+0]
283 I2C_Count = count;
\ 00000054 ........ LDR R0,??DataTable63 ;; I2C_Count
\ 00000058 0050C0E5 STRB R5,[R0, #+0]
284
285 I20CONSET = I2CON_STA
286 | I2CON_AA;
\ 0000005C E004A0E3 MOV R0,#-536870912
\ 00000060 700B80E3 ORR R0,R0,#0x1C000
\ 00000064 2410A0E3 MOV R1,#+36
\ 00000068 001080E5 STR R1,[R0, #+0]
287
288 VICIntEnable = (1 << VIC_I2C0); /* Enable the interrupt source */
\ 0000006C EF00E0E3 MVN R0,#+239
\ 00000070 F00EC0E3 BIC R0,R0,#0xF00
\ 00000074 801FA0E3 MOV R1,#+512
\ 00000078 001080E5 STR R1,[R0, #+0]
289 OSSemPend(I2C_SemWait, 0, &err); /* Wait until complete */
\ 0000007C 0D20B0E1 MOVS R2,SP
\ 00000080 0010A0E3 MOV R1,#+0
\ 00000084 ........ LDR R0,??DataTable65 ;; I2C_SemWait
\ 00000088 000090E5 LDR R0,[R0, #+0]
\ 0000008C ........ _BLF OSSemPend,??OSSemPend??rA
290
291 OSSemPost(I2C_SemBusy); /* Free I2C */
\ 00000090 ........ LDR R0,??DataTable28 ;; I2C_SemBusy
\ 00000094 000090E5 LDR R0,[R0, #+0]
\ 00000098 ........ _BLF OSSemPost,??OSSemPost??rA
292 }
\ 0000009C 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning
\ 000000A0 3080BDE8 POP {R4,R5,PC} ;; return
293
294 /*
295 *********************************************************************************************************
296 * I2C_ISR_Handler()
297 *
298 * Description : This function is the I2C ISR handler.
299 *
300 * Arguements : None
301 *
302 * Returns : None
303 *********************************************************************************************************
304 */
305
\ In segment CODE, align 4, keep-with-next
306 void I2C_ISR_Handler (void)
307 {
\ I2C_ISR_Handler:
\ 00000000 00402DE9 PUSH {LR}
308 CPU_INT32U status;
309 CPU_INT32U temp;
310
311
312 status = I20STAT;
\ 00000004 4E02A0E3 MOV R0,#-536870908
\ 00000008 700B80E3 ORR R0,R0,#0x1C000
\ 0000000C 000090E5 LDR R0,[R0, #+0]
313 temp = 0;
\ 00000010 0010A0E3 MOV R1,#+0
314
315 switch (status & 0xF8) {
\ 00000014 F80010E2 ANDS R0,R0,#0xF8
\ 00000018 080050E3 CMP R0,#+8
\ 0000001C 1400000A BEQ ??I2C_ISR_Handler_0
\ 00000020 100050E3 CMP R0,#+16
\ 00000024 1200000A BEQ ??I2C_ISR_Handler_0
\ 00000028 180050E3 CMP R0,#+24
\ 0000002C 1900000A BEQ ??I2C_ISR_Handler_1
\ 00000030 200050E3 CMP R0,#+32
\ 00000034 5200000A BEQ ??I2C_ISR_Handler_2
\ 00000038 280050E3 CMP R0,#+40
\ 0000003C 2900000A BEQ ??I2C_ISR_Handler_3
\ 00000040 300050E3 CMP R0,#+48
\ 00000044 4E00000A BEQ ??I2C_ISR_Handler_2
\ 00000048 380050E3 CMP R0,#+56
\ 0000004C 5B00000A BEQ ??I2C_ISR_Handler_4
\ 00000050 400050E3 CMP R0,#+64
\ 00000054 6400000A BEQ ??I2C_ISR_Handler_5
\ 00000058 480050E3 CMP R0,#+72
\ 0000005C 4800000A BEQ ??I2C_ISR_Handler_2
\ 00000060 500050E3 CMP R0,#+80
\ 00000064 7000000A BEQ ??I2C_ISR_Handler_6
\ 00000068 580050E3 CMP R0,#+88
\ 0000006C 8900000A BEQ ??I2C_ISR_Handler_7
\ 00000070 A20000EA B ??I2C_ISR_Handler_8
316
317 case I2STAT_START:
318 case I2STAT_REPEATED_START:
319 I20DAT = I2C_Address;
\ ??I2C_ISR_Handler_0:
\ 00000074 8E02A0E3 MOV R0,#-536870904
\ 00000078 700B80E3 ORR R0,R0,#0x1C000
\ 0000007C ........ LDR R1,??DataTable29 ;; I2C_Address
\ 00000080 0010D1E5 LDRB R1,[R1, #+0]
\ 00000084 001080E5 STR R1,[R0, #+0]
320 I20CONCLR = I2CON_STA | I2CON_SI;
\ 00000088 ........ LDR R0,??DataTable66 ;; 0xffffffffe001c018
\ 0000008C 2810A0E3 MOV R1,#+40
\ 00000090 001080E5 STR R1,[R0, #+0]
\ 00000094 9C0000EA B ??I2C_ISR_Handler_9
321 break;
322
323 case I2STAT_SLA_W_ACK:
324 temp = *I2C_BufPtr;
\ ??I2C_ISR_Handler_1:
\ 00000098 ........ LDR R0,??DataTable61 ;; I2C_BufPtr
\ 0000009C 000090E5 LDR R0,[R0, #+0]
\ 000000A0 0010D0E5 LDRB R1,[R0, #+0]
325 I20DAT = temp;
\ 000000A4 8E02A0E3 MOV R0,#-536870904
\ 000000A8 700B80E3 ORR R0,R0,#0x1C000
\ 000000AC 001080E5 STR R1,[R0, #+0]
326 I2C_BufPtr += 1;
\ 000000B0 ........ LDR R0,??DataTable61 ;; I2C_BufPtr
\ 000000B4 ........ LDR R1,??DataTable61 ;; I2C_BufPtr
\ 000000B8 001091E5 LDR R1,[R1, #+0]
\ 000000BC 011091E2 ADDS R1,R1,#+1
\ 000000C0 001080E5 STR R1,[R0, #+0]
327 I2C_Count -= 1;
\ 000000C4 ........ LDR R0,??DataTable63 ;; I2C_Count
\ 000000C8 ........ LDR R1,??DataTable63 ;; I2C_Count
\ 000000CC 0010D1E5 LDRB R1,[R1, #+0]
\ 000000D0 011051E2 SUBS R1,R1,#+1
\ 000000D4 0010C0E5 STRB R1,[R0, #+0]
328 I20CONCLR = I2CON_STA | I2CON_SI;
\ 000000D8 ........ LDR R0,??DataTable66 ;; 0xffffffffe001c018
\ 000000DC 2810A0E3 MOV R1,#+40
\ 000000E0 001080E5 STR R1,[R0, #+0]
\ 000000E4 880000EA B ??I2C_ISR_Handler_9
329 break;
330
331 case I2STAT_DAT_T_ACK:
332 if (I2C_Count > 0) {
\ ??I2C_ISR_Handler_3:
\ 000000E8 ........ LDR R0,??DataTable63 ;; I2C_Count
\ 000000EC 0000D0E5 LDRB R0,[R0, #+0]
\ 000000F0 010050E3 CMP R0,#+1
\ 000000F4 1300003A BCC ??I2C_ISR_Handler_10
333 temp = *I2C_BufPtr;
\ 000000F8 ........ LDR R0,??DataTable61 ;; I2C_BufPtr
\ 000000FC 000090E5 LDR R0,[R0, #+0]
\ 00000100 0010D0E5 LDRB R1,[R0, #+0]
334 I20DAT = temp;
\ 00000104 8E02A0E3 MOV R0,#-536870904
\ 00000108 700B80E3 ORR R0,R0,#0x1C000
\ 0000010C 001080E5 STR R1,[R0, #+0]
335 I2C_BufPtr += 1;
\ 00000110 ........ LDR R0,??DataTable61 ;; I2C_BufPtr
\ 00000114 ........ LDR R1,??DataTable61 ;; I2C_BufPtr
\ 00000118 001091E5 LDR R1,[R1, #+0]
\ 0000011C 011091E2 ADDS R1,R1,#+1
\ 00000120 001080E5 STR R1,[R0, #+0]
336 I2C_Count -= 1;
\ 00000124 ........ LDR R0,??DataTable63 ;; I2C_Count
\ 00000128 ........ LDR R1,??DataTable63 ;; I2C_Count
\ 0000012C 0010D1E5 LDRB R1,[R1, #+0]
\ 00000130 011051E2 SUBS R1,R1,#+1
\ 00000134 0010C0E5 STRB R1,[R0, #+0]
337 I20CONCLR = I2CON_STA | I2CON_SI;
\ 00000138 ........ LDR R0,??DataTable66 ;; 0xffffffffe001c018
\ 0000013C 2810A0E3 MOV R1,#+40
\ 00000140 001080E5 STR R1,[R0, #+0]
\ 00000144 700000EA B ??I2C_ISR_Handler_9
338 } else {
339 I20CONCLR = I2CON_STA | I2CON_SI;
\ ??I2C_ISR_Handler_10:
\ 00000148 ........ LDR R0,??DataTable66 ;; 0xffffffffe001c018
\ 0000014C 2810A0E3 MOV R1,#+40
\ 00000150 001080E5 STR R1,[R0, #+0]
340 I20CONSET = I2CON_STO;
\ 00000154 E004A0E3 MOV R0,#-536870912
\ 00000158 700B80E3 ORR R0,R0,#0x1C000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -