📄 xllp_i2c.cod
字号:
; 223 : } else
00084 ea000000 b |$L947|
00088 |$L944|
; 224 : {
; 225 : reg &= ~XLLP_ICR_ACKNACK;
00088 e3c33004 bic r3, r3, #4
0008c |$L947|
; 226 : }
; 227 : I2C_regs->ICR = reg;
; 228 :
; 229 : if (XllpI2cRxFull(I2C_regs, pOSTRegs, 60) == XLLP_TRUE)
0008c e3a0203c mov r2, #0x3C
00090 e1a01009 mov r1, r9
00094 e1a00005 mov r0, r5
00098 e5853010 str r3, [r5, #0x10]
0009c eb000000 bl XllpI2cRxFull
000a0 e3500001 cmp r0, #1
000a4 0a00000a beq |$L1139|
; 232 : }
; 233 : reg = I2C_regs->IDBR & 0xFF;
000a8 e5953008 ldr r3, [r5, #8]
000ac e3540000 cmp r4, #0
000b0 e20330ff and r3, r3, #0xFF
; 234 : *bytesBuf++ = (XLLP_UINT8_T)reg;
000b4 e4c83001 strb r3, [r8], #1
000b8 1affffe7 bne |$L942|
000bc |$L1140|
; 235 : }
; 236 :
; 237 : I2C_regs->ICR &= ~(XLLP_ICR_STOP | XLLP_ICR_ACKNACK);
000bc e5953010 ldr r3, [r5, #0x10]
; 238 :
; 239 : return XLLP_FALSE;
000c0 e3a00000 mov r0, #0
000c4 e3c33006 bic r3, r3, #6
000c8 e5853010 str r3, [r5, #0x10]
; 240 : }
000cc e8bd43f0 ldmia sp!, {r4 - r9, lr}
000d0 e12fff1e bx lr
000d4 |$L1139|
; 230 : {
; 231 : return XLLP_TRUE;
000d4 e3a00001 mov r0, #1
; 240 : }
000d8 e8bd43f0 ldmia sp!, {r4 - r9, lr}
000dc e12fff1e bx lr
000e0 |$M1157|
ENDP ; |XllpI2CRead|
EXPORT |XllpPI2cRxFull|
IMPORT |XllpOstDelayMicroSeconds|
00000 AREA |.text| { |XllpPI2cRxFull| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpPI2cRxFull|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpPI2cRxFull| } ; comdat associative
|$T1176| DCD |$L1175|
DCD 0x40001701
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpPI2cRxFull| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpPI2cRxFull| PROC
; 253 : {
00000 |$L1175|
00000 e92d4070 stmdb sp!, {r4 - r6, lr}
00004 |$M1173|
00004 e1b04002 movs r4, r2
00008 e1a06001 mov r6, r1
0000c e1a05000 mov r5, r0
; 254 : XLLP_UINT32_T temp;
; 255 :
; 256 : while (timeout--)
00010 0a000009 beq |$L1165|
00014 |$L959|
; 257 : {
; 258 : temp = I2C_regs->ISR;
00014 e595e198 ldr lr, [r5, #0x198]
00018 e2444001 sub r4, r4, #1
; 259 : if ((temp & XLLP_ISR_IRF) == XLLP_ISR_IRF)
0001c e20e3080 and r3, lr, #0x80
00020 e3530080 cmp r3, #0x80
00024 0a000007 beq |$L1164|
; 263 : }
; 264 : // delay 1 ms here
; 265 : XllpOstDelayMicroSeconds(pOSTRegs, 50);
00028 e3a01032 mov r1, #0x32
0002c e1a00006 mov r0, r6
00030 eb000000 bl XllpOstDelayMicroSeconds
00034 e3540000 cmp r4, #0
00038 1afffff5 bne |$L959|
0003c |$L1165|
; 266 : }
; 267 :
; 268 : return XLLP_TRUE;
0003c e3a00001 mov r0, #1
; 269 : }
00040 e8bd4070 ldmia sp!, {r4 - r6, lr}
00044 e12fff1e bx lr
00048 |$L1164|
; 260 : {
; 261 : I2C_regs->ISR = temp | XLLP_ISR_IRF;
00048 e38e3080 orr r3, lr, #0x80
0004c e5853198 str r3, [r5, #0x198]
; 262 : return XLLP_FALSE;
00050 e3a00000 mov r0, #0
; 269 : }
00054 e8bd4070 ldmia sp!, {r4 - r6, lr}
00058 e12fff1e bx lr
0005c |$M1174|
ENDP ; |XllpPI2cRxFull|
EXPORT |XllpPI2cTxEmpty|
00000 AREA |.text| { |XllpPI2cTxEmpty| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpPI2cTxEmpty|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpPI2cTxEmpty| } ; comdat associative
|$T1193| DCD |$L1192|
DCD 0x40001c01
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpPI2cTxEmpty| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpPI2cTxEmpty| PROC
; 277 : {
00000 |$L1192|
00000 e92d4070 stmdb sp!, {r4 - r6, lr}
00004 |$M1190|
00004 e1b05002 movs r5, r2
00008 e1a06001 mov r6, r1
0000c e1a04000 mov r4, r0
; 278 : XLLP_UINT32_T temp;
; 279 :
; 280 : while (timeout--)
00010 0a000009 beq |$L1182|
00014 |$L971|
; 281 : {
; 282 : temp = I2C_regs->ISR;
00014 e5940198 ldr r0, [r4, #0x198]
00018 e2455001 sub r5, r5, #1
; 283 : if((temp & XLLP_ISR_ITE) == XLLP_ISR_ITE)
0001c e2003040 and r3, r0, #0x40
00020 e3530040 cmp r3, #0x40
00024 0a000007 beq |$L1181|
; 292 : }
; 293 : // delay here //here infect touch speed.
; 294 : XllpOstDelayMicroSeconds(pOSTRegs, 50);
00028 e3a01032 mov r1, #0x32
0002c e1a00006 mov r0, r6
00030 eb000000 bl XllpOstDelayMicroSeconds
00034 e3550000 cmp r5, #0
00038 1afffff5 bne |$L971|
0003c |$L1182|
; 295 : }
; 296 : return XLLP_TRUE;
0003c e3a00001 mov r0, #1
; 297 : }
00040 e8bd4070 ldmia sp!, {r4 - r6, lr}
00044 e12fff1e bx lr
00048 |$L1181|
; 284 : {
; 285 : //clear ITE int bit
; 286 : I2C_regs->ISR = temp | XLLP_ISR_ITE;
; 287 : if ((temp & XLLP_ISR_ALD) == XLLP_ISR_ALD)
00048 e2002020 and r2, r0, #0x20
0004c e3803040 orr r3, r0, #0x40
00050 e3520020 cmp r2, #0x20
00054 e5843198 str r3, [r4, #0x198]
; 288 : {
; 289 : I2C_regs->ISR |= XLLP_ISR_ALD;
00058 05943198 ldreq r3, [r4, #0x198]
; 290 : }
; 291 : return XLLP_FALSE;
0005c e3a00000 mov r0, #0
00060 03833020 orreq r3, r3, #0x20
00064 05843198 streq r3, [r4, #0x198]
; 297 : }
00068 e8bd4070 ldmia sp!, {r4 - r6, lr}
0006c e12fff1e bx lr
00070 |$M1191|
ENDP ; |XllpPI2cTxEmpty|
EXPORT |XllpPI2CWrite|
00000 AREA |.text| { |XllpPI2CWrite| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpPI2CWrite|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpPI2CWrite| } ; comdat associative
|$T1215| DCD |$L1214|
DCD 0x40003401
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpPI2CWrite| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpPI2CWrite| PROC
; 301 : {
00000 |$L1214|
00000 e92d43f0 stmdb sp!, {r4 - r9, lr}
00004 |$M1212|
00004 e1a08003 mov r8, r3
00008 e1a09001 mov r9, r1
0000c e1a05000 mov r5, r0
; 302 : XLLP_UINT32_T reg;
; 303 : int timer = 0;
; 304 :
; 305 : I2C_regs->IDBR = (slaveAddr << 1) & ~XLLP_IDBR_MODE;
00010 e1a02082 mov r2, r2, lsl #1
00014 e5852188 str r2, [r5, #0x188]
; 306 : reg = I2C_regs->ICR;
00018 e5954190 ldr r4, [r5, #0x190]
0001c e3a0e03d mov lr, #0x3D
00020 e24eed41 sub lr, lr, #0x41, 26
; 307 : reg |= (XLLP_ICR_START | XLLP_ICR_TB);
; 308 : reg &= ~(XLLP_ICR_STOP | XLLP_ICR_ALDIE);
; 309 : I2C_regs->ICR = reg;
; 310 :
; 311 : if (XllpPI2cTxEmpty(I2C_regs, pOSTRegs,200) == XLLP_TRUE)
00024 e004e00e and lr, r4, lr
00028 e38ee009 orr lr, lr, #9
0002c e3a020c8 mov r2, #0xC8
00030 e585e190 str lr, [r5, #0x190]
00034 eb000000 bl XllpPI2cTxEmpty
00038 e3500001 cmp r0, #1
; 312 : {
; 313 : return XLLP_TRUE;
0003c 0a000020 beq |$L1198|
; 314 : }
; 315 :
; 316 : // Send all the bytes
; 317 : while (bytesCount--)
00040 e59d401c ldr r4, [sp, #0x1C]
00044 e3540000 cmp r4, #0
00048 0a000017 beq |$L1199|
0004c e3a07a01 mov r7, #1, 20
00050 e59d6020 ldr r6, [sp, #0x20]
00054 e3877008 orr r7, r7, #8
00058 |$L992|
; 318 : {
; 319 : I2C_regs->IDBR = (XLLP_UINT32_T)(*bytesBuf++);
00058 e4d83001 ldrb r3, [r8], #1
0005c e2544001 subs r4, r4, #1
00060 e5853188 str r3, [r5, #0x188]
; 320 :
; 321 : reg = I2C_regs->ICR;
00064 e5953190 ldr r3, [r5, #0x190]
; 322 :
; 323 : reg &= ~XLLP_ICR_START; //clear start bit flag
00068 e3c33001 bic r3, r3, #1
; 324 : reg |= (XLLP_ICR_ALDIE | XLLP_ICR_TB);
0006c e1833007 orr r3, r3, r7
; 325 :
; 326 : if ((bytesCount == 0) && bSendStop)
00070 1a000002 bne |$L995|
00074 e3560000 cmp r6, #0
; 327 : reg |= XLLP_ICR_STOP;
00078 13833002 orrne r3, r3, #2
0007c 1a000000 bne |$L996|
00080 |$L995|
; 328 : else
; 329 : reg &= ~XLLP_ICR_STOP;
00080 e3c33002 bic r3, r3, #2
00084 |$L996|
; 330 :
; 331 : I2C_regs->ICR = reg;
; 332 :
; 333 : if (XllpPI2cTxEmpty(I2C_regs, pOSTRegs, 2500) == XLLP_TRUE)
00084 e3a02d27 mov r2, #0x27, 26
00088 e3822004 orr r2, r2, #4
0008c e1a01009 mov r1, r9
00090 e1a00005 mov r0, r5
00094 e5853190 str r3, [r5, #0x190]
00098 eb000000 bl XllpPI2cTxEmpty
0009c e3500001 cmp r0, #1
000a0 0a000007 beq |$L1198|
; 314 : }
; 315 :
; 316 : // Send all the bytes
; 317 : while (bytesCount--)
000a4 e3540000 cmp r4, #0
000a8 1affffea bne |$L992|
000ac |$L1199|
; 336 : }
; 337 : }
; 338 :
; 339 : // Clear the STOP bit always
; 340 : I2C_regs->ICR &= ~XLLP_ICR_STOP;
000ac e5953190 ldr r3, [r5, #0x190]
; 341 : return XLLP_FALSE;
000b0 e3a00000 mov r0, #0
000b4 e3c33002 bic r3, r3, #2
000b8 e5853190 str r3, [r5, #0x190]
; 342 : }
000bc e8bd43f0 ldmia sp!, {r4 - r9, lr}
000c0 e12fff1e bx lr
000c4 |$L1198|
; 334 : {
; 335 : return XLLP_TRUE;
000c4 e3a00001 mov r0, #1
; 342 : }
000c8 e8bd43f0 ldmia sp!, {r4 - r9, lr}
000cc e12fff1e bx lr
000d0 |$M1213|
ENDP ; |XllpPI2CWrite|
EXPORT |XllpPI2CRead|
00000 AREA |.text| { |XllpPI2CRead| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpPI2CRead|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpPI2CRead| } ; comdat associative
|$T1240| DCD |$L1239|
DCD 0x40003801
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpPI2CRead| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpPI2CRead| PROC
; 345 : {
00000 |$L1239|
00000 e92d43f0 stmdb sp!, {r4 - r9, lr}
00004 |$M1237|
00004 e1a08003 mov r8, r3
00008 e1a09001 mov r9, r1
0000c e1a05000 mov r5, r0
; 346 : XLLP_UINT32_T reg;
; 347 :
; 348 : I2C_regs->IDBR = (slaveAddr << 1) | XLLP_IDBR_MODE;
00010 e1a02082 mov r2, r2, lsl #1
00014 e3822001 orr r2, r2, #1
00018 e5852188 str r2, [r5, #0x188]
; 349 :
; 350 : reg = I2C_regs->ICR;
0001c e5954190 ldr r4, [r5, #0x190]
00020 e3a0e03d mov lr, #0x3D
00024 e24eed41 sub lr, lr, #0x41, 26
; 351 : reg |= (XLLP_ICR_START | XLLP_ICR_TB);
; 352 : reg &= ~(XLLP_ICR_STOP | XLLP_ICR_ALDIE);
; 353 : I2C_regs->ICR = reg;
; 354 :
; 355 : if (XllpPI2cTxEmpty(I2C_regs, pOSTRegs,200) == XLLP_TRUE)
00028 e004e00e and lr, r4, lr
0002c e38ee009 orr lr, lr, #9
00030 e3a020c8 mov r2, #0xC8
00034 e585e190 str lr, [r5, #0x190]
00038 eb000000 bl XllpPI2cTxEmpty
0003c e3500001 cmp r0, #1
; 356 : {
; 357 : return XLLP_TRUE;
00040 0a000023 beq |$L1220|
; 358 : }
; 359 :
; 360 : while (bytesCount--)
00044 e59d401c ldr r4, [sp, #0x1C]
00048 e3540000 cmp r4, #0
0004c 0a00001a beq |$L1221|
00050 e3a07a01 mov r7, #1, 20
00054 e59d6020 ldr r6, [sp, #0x20]
00058 e3877008 orr r7, r7, #8
0005c |$L1014|
; 361 : {
; 362 : reg = I2C_regs->ICR;
0005c e5953190 ldr r3, [r5, #0x190]
00060 e2544001 subs r4, r4, #1
; 363 : reg &= ~XLLP_ICR_START;
00064 e3c33001 bic r3, r3, #1
; 364 : reg |= XLLP_ICR_ALDIE | XLLP_ICR_TB;
00068 e1833007 orr r3, r3, r7
; 365 : if (bytesCount == 0)
0006c 1a000005 bne |$L1016|
; 366 : {
; 367 : reg |= XLLP_ICR_ACKNACK;
00070 e3833004 orr r3, r3, #4
; 368 : if (bSendStop)
00074 e3560000 cmp r6, #0
; 369 : reg |= XLLP_ICR_STOP;
00078 13833002 orrne r3, r3, #2
0007c 1a000002 bne |$L1019|
; 370 : else
; 371 : reg &= ~XLLP_ICR_STOP;
00080 e3c33002 bic r3, r3, #2
; 372 : } else
00084 ea000000 b |$L1019|
00088 |$L1016|
; 373 : {
; 374 : reg &= ~XLLP_ICR_ACKNACK;
00088 e3c33004 bic r3, r3, #4
0008c |$L1019|
; 375 : }
; 376 : I2C_regs->ICR = reg;
; 377 :
; 378 : if (XllpPI2cRxFull(I2C_regs, pOSTRegs, 600) == XLLP_TRUE)
0008c e3a02f96 mov r2, #0x96, 30
00090 e1a01009 mov r1, r9
00094 e1a00005 mov r0, r5
00098 e5853190 str r3, [r5, #0x190]
0009c eb000000 bl XllpPI2cRxFull
000a0 e3500001 cmp r0, #1
000a4 0a00000a beq |$L1220|
; 381 : }
; 382 : reg = I2C_regs->IDBR & 0xFF;
000a8 e5953188 ldr r3, [r5, #0x188]
000ac e3540000 cmp r4, #0
000b0 e20330ff and r3, r3, #0xFF
; 383 : *bytesBuf++ = (XLLP_UINT8_T)reg;
000b4 e4c83001 strb r3, [r8], #1
000b8 1affffe7 bne |$L1014|
000bc |$L1221|
; 384 : }
; 385 :
; 386 : I2C_regs->ICR &= ~(XLLP_ICR_STOP | XLLP_ICR_ACKNACK);
000bc e5953190 ldr r3, [r5, #0x190]
; 387 :
; 388 : return XLLP_FALSE;
000c0 e3a00000 mov r0, #0
000c4 e3c33006 bic r3, r3, #6
000c8 e5853190 str r3, [r5, #0x190]
; 389 : }
000cc e8bd43f0 ldmia sp!, {r4 - r9, lr}
000d0 e12fff1e bx lr
000d4 |$L1220|
; 379 : {
; 380 : return XLLP_TRUE;
000d4 e3a00001 mov r0, #1
; 389 : }
000d8 e8bd43f0 ldmia sp!, {r4 - r9, lr}
000dc e12fff1e bx lr
000e0 |$M1238|
ENDP ; |XllpPI2CRead|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -