📄 xllp_pcf506.cod
字号:
00000 |$L35724|
00000 e92d41f0 stmdb sp!, {r4 - r8, lr}
00004 e24dd014 sub sp, sp, #0x14
00008 |$M35722|
00008 e1a04002 mov r4, r2
0000c e1a06000 mov r6, r0
00010 e59f31bc ldr r3, [pc, #0x1BC]
00014 e5933000 ldr r3, [r3]
00018 e58d3010 str r3, [sp, #0x10]
; 469 : unsigned char data[5];
; 470 : unsigned char val=0,i=0;
; 471 : int m=0,temp;
; 472 : unsigned char gateval=0x0;
; 473 : unsigned int writereg1=1;
; 474 : BOOL rev=0;
; 475 :
; 476 : //whether the volt is valide
; 477 : if(volt<900)
0001c e3540fe1 cmp r4, #0xE1, 30
; 478 : volt=900;
; 479 : if(volt>3600)
; 480 : volt=3600;
; 481 :
; 482 : //read the define reg number
; 483 : data[0]=0x1b;
; 484 : XllpPI2CWrite(pmuRegs->pi2c_reg_base,pmuRegs->ost_reg_base,0x08, data, 1, 0); //write reg address
00020 e5961004 ldr r1, [r6, #4]
00024 e5960010 ldr r0, [r6, #0x10]
00028 b3a04fe1 movlt r4, #0xE1, 30
0002c e3540ee1 cmp r4, #0xE1, 28
00030 e3a0e01b mov lr, #0x1B
00034 e3a07000 mov r7, #0
00038 e3a08001 mov r8, #1
0003c e28d3008 add r3, sp, #8
00040 e3a02008 mov r2, #8
00044 c3a04ee1 movgt r4, #0xE1, 28
00048 e3a05001 mov r5, #1
0004c e5cde008 strb lr, [sp, #8]
00050 e58d7004 str r7, [sp, #4]
00054 e58d8000 str r8, [sp]
00058 eb000000 bl XllpPI2CWrite
; 485 : XllpPI2CRead(pmuRegs->pi2c_reg_base,pmuRegs->ost_reg_base,0x08, &data[1], 4, 1); //read data from the reg address
0005c e5961004 ldr r1, [r6, #4]
00060 e5960010 ldr r0, [r6, #0x10]
00064 e3a0e004 mov lr, #4
00068 e28d3009 add r3, sp, #9
0006c e3a02008 mov r2, #8
00070 e58de000 str lr, [sp]
00074 e58d8004 str r8, [sp, #4]
00078 eb000000 bl XllpPI2CRead
; 486 : if(data[4] & 0x80)
0007c e5dd300c ldrb r3, [sp, #0xC]
; 487 : writereg1=0;
; 488 :
; 489 : //codec the reg value
; 490 : /*
; 491 : if(gate)
; 492 : gateval=0xC0; //when POWEN low, close this regulator
; 493 : else
; 494 : gateval=0x0;
; 495 : */
; 496 : val=(volt-900)/25;
00080 e2441fe1 sub r1, r4, #0xE1, 30
00084 e3130080 tst r3, #0x80
00088 e59f3140 ldr r3, [pc, #0x140]
0008c 13a05000 movne r5, #0
; 497 : //val+=gateval;
; 498 : if(writereg1)
00090 e3550000 cmp r5, #0
00094 e0c32391 smull r2, r3, r1, r3
00098 e1a031c3 mov r3, r3, asr #3
0009c e0833fa3 add r3, r3, r3, lsr #31
000a0 e20300ff and r0, r3, #0xFF
000a4 0a000022 beq |$L35307|
000a8 e5dd4009 ldrb r4, [sp, #9]
; 499 : {
; 500 : DEBUGMSG(1,(_T("use DCDC1\r\n")));
; 501 : temp = data[1];
; 502 : temp &= ~0x1f;
; 503 : val |= temp;
; 504 : data[0]=0x1b;
000ac e3a0301b mov r3, #0x1B
000b0 e5cd3008 strb r3, [sp, #8]
000b4 e20430e0 and r3, r4, #0xE0
000b8 e1837000 orr r7, r3, r0
; 505 : if(val>data[1]) //go up
000bc e1540007 cmp r4, r7
000c0 2a00000d bcs |$L35720|
; 506 : {
; 507 : for(m=data[1];m<=val;++m)
000c4 ca00003c bgt |$L35329|
000c8 e3a05002 mov r5, #2
000cc |$L35310|
; 508 : {
; 509 : data[1] = m;
; 510 : rev = XllpPI2CWrite(pmuRegs->pi2c_reg_base,pmuRegs->ost_reg_base,0x08, data, 2, 1);
000cc e5961004 ldr r1, [r6, #4]
000d0 e5960010 ldr r0, [r6, #0x10]
000d4 e28d3008 add r3, sp, #8
000d8 e3a02008 mov r2, #8
000dc e5cd4009 strb r4, [sp, #9]
000e0 e58d8004 str r8, [sp, #4]
000e4 e58d5000 str r5, [sp]
000e8 eb000000 bl XllpPI2CWrite
000ec e2844001 add r4, r4, #1
000f0 e1540007 cmp r4, r7
000f4 dafffff4 ble |$L35310|
; 511 : DEBUGMSG(1,(_T("DCDC1=%d\r\n"),m));
; 512 : }
; 513 : }
; 514 : else //go down
000f8 ea00002f b |$L35329|
000fc |$L35720|
; 515 : {
; 516 : for(m=data[1];m>=val;--m)
000fc ba00002e blt |$L35329|
00100 e3a05002 mov r5, #2
00104 |$L35315|
; 517 : {
; 518 : data[1] = m;
; 519 : rev = XllpPI2CWrite(pmuRegs->pi2c_reg_base,pmuRegs->ost_reg_base,0x08, data, 2, 1);
00104 e5961004 ldr r1, [r6, #4]
00108 e5960010 ldr r0, [r6, #0x10]
0010c e28d3008 add r3, sp, #8
00110 e3a02008 mov r2, #8
00114 e5cd4009 strb r4, [sp, #9]
00118 e58d8004 str r8, [sp, #4]
0011c e58d5000 str r5, [sp]
00120 eb000000 bl XllpPI2CWrite
00124 e2444001 sub r4, r4, #1
00128 e1540007 cmp r4, r7
0012c aafffff4 bge |$L35315|
; 520 : DEBUGMSG(1,(_T("DCDC1=%d\r\n"),m));
; 521 : }
; 522 : }
; 523 : }
; 524 : else
00130 ea000021 b |$L35329|
00134 |$L35307|
00134 e5dd400a ldrb r4, [sp, #0xA]
; 525 : {
; 526 : DEBUGMSG(1,(_T("use DCDC2\r\n")));
; 527 : temp = data[2];
; 528 : temp &= ~0x1f;
; 529 : val |= temp;
; 530 : data[0]=0x1c;
00138 e3a0301c mov r3, #0x1C
0013c e5cd3008 strb r3, [sp, #8]
00140 e20430e0 and r3, r4, #0xE0
00144 e1837000 orr r7, r3, r0
; 531 : if(val>data[2]) //go up
00148 e1540007 cmp r4, r7
0014c 2a00000d bcs |$L35721|
; 532 : {
; 533 : for(m=data[2];m<=val;++m)
00150 ca000019 bgt |$L35329|
00154 e3a05002 mov r5, #2
00158 |$L35322|
; 534 : {
; 535 : data[1] = m;
; 536 : rev = XllpPI2CWrite(pmuRegs->pi2c_reg_base,pmuRegs->ost_reg_base,0x08, data, 2, 1);
00158 e5961004 ldr r1, [r6, #4]
0015c e5960010 ldr r0, [r6, #0x10]
00160 e28d3008 add r3, sp, #8
00164 e3a02008 mov r2, #8
00168 e5cd4009 strb r4, [sp, #9]
0016c e58d8004 str r8, [sp, #4]
00170 e58d5000 str r5, [sp]
00174 eb000000 bl XllpPI2CWrite
00178 e2844001 add r4, r4, #1
0017c e1540007 cmp r4, r7
00180 dafffff4 ble |$L35322|
; 537 : DEBUGMSG(1,(_T("DCDC2=%d\r\n"),m));
; 538 : }
; 539 : }
; 540 : else //go down
00184 ea00000c b |$L35329|
00188 |$L35721|
; 541 : {
; 542 : for(m=data[2];m>=val;--m)
00188 ba00000b blt |$L35329|
0018c e3a05002 mov r5, #2
00190 |$L35327|
; 543 : {
; 544 : data[1] = m;
; 545 : rev = XllpPI2CWrite(pmuRegs->pi2c_reg_base,pmuRegs->ost_reg_base,0x08, data, 2, 1);
00190 e5961004 ldr r1, [r6, #4]
00194 e5960010 ldr r0, [r6, #0x10]
00198 e28d3008 add r3, sp, #8
0019c e3a02008 mov r2, #8
001a0 e5cd4009 strb r4, [sp, #9]
001a4 e58d8004 str r8, [sp, #4]
001a8 e58d5000 str r5, [sp]
001ac eb000000 bl XllpPI2CWrite
001b0 e2444001 sub r4, r4, #1
001b4 e1540007 cmp r4, r7
001b8 aafffff4 bge |$L35327|
001bc |$L35329|
; 468 : {
001bc e59d0010 ldr r0, [sp, #0x10]
001c0 eb000000 bl __security_check_cookie
; 546 : DEBUGMSG(1,(_T("DCDC2=%d\r\n"),m));
; 547 : }
; 548 : }
; 549 : }
; 550 : return;
; 551 : }
001c4 e28dd014 add sp, sp, #0x14
001c8 e8bd41f0 ldmia sp!, {r4 - r8, lr}
001cc e12fff1e bx lr
001d0 |$L35727|
001d0 51eb851f DCD 0x51eb851f
001d4 00000000 DCD |__security_cookie|
001d8 |$M35723|
ENDP ; |Pcf50606DCD|
EXPORT |Pcf50606DCDMod|
00000 AREA |.text| { |Pcf50606DCDMod| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$Pcf50606DCDMod|, PDATA, SELECTION=5, ASSOC=|.text| { |Pcf50606DCDMod| } ; comdat associative
|$T35739| DCD |$L35738|
DCD 0x40003902
; Function compile flags: /Ogsy
00000 AREA |.text| { |Pcf50606DCDMod| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |Pcf50606DCDMod| PROC
; 559 : {
00000 |$L35738|
00000 e92d41f0 stmdb sp!, {r4 - r8, lr}
00004 e24dd00c sub sp, sp, #0xC
00008 |$M35736|
00008 e1a06001 mov r6, r1
0000c e1a04000 mov r4, r0
; 560 : unsigned char data[4];
; 561 : unsigned char val=0;
; 562 : unsigned int writereg1=1;
; 563 :
; 564 : //read the define reg number
; 565 : data[0]=0x1b;
; 566 : XllpPI2CWrite(pmuRegs->pi2c_reg_base,pmuRegs->ost_reg_base,0x08, data, 1, 0); //write reg address
00010 e5941004 ldr r1, [r4, #4]
00014 e5940010 ldr r0, [r4, #0x10]
00018 e3a0e01b mov lr, #0x1B
0001c e3a07000 mov r7, #0
00020 e3a08001 mov r8, #1
00024 e28d3008 add r3, sp, #8
00028 e3a02008 mov r2, #8
0002c e3a05001 mov r5, #1
00030 e5cde008 strb lr, [sp, #8]
00034 e58d7004 str r7, [sp, #4]
00038 e58d8000 str r8, [sp]
0003c eb000000 bl XllpPI2CWrite
; 567 : XllpPI2CRead(pmuRegs->pi2c_reg_base,pmuRegs->ost_reg_base,0x08, data, 4, 1); //read data from the reg address
00040 e5941004 ldr r1, [r4, #4]
00044 e5940010 ldr r0, [r4, #0x10]
00048 e3a0e004 mov lr, #4
0004c e28d3008 add r3, sp, #8
00050 e3a02008 mov r2, #8
00054 e58de000 str lr, [sp]
00058 e58d8004 str r8, [sp, #4]
0005c eb000000 bl XllpPI2CRead
; 568 : if(data[3] & 0x80)
00060 e5dd300b ldrb r3, [sp, #0xB]
00064 e3130080 tst r3, #0x80
00068 0a000013 beq |$L35730|
; 575 : val=(data[1]&0x1f)+(mode&0xe0);
0006c e5dd3009 ldrb r3, [sp, #9]
00070 e3a05000 mov r5, #0
00074 |$L35735|
00074 e203301f and r3, r3, #0x1F
00078 e3c6201f bic r2, r6, #0x1F
0007c e1823003 orr r3, r2, r3
00080 e20330ff and r3, r3, #0xFF
; 576 : data[1]=val;
; 577 : if(writereg1)
; 578 : {
; 579 : data[0]=0x1b;
; 580 : XllpPI2CWrite(pmuRegs->pi2c_reg_base,pmuRegs->ost_reg_base,0x08, data, 2, 1);
00084 e5941004 ldr r1, [r4, #4]
00088 e5940010 ldr r0, [r4, #0x10]
0008c e5cd3009 strb r3, [sp, #9]
00090 e28d3008 add r3, sp, #8
00094 e3550000 cmp r5, #0
00098 e3a02008 mov r2, #8
0009c e3a04002 mov r4, #2
000a0 0a000007 beq |$L35342|
000a4 e3a0e01b mov lr, #0x1B
000a8 e5cde008 strb lr, [sp, #8]
000ac e58d8004 str r8, [sp, #4]
000b0 e58d4000 str r4, [sp]
000b4 eb000000 bl XllpPI2CWrite
; 581 : }else
000b8 ea000006 b |$L35343|
000bc |$L35730|
; 569 : writereg1=0;
; 570 :
; 571 : //codec the reg value
; 572 : if(writereg1)
; 573 : val=(data[0]&0x1f)+(mode&0xe0);
000bc e5dd3008 ldrb r3, [sp, #8]
; 574 : else
000c0 eaffffeb b |$L35735|
000c4 |$L35342|
; 582 : {
; 583 : data[0]=0x1c;
; 584 : XllpPI2CWrite(pmuRegs->pi2c_reg_base,pmuRegs->ost_reg_base,0x08, data, 2, 1);
000c4 e3a0e01c mov lr, #0x1C
000c8 e5cde008 strb lr, [sp, #8]
000cc e58d8004 str r8, [sp, #4]
000d0 e58d4000 str r4, [sp]
000d4 eb000000 bl XllpPI2CWrite
000d8 |$L35343|
; 585 : }
; 586 : return;
; 587 : }
000d8 e28dd00c add sp, sp, #0xC
000dc e8bd41f0 ldmia sp!, {r4 - r8, lr}
000e0 e12fff1e bx lr
000e4 |$M35737|
ENDP ; |Pcf50606DCDMod|
EXPORT |Pcf50606DCDE|
00000 AREA |.text| { |Pcf50606DCDE| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$Pcf50606DCDE|, PDATA, SELECTION=5, ASSOC=|.text| { |Pcf50606DCDE| } ; comdat associative
|$T35750| DCD |$L35749|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -