DarkBear Пионер дизассемблинга Телефонист Откуда: Россия, Ульяновск С нами с: 30.01.2002 Плодовитость: 86
Рейтинг
Подано 125 (120/5) голосов
|
Формула коррекции Сенсоров
|
0000 SpgY03V
0002 SpgX0
0004 SpgY04V
0006 SpgDelta
Формула вычисления VBatt:
VBatt = ((0 - (VBattDSP - SpgY04V)) * SpgDelta)
_______________________________________ + SpgX0
(SpgY03V - SpgY04V)
где VBattDSP это результат измерения по ветке DSP - ADC EGaim.
Теперь нужно продумать алгоритм измерения и формулы вычисления констант при данном VBatt из телефона и реальным значением измеряемым внешним вольтметром!
У кого будут какие соображения?
Куски этого алгоритма из C35i v24
-------------------------------------------
seg000 : D3B63A ; --------------- S U B R O U T I N E ---------------------------------------
seg000 : D3B63A
seg000 : D3B63A
seg000 : D3B63A InitSensors: ; CODE XREF: InitAll+10CP
seg000 : D3B63A mov [-r0], r9
seg000 : D3B63C mov [-r0], r8
seg000 : D3B63E mov r12, #43h ; 'C' ; 67-й блок EELite
seg000 : D3B642 calls 0D3h, GetEELiteBlock_R5R4
seg000 : D3B646 mov DPP0, #43h ; 'C'
seg000 : D3B64A nop
seg000 : D3B64C mov SensorsEEliteOffset, r4 ; Block Offset
seg000 : D3B650 mov SensorsEElitePage, r5 ; Block Page
seg000 : D3B654 calls 0D3h, R5_R4_10ED38
seg000 : D3B658 mov r8, r4
seg000 : D3B65A mov r9, r5
seg000 : D3B65C extp r9, #1
seg000 : D3B65E mov r12, [r8]
seg000 : D3B660 mov DPP0, #43h ; 'C'
seg000 : D3B664 nop
seg000 : D3B666 mov word_10F34A, r12
seg000 : D3B66A extp r9, #1
seg000 : D3B66C mov r13, [r8+2]
seg000 : D3B670 mov word_10F348, r13 ; VBattDSP
seg000 : D3B674 extp r9, #1
seg000 : D3B676 mov r14, [r8+4]
seg000 : D3B67A mov word_10F34E, r14
seg000 : D3B67E mov r12, r13
seg000 : D3B680 calls 0D3h, CorrectVBatt
seg000 : D3B684 mov DPP0, #43h ; 'C'
seg000 : D3B688 mov r13, #0
seg000 : D3B68A mov VBattMiddle, r4
seg000 : D3B68E mov r12, word_10F34A
seg000 : D3B692 calls 0D3h, CorrectTemp
seg000 : D3B696 mov DPP0, #43h ; 'C'
seg000 : D3B69A mov r13, #2
seg000 : D3B69C mov BattTemp, r4
seg000 : D3B6A0 mov r12, word_10F34E
seg000 : D3B6A4 calls 0D3h, CorrectTemp
seg000 : D3B6A8 mov DPP0, #43h ; 'C'
seg000 : D3B6AC nop
seg000 : D3B6AE mov VCXOTemp, r4
seg000 : D3B6B2 mov r12, VBattMiddle
seg000 : D3B6B6 calls 0D4h, sub_D473F8
seg000 : D3B6BA mov DPP0, #43h ; 'C'
seg000 : D3B6BE mov r13, #0
seg000 : D3B6C0 mov r12, BattTemp
seg000 : D3B6C4 calls 0D4h, sub_D473E0
seg000 : D3B6C8 mov DPP0, #43h ; 'C'
seg000 : D3B6CC mov r13, #2
seg000 : D3B6CE mov r12, VCXOTemp
seg000 : D3B6D2 calls 0D4h, sub_D473E0
seg000 : D3B6D6 mov r8, [r0+]
seg000 : D3B6D8 mov r9, [r0+]
seg000 : D3B6DA rets
seg000 : D3B6DA ; End of function InitSensors
seg000 : D3BA5E CorrectVBatt: ; CODE XREF: InitSensors+46P
seg000 : D3BA5E ; seg000 : D3B858P ...
seg000 : D3BA5E mov DPP0, #43h ; 'C'
seg000 : D3BA62 mov [-r0], r8
seg000 : D3BA64 mov r13, SensorsEEliteOffset
seg000 : D3BA68 mov r14, SensorsEElitePage
seg000 : D3BA6C add r13, #4
seg000 : D3BA6E extp r14, #1
seg000 : D3BA70 mov r1, [r13] ; R1 = 0004 SpgY04V
seg000 : D3BA72 mov r4, r12 ; R4 = R12 (VBattDSP)
seg000 : D3BA74 sub r4, r1 ; R4 = R4 - R1
seg000 : D3BA76 neg r4 ; R4 = 0 - R4
seg000 : D3BA78 mov r12, SensorsEEliteOffset
seg000 : D3BA7C mov r1, SensorsEElitePage
seg000 : D3BA80 extp r1, #1
seg000 : D3BA82 mov r2, [r12+6] ; R2 = 0006 SpgDelta
seg000 : D3BA86 mul r4, r2 ; MD = R4 * R2
seg000 : D3BA88 mov r5, MDH ; MDH
seg000 : D3BA8C mov r4, MDL ; MDL
seg000 : D3BA90 mov r12, SensorsEEliteOffset
seg000 : D3BA94 mov r1, SensorsEElitePage
seg000 : D3BA98 extp r1, #1
seg000 : D3BA9A mov r12, [r12] ; R12 = 0000 SpgY03V
seg000 : D3BA9C extp r14, #1
seg000 : D3BA9E mov r13, [r13] ; R13 = 0004 SpgY04V
seg000 : D3BAA0 sub r12, r13 ; R12 = R12 - R13
seg000 : D3BAA2 mov r10, r12 ; R10 = R12
seg000 : D3BAA4 ashr r10, #0Fh ; R10 >> 15, арифметический!
seg000 : D3BAA6 mov r11, r10 ; R11 заполняем старшим битом R10 - Знак!
seg000 : D3BAA8 mov r10, r12 ; R5:R4 Первое 32 число, R11:R10 второе 32 число, оба со знаком
seg000 : D3BAAA calls 0ECh, DivSigned_32bit_R5R4_on_R11R10
seg000 : D3BAAE mov r15, r4
seg000 : D3BAB0 mov DPP0, #43h ; 'C'
seg000 : D3BAB4 mov r8, r5
seg000 : D3BAB6 mov r12, SensorsEEliteOffset
seg000 : D3BABA mov r13, SensorsEElitePage
seg000 : D3BABE extp r13, #1
seg000 : D3BAC0 mov r14, [r12+2] ; R14 = 0002 SpgX0
seg000 : D3BAC4 mov r12, r14 ; R12 = R14
seg000 : D3BAC6 ashr r12, #0Fh ; R12 >> 15, арифметический!
seg000 : D3BAC8 add r15, r14 ; R15 + = R14
seg000 : D3BACA addc r8, r12 ; R8 = R8 + R12 + Carry
seg000 : D3BACC mov r4, r15 ; В R4 результирующее напряжение в милливольтах
seg000 : D3BACE mov r8, [r0+] ; R8 Игнорируется...
seg000 : D3BAD0 rets
seg000 : D3BAD0 ; End of function CorrectVBatt
|