changeset 262:db000ea183a5

pirelli/fw-disasm: CV charging analyzed
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 26 Dec 2017 12:26:23 +0000
parents 61e0be63559c
children 7b679943b57d
files pirelli/fw-disasm
diffstat 1 files changed, 423 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/pirelli/fw-disasm	Tue Dec 26 07:13:21 2017 +0000
+++ b/pirelli/fw-disasm	Tue Dec 26 12:26:23 2017 +0000
@@ -1291,6 +1291,426 @@
   2e29a8:	b002		add	sp, #8
   2e29aa:	bd70		pop	{r4, r5, r6, pc}
 
+$pwr_CI_charge_timer_process:
+  2e29e4:	b510		push	{r4, lr}
+  2e29e6:	b082		sub	sp, #8
+  2e29e8:	f066 fc90	bl	0x34930c	; $ABB_Read_Status
+  2e29ec:	09c0		lsr	r0, r0, #7
+  2e29ee:	d324		bcc	0x2e2a3a	; return
+; charging power still present
+  2e29f0:	4cec		ldr	r4, =0x1774e70	; via 0x2e2da4
+  2e29f2:	6820		ldr	r0, [r4, #0]
+  2e29f4:	8f81		ldrh	r1, [r0, #60]	; 0x3c
+  2e29f6:	8f40		ldrh	r0, [r0, #58]	; 0x3a
+  2e29f8:	0840		lsr	r0, r0, #1
+  2e29fa:	4281		cmp	r1, r0
+  2e29fc:	dd08		ble	0x2e2a10
+; taking too long?
+  2e29fe:	f7ff fbdd	bl	0x2e21bc
+  2e2a02:	2800		cmp	r0, #0
+  2e2a04:	d104		bne	0x2e2a10
+  2e2a06:	6820		ldr	r0, [r4, #0]
+  2e2a08:	303c		add	r0, #60	; 0x3c
+  2e2a0a:	8801		ldrh	r1, [r0, #0]
+  2e2a0c:	3901		sub	r1, #1
+  2e2a0e:	e003		b	0x2e2a18
+; no time issue
+  2e2a10:	6820		ldr	r0, [r4, #0]
+  2e2a12:	303c		add	r0, #60	; 0x3c
+  2e2a14:	8801		ldrh	r1, [r0, #0]
+  2e2a16:	3101		add	r1, #1
+  2e2a18:	8001		strh	r1, [r0, #0]
+  2e2a1a:	6820		ldr	r0, [r4, #0]
+  2e2a1c:	8f81		ldrh	r1, [r0, #60]	; 0x3c
+  2e2a1e:	8f40		ldrh	r0, [r0, #58]	; 0x3a
+  2e2a20:	4281		cmp	r1, r0
+  2e2a22:	dd08		ble	0x2e2a36
+  2e2a24:	48e9		ldr	r0, =0xa0020	; via 0x2e2dcc
+  2e2a26:	9000		str	r0, [sp, #0]
+  2e2a28:	a02e		add	r0, pc, #184	; 0xb8
+  2e2a2a:	211d		mov	r1, #29	; 0x1d
+  2e2a2c:	2200		mov	r2, #0
+  2e2a2e:	43d2		mvn	r2, r2
+  2e2a30:	2302		mov	r3, #2
+  2e2a32:	f0f8 f8ff	bl	0x3dac34
+  2e2a36:	f04b f903	bl	0x32dc40	; $pwr_get_battery_temperature
+  2e2a3a:	b002		add	sp, #8
+  2e2a3c:	bd10		pop	{r4, pc}
+  2e2a3e:	46c0		nop			(mov r8, r8)
+
+$pwr_CV_charge_process:
+  2e2b14:	b5f0		push	{r4, r5, r6, r7, lr}
+  2e2b16:	4640		mov	r0, r8
+  2e2b18:	4649		mov	r1, r9
+  2e2b1a:	4652		mov	r2, r10
+  2e2b1c:	465b		mov	r3, r11
+  2e2b1e:	b40f		push	{r0, r1, r2, r3}
+  2e2b20:	b082		sub	sp, #8
+  2e2b22:	2138		mov	r1, #56	; 0x38
+  2e2b24:	489f		ldr	r0, =0x1774e70	; via 0x2e2da4
+  2e2b26:	6800		ldr	r0, [r0, #0]
+  2e2b28:	5e08		ldrsh	r0, [r1, r0]
+  2e2b2a:	f04a fff8	bl	0x32db1e	; $pwr_bat_temp_within_limits
+  2e2b2e:	2800		cmp	r0, #0
+  2e2b30:	d115		bne	0x2e2b5e
+; error path
+  2e2b32:	f7ff fbdc	bl	0x2e22ee
+  2e2b36:	48a5		ldr	r0, =0xa0020	; via 0x2e2dcc
+  2e2b38:	9000		str	r0, [sp, #0]
+  2e2b3a:	a037		add	r0, pc, #220	; 0xdc
+  2e2b3c:	2121		mov	r1, #33	; 0x21
+  2e2b3e:	2200		mov	r2, #0
+  2e2b40:	43d2		mvn	r2, r2
+  2e2b42:	2302		mov	r3, #2
+  2e2b44:	f0f8 f876	bl	0x3dac34
+  2e2b48:	2000		mov	r0, #0
+  2e2b4a:	f0b2 f9ba	bl	0x394ec2
+  2e2b4e:	2032		mov	r0, #50	; 0x32
+  2e2b50:	493a		ldr	r1, =0x1774e38	; via 0x2e2c3c
+  2e2b52:	6809		ldr	r1, [r1, #0]
+  2e2b54:	5c40		ldrb	r0, [r0, r1]
+  2e2b56:	2800		cmp	r0, #0
+  2e2b58:	d100		bne	0x2e2b5c
+  2e2b5a:	e11d		b	0x2e2d98
+  2e2b5c:	e157		b	0x2e2e0e
+; good path
+  2e2b5e:	4e37		ldr	r6, =0x1774e38	; via 0x2e2c3c
+  2e2b60:	2133		mov	r1, #51	; 0x33
+  2e2b62:	6830		ldr	r0, [r6, #0]
+  2e2b64:	5c08		ldrb	r0, [r1, r0]
+  2e2b66:	2800		cmp	r0, #0
+  2e2b68:	d10d		bne	0x2e2b86
+; is_adc_on FALSE
+  2e2b6a:	2001		mov	r0, #1
+  2e2b6c:	2122		mov	r1, #34	; 0x22
+  2e2b6e:	2200		mov	r2, #0
+  2e2b70:	f066 fb4c	bl	0x34920c
+  2e2b74:	2001		mov	r0, #1
+  2e2b76:	f7ce fe92	bl	0x2b189e
+  2e2b7a:	2001		mov	r0, #1
+  2e2b7c:	2122		mov	r1, #34	; 0x22
+  2e2b7e:	f066 fb6c	bl	0x34925a
+  2e2b82:	1c04		add	r4, r0, #0
+  2e2b84:	e001		b	0x2e2b8a
+; is_adc_on TRUE
+  2e2b86:	6830		ldr	r0, [r6, #0]
+  2e2b88:	8904		ldrh	r4, [r0, #8]
+; is_adc_on paths join
+  2e2b8a:	1c20		add	r0, r4, #0
+  2e2b8c:	f04b fae1	bl	0x32e152	; Ichg averaging
+  2e2b90:	1c04		add	r4, r0, #0
+  2e2b92:	4d4e		ldr	r5, =0x1774b78	; via 0x2e2ccc
+  2e2b94:	f04a ffb1	bl	0x32dafa	; $pwr_adc_to_mA
+  2e2b98:	80e8		strh	r0, [r5, #6]
+  2e2b9a:	88e8		ldrh	r0, [r5, #6]
+  2e2b9c:	f04b fa8e	bl	0x32e0bc
+; "TIMER2" trace
+  2e2ba0:	488a		ldr	r0, =0xa0020	; via 0x2e2dcc
+  2e2ba2:	9000		str	r0, [sp, #0]
+  2e2ba4:	a0cd		add	r0, pc, #820	; 0x334
+  2e2ba6:	2106		mov	r1, #6
+  2e2ba8:	2200		mov	r2, #0
+  2e2baa:	43d2		mvn	r2, r2
+  2e2bac:	2302		mov	r3, #2
+  2e2bae:	f0f8 f841	bl	0x3dac34
+; "Ichg (MADC code) " trace
+  2e2bb2:	4886		ldr	r0, =0xa0020	; via 0x2e2dcc
+  2e2bb4:	9000		str	r0, [sp, #0]
+  2e2bb6:	a040		add	r0, pc, #256	; 0x100
+  2e2bb8:	2111		mov	r1, #17	; 0x11
+  2e2bba:	1c22		add	r2, r4, #0
+  2e2bbc:	2305		mov	r3, #5
+  2e2bbe:	f0f8 f839	bl	0x3dac34
+  2e2bc2:	2133		mov	r1, #51	; 0x33
+  2e2bc4:	6830		ldr	r0, [r6, #0]
+  2e2bc6:	5c08		ldrb	r0, [r1, r0]
+  2e2bc8:	2800		cmp	r0, #0
+  2e2bca:	d10c		bne	0x2e2be6
+; is_adc_on FALSE
+  2e2bcc:	2001		mov	r0, #1
+  2e2bce:	211e		mov	r1, #30	; 0x1e
+  2e2bd0:	2200		mov	r2, #0
+  2e2bd2:	f066 fb1b	bl	0x34920c
+  2e2bd6:	2001		mov	r0, #1
+  2e2bd8:	f7ce fe61	bl	0x2b189e
+  2e2bdc:	2001		mov	r0, #1
+  2e2bde:	211e		mov	r1, #30	; 0x1e
+  2e2be0:	f066 fb3b	bl	0x34925a
+  2e2be4:	e001		b	0x2e2bea
+; is_adc_on TRUE
+  2e2be6:	f04b fa77	bl	0x32e0d8
+; is_adc_on paths join
+  2e2bea:	4680		mov	r8, r0
+  2e2bec:	4d37		ldr	r5, =0x1774b78	; via 0x2e2ccc
+  2e2bee:	4640		mov	r0, r8
+  2e2bf0:	f04a ff7a	bl	0x32dae8	; $pwr_adc_to_mvolt
+  2e2bf4:	80a8		strh	r0, [r5, #4]
+  2e2bf6:	486b		ldr	r0, =0x1774e70	; via 0x2e2da4
+  2e2bf8:	4681		mov	r9, r0
+  2e2bfa:	2138		mov	r1, #56	; 0x38
+  2e2bfc:	6800		ldr	r0, [r0, #0]
+  2e2bfe:	5e08		ldrsh	r0, [r1, r0]
+  2e2c00:	3001		add	r0, #1
+  2e2c02:	2800		cmp	r0, #0
+  2e2c04:	d100		bne	0x2e2c08
+  2e2c06:	e098		b	0x2e2d3a
+; temperature != -1
+  2e2c08:	88aa		ldrh	r2, [r5, #4]
+  2e2c0a:	48d6		ldr	r0, =0x108c	; via 0x2e2f64
+  2e2c0c:	4282		cmp	r2, r0
+  2e2c0e:	da17		bge	0x2e2c40
+; Vbat < 4236
+  2e2c10:	49d6		ldr	r1, =0x17749c8	; via 0x2e2f6c
+  2e2c12:	2000		mov	r0, #0
+  2e2c14:	8008		strh	r0, [r1, #0]
+  2e2c16:	e046		b	0x2e2ca6
+; Vbat >= 4236
+  2e2c40:	4bca		ldr	r3, =0x17749c8	; via 0x2e2f6c
+  2e2c42:	8818		ldrh	r0, [r3, #0]
+  2e2c44:	3001		add	r0, #1
+  2e2c46:	0400		lsl	r0, r0, #16
+  2e2c48:	0c01		lsr	r1, r0, #16
+  2e2c4a:	8019		strh	r1, [r3, #0]
+  2e2c4c:	48c8		ldr	r0, =0x17749c4	; via 0x2e2f70
+  2e2c4e:	4682		mov	r10, r0
+  2e2c50:	8800		ldrh	r0, [r0, #0]
+  2e2c52:	4281		cmp	r1, r0
+  2e2c54:	dd27		ble	0x2e2ca6
+; Vbat has been high 4 times in a row
+  2e2c56:	4fc7		ldr	r7, =0x17749ca	; via 0x2e2f74
+  2e2c58:	8839		ldrh	r1, [r7, #0]
+  2e2c5a:	48c7		ldr	r0, =0x17749c6	; via 0x2e2f78
+  2e2c5c:	8800		ldrh	r0, [r0, #0]
+  2e2c5e:	3830		sub	r0, #48	; 0x30
+  2e2c60:	4288		cmp	r0, r1
+  2e2c62:	dc1d		bgt	0x2e2ca0
+; DAC -= 2
+  2e2c64:	1e88		sub	r0, r1, #2
+  2e2c66:	8038		strh	r0, [r7, #0]
+  2e2c68:	2001		mov	r0, #1
+  2e2c6a:	213a		mov	r1, #58	; 0x3a
+  2e2c6c:	2200		mov	r2, #0
+  2e2c6e:	f066 facd	bl	0x34920c
+  2e2c72:	883a		ldrh	r2, [r7, #0]
+  2e2c74:	2001		mov	r0, #1
+  2e2c76:	2132		mov	r1, #50	; 0x32
+  2e2c78:	f066 fac8	bl	0x34920c
+  2e2c7c:	2001		mov	r0, #1
+  2e2c7e:	213a		mov	r1, #58	; 0x3a
+  2e2c80:	2201		mov	r2, #1
+  2e2c82:	f066 fac3	bl	0x34920c
+; set counter threshold to 10 (started out as 3)
+  2e2c86:	4650		mov	r0, r10
+  2e2c88:	210a		mov	r1, #10	; 0xa
+  2e2c8a:	8001		strh	r1, [r0, #0]
+; "Sub CV DAC" trace
+  2e2c8c:	883a		ldrh	r2, [r7, #0]
+  2e2c8e:	484f		ldr	r0, =0xa0020	; via 0x2e2dcc
+  2e2c90:	9000		str	r0, [sp, #0]
+  2e2c92:	a094		add	r0, pc, #592	; 0x250
+  2e2c94:	210b		mov	r1, #11	; 0xb
+  2e2c96:	2305		mov	r3, #5
+  2e2c98:	f0f7 ffcc	bl	0x3dac34
+  2e2c9c:	48bc		ldr	r0, =0x1774b7c	; via 0x2e2f90
+  2e2c9e:	8802		ldrh	r2, [r0, #0]
+; counter to 0
+  2e2ca0:	48b2		ldr	r0, =0x17749c8	; via 0x2e2f6c
+  2e2ca2:	2100		mov	r1, #0
+  2e2ca4:	8001		strh	r1, [r0, #0]
+; end of high Vbat check
+; now check against low threshold of 4160
+  2e2ca6:	2041		mov	r0, #65	; 0x41
+  2e2ca8:	0180		lsl	r0, r0, #6
+  2e2caa:	4282		cmp	r2, r0
+  2e2cac:	db10		blt	0x2e2cd0
+; Vbat >= 4160
+  2e2cae:	49b3		ldr	r1, =0x17749c0	; via 0x2e2f7c
+  2e2cb0:	2000		mov	r0, #0
+  2e2cb2:	8008		strh	r0, [r1, #0]
+  2e2cb4:	e041		b	0x2e2d3a
+; Vbat < 4160
+; increment counter
+  2e2cd0:	49aa		ldr	r1, =0x17749c0	; via 0x2e2f7c
+  2e2cd2:	8808		ldrh	r0, [r1, #0]
+  2e2cd4:	3001		add	r0, #1
+  2e2cd6:	0400		lsl	r0, r0, #16
+  2e2cd8:	0c00		lsr	r0, r0, #16
+  2e2cda:	8008		strh	r0, [r1, #0]
+  2e2cdc:	4fa4		ldr	r7, =0x17749c4	; via 0x2e2f70
+  2e2cde:	8839		ldrh	r1, [r7, #0]
+  2e2ce0:	4288		cmp	r0, r1
+  2e2ce2:	dd2a		ble	0x2e2d3a
+; counter incremented past the limit
+  2e2ce4:	2000		mov	r0, #0
+  2e2ce6:	4683		mov	r11, r0
+  2e2ce8:	49a2		ldr	r1, =0x17749ca	; via 0x2e2f74
+  2e2cea:	880b		ldrh	r3, [r1, #0]
+  2e2cec:	1c18		add	r0, r3, #0
+  2e2cee:	3807		sub	r0, #7
+  2e2cf0:	4aa1		ldr	r2, =0x17749c6	; via 0x2e2f78
+  2e2cf2:	8812		ldrh	r2, [r2, #0]
+  2e2cf4:	4290		cmp	r0, r2
+  2e2cf6:	dc1d		bgt	0x2e2d34
+  2e2cf8:	468a		mov	r10, r1
+  2e2cfa:	1c58		add	r0, r3, #1
+  2e2cfc:	8008		strh	r0, [r1, #0]
+  2e2cfe:	2001		mov	r0, #1
+  2e2d00:	213a		mov	r1, #58	; 0x3a
+  2e2d02:	2200		mov	r2, #0
+  2e2d04:	f066 fa82	bl	0x34920c
+  2e2d08:	4650		mov	r0, r10
+  2e2d0a:	8802		ldrh	r2, [r0, #0]
+  2e2d0c:	2001		mov	r0, #1
+  2e2d0e:	2132		mov	r1, #50	; 0x32
+  2e2d10:	f066 fa7c	bl	0x34920c
+  2e2d14:	2001		mov	r0, #1
+  2e2d16:	213a		mov	r1, #58	; 0x3a
+  2e2d18:	2201		mov	r2, #1
+  2e2d1a:	f066 fa77	bl	0x34920c
+  2e2d1e:	200a		mov	r0, #10	; 0xa
+  2e2d20:	8038		strh	r0, [r7, #0]
+; "Add CV DAC" trace
+  2e2d22:	4650		mov	r0, r10
+  2e2d24:	8802		ldrh	r2, [r0, #0]
+  2e2d26:	4829		ldr	r0, =0xa0020	; via 0x2e2dcc
+  2e2d28:	9000		str	r0, [sp, #0]
+  2e2d2a:	a071		add	r0, pc, #452	; 0x1c4
+  2e2d2c:	210b		mov	r1, #11	; 0xb
+  2e2d2e:	2305		mov	r3, #5
+  2e2d30:	f0f7 ff80	bl	0x3dac34
+; zero the counter
+  2e2d34:	4891		ldr	r0, =0x17749c0	; via 0x2e2f7c
+  2e2d36:	4659		mov	r1, r11
+  2e2d38:	8001		strh	r1, [r0, #0]
+; end of DAC adjustment logic
+; "Vbat (MADC code) " trace
+  2e2d3a:	4824		ldr	r0, =0xa0020	; via 0x2e2dcc
+  2e2d3c:	9000		str	r0, [sp, #0]
+  2e2d3e:	a07c		add	r0, pc, #496	; 0x1f0
+  2e2d40:	2111		mov	r1, #17	; 0x11
+  2e2d42:	4642		mov	r2, r8
+  2e2d44:	2305		mov	r3, #5
+  2e2d46:	f0f7 ff75	bl	0x3dac34
+; get the display backlight current draw
+  2e2d4a:	f0fc faba	bl	0x3df2c2
+  2e2d4e:	4649		mov	r1, r9
+  2e2d50:	6809		ldr	r1, [r1, #0]
+  2e2d52:	894a		ldrh	r2, [r1, #10]	; 0xa
+  2e2d54:	1810		add	r0, r2, r0
+  2e2d56:	0400		lsl	r0, r0, #16
+  2e2d58:	0c00		lsr	r0, r0, #16
+  2e2d5a:	4284		cmp	r4, r0
+  2e2d5c:	dc38		bgt	0x2e2dd0
+; Ichg <= end_current + display_backlight_current
+  2e2d5e:	4a88		ldr	r2, =0x17749c2	; via 0x2e2f80
+  2e2d60:	8810		ldrh	r0, [r2, #0]
+  2e2d62:	3001		add	r0, #1
+  2e2d64:	0400		lsl	r0, r0, #16
+  2e2d66:	0c00		lsr	r0, r0, #16
+  2e2d68:	8010		strh	r0, [r2, #0]
+  2e2d6a:	281e		cmp	r0, #30	; 0x1e
+  2e2d6c:	dd1c		ble	0x2e2da8
+; this seems to be the end-of-charge condition
+  2e2d6e:	4985		ldr	r1, =0x17749b8	; via 0x2e2f84
+  2e2d70:	2000		mov	r0, #0
+  2e2d72:	7008		strb	r0, [r1, #0]
+  2e2d74:	f7ff fabb	bl	0x2e22ee	; $pwr_stop_charging
+  2e2d78:	f0b2 f86a	bl	0x394e50	; $pwr_send_charge_stop_event ?
+; "Fast charge termination criterion" trace
+  2e2d7c:	4813		ldr	r0, =0xa0020	; via 0x2e2dcc
+  2e2d7e:	9000		str	r0, [sp, #0]
+  2e2d80:	a05e		add	r0, pc, #376	; 0x178
+  2e2d82:	2121		mov	r1, #33	; 0x21
+  2e2d84:	2200		mov	r2, #0
+  2e2d86:	43d2		mvn	r2, r2
+  2e2d88:	2305		mov	r3, #5
+  2e2d8a:	f0f7 ff53	bl	0x3dac34
+  2e2d8e:	2032		mov	r0, #50	; 0x32
+  2e2d90:	6831		ldr	r1, [r6, #0]
+  2e2d92:	5c40		ldrb	r0, [r0, r1]
+  2e2d94:	2800		cmp	r0, #0
+  2e2d96:	d13a		bne	0x2e2e0e
+  2e2d98:	2001		mov	r0, #1
+  2e2d9a:	213c		mov	r1, #60	; 0x3c
+  2e2d9c:	2201		mov	r2, #1
+  2e2d9e:	f066 fa35	bl	0x34920c
+  2e2da2:	e045		b	0x2e2e30
+  2e2da4:	4e70		ldr	r6, =0x10ae	; via 0x2e2f68
+  2e2da6:	0177		lsl	r7, r6, #5
+; counter <= 30
+  2e2da8:	2048		mov	r0, #72	; 0x48
+  2e2daa:	5c40		ldrb	r0, [r0, r1]
+  2e2dac:	2801		cmp	r0, #1
+  2e2dae:	d137		bne	0x2e2e20
+  2e2db0:	2400		mov	r4, #0
+  2e2db2:	4874		ldr	r0, =0x17749b8	; via 0x2e2f84
+  2e2db4:	7801		ldrb	r1, [r0, #0]
+  2e2db6:	2900		cmp	r1, #0
+  2e2db8:	d005		beq	0x2e2dc6
+  2e2dba:	7004		strb	r4, [r0, #0]
+  2e2dbc:	f0b2 f848	bl	0x394e50
+  2e2dc0:	2064		mov	r0, #100	; 0x64
+  2e2dc2:	f0b2 f8ba	bl	0x394f3a
+  2e2dc6:	486e		ldr	r0, =0x17749c2	; via 0x2e2f80
+  2e2dc8:	8004		strh	r4, [r0, #0]
+  2e2dca:	e029		b	0x2e2e20
+; Ichg hasn't fallen low enough
+; zero the Ichg low counter
+  2e2dd0:	4a6b		ldr	r2, =0x17749c2	; via 0x2e2f80
+  2e2dd2:	2000		mov	r0, #0
+  2e2dd4:	8010		strh	r0, [r2, #0]
+; another Vbat check
+  2e2dd6:	88a8		ldrh	r0, [r5, #4]
+  2e2dd8:	4a63		ldr	r2, =0x10ae	; via 0x2e2f68
+  2e2dda:	4290		cmp	r0, r2
+  2e2ddc:	dd1a		ble	0x2e2e14
+; Vbat > 4270
+  2e2dde:	4866		ldr	r0, =0x17749c6	; via 0x2e2f78
+  2e2de0:	8800		ldrh	r0, [r0, #0]
+  2e2de2:	4a64		ldr	r2, =0x17749ca	; via 0x2e2f74
+  2e2de4:	8812		ldrh	r2, [r2, #0]
+  2e2de6:	1a80		sub	r0, r0, r2
+  2e2de8:	2832		cmp	r0, #50	; 0x32
+  2e2dea:	dd13		ble	0x2e2e14
+; overvoltage handling
+  2e2dec:	f7ff fa7f	bl	0x2e22ee
+  2e2df0:	2009		mov	r0, #9
+  2e2df2:	43c0		mvn	r0, r0
+  2e2df4:	8028		strh	r0, [r5, #0]
+  2e2df6:	4865		ldr	r0, =0xa0020	; via 0x2e2f8c
+  2e2df8:	9000		str	r0, [sp, #0]
+  2e2dfa:	a049		add	r0, pc, #292	; 0x124
+  2e2dfc:	210e		mov	r1, #14	; 0xe
+  2e2dfe:	2200		mov	r2, #0
+  2e2e00:	43d2		mvn	r2, r2
+  2e2e02:	2302		mov	r3, #2
+  2e2e04:	f0f7 ff16	bl	0x3dac34
+  2e2e08:	2003		mov	r0, #3
+  2e2e0a:	f0b2 f85a	bl	0x394ec2
+  2e2e0e:	f0d0 fed0	bl	0x3b3bb2
+  2e2e12:	e00d		b	0x2e2e30
+; overcurrent check
+  2e2e14:	2033		mov	r0, #51	; 0x33
+  2e2e16:	0100		lsl	r0, r0, #4
+  2e2e18:	8909		ldrh	r1, [r1, #8]
+  2e2e1a:	1840		add	r0, r0, r1
+  2e2e1c:	4284		cmp	r4, r0
+  2e2e1e:	dc05		bgt	0x2e2e2c
+; TIMER2 reset
+  2e2e20:	2002		mov	r0, #2
+  2e2e22:	4959		ldr	r1, =0x363	; via 0x2e2f88
+  2e2e24:	2200		mov	r2, #0
+  2e2e26:	f048 f827	bl	0x32ae78
+  2e2e2a:	e001		b	0x2e2e30
+  2e2e2c:	f7ff fad1	bl	0x2e23d2
+  2e2e30:	b002		add	sp, #8
+  2e2e32:	bc0f		pop	{r0, r1, r2, r3}
+  2e2e34:	4680		mov	r8, r0
+  2e2e36:	4689		mov	r9, r1
+  2e2e38:	4692		mov	r10, r2
+  2e2e3a:	469b		mov	r11, r3
+  2e2e3c:	bdf0		pop	{r4, r5, r6, r7, pc}
+
 $l1_abb_power_on:
   31c036:	b510		push	{r4, lr}
   31c038:	b084		sub	sp, #16	; 0x10
@@ -5311,8 +5731,10 @@
 0x17749c2:	16-bit var, init to 0 in pwr_start_CV_charging()
 0x17749c4:	16-bit var, init to 3 in pwr_start_CV_charging()
 0x17749c6:	16-bit var, initial CV DAC value gets written here
+		this var seems to hold the initial value
 0x17749c8:	16-bit var, init to 0 in pwr_start_CV_charging()
 0x17749ca:	16-bit var, initial CV DAC value gets written here
+		this var gets decremented as the DAC is adjusted down
 
 0x1774b78:	16-bit var, gets -4 written into it if the battery T
 		is too high, or -5 if it is too low
@@ -5320,7 +5742,7 @@
 		set to 1 when starting CV charging
 0x1774b7c:	16-bit var battery voltage in mV
 0x1774b7e:	16-bit var zeroed in pwr_stop_charging()
-		Ichg in mA gets written here in CI process
+		Ichg in mA gets written here in CI and CV processes
 0x1774b80:	16-bit var zeroed in pwr_stop_charging()
 0x1774b82:	16-bit var gets i2v offset (raw ADC) written into it