1161 lines
46 KiB
Plaintext
1161 lines
46 KiB
Plaintext
ARM GAS /tmp/ccrYTcjJ.s page 1
|
||
|
||
|
||
1 .cpu cortex-m4
|
||
2 .arch armv7e-m
|
||
3 .fpu fpv4-sp-d16
|
||
4 .eabi_attribute 27, 1
|
||
5 .eabi_attribute 28, 1
|
||
6 .eabi_attribute 20, 1
|
||
7 .eabi_attribute 21, 1
|
||
8 .eabi_attribute 23, 3
|
||
9 .eabi_attribute 24, 1
|
||
10 .eabi_attribute 25, 1
|
||
11 .eabi_attribute 26, 1
|
||
12 .eabi_attribute 30, 6
|
||
13 .eabi_attribute 34, 1
|
||
14 .eabi_attribute 18, 4
|
||
15 .file "can.c"
|
||
16 .text
|
||
17 .Ltext0:
|
||
18 .cfi_sections .debug_frame
|
||
19 .file 1 "Core/Src/can.c"
|
||
20 .global id_to_log
|
||
21 .section .bss.id_to_log,"aw",%nobits
|
||
24 id_to_log:
|
||
25 0000 00 .space 1
|
||
26 .global last_message
|
||
27 .section .bss.last_message,"aw",%nobits
|
||
28 .align 2
|
||
31 last_message:
|
||
32 0000 00000000 .space 8
|
||
32 00000000
|
||
33 .global can_status_timer
|
||
34 .section .bss.can_status_timer,"aw",%nobits
|
||
35 .align 2
|
||
38 can_status_timer:
|
||
39 0000 00000000 .space 4
|
||
40 .global can_log_timer
|
||
41 .section .bss.can_log_timer,"aw",%nobits
|
||
42 .align 2
|
||
45 can_log_timer:
|
||
46 0000 00000000 .space 4
|
||
47 .global can_timeout_timer
|
||
48 .section .bss.can_timeout_timer,"aw",%nobits
|
||
49 .align 2
|
||
52 can_timeout_timer:
|
||
53 0000 00000000 .space 4
|
||
54 .section .text.can_init,"ax",%progbits
|
||
55 .align 1
|
||
56 .global can_init
|
||
57 .syntax unified
|
||
58 .thumb
|
||
59 .thumb_func
|
||
61 can_init:
|
||
62 .LFB130:
|
||
1:Core/Src/can.c **** /*
|
||
2:Core/Src/can.c **** * can.h
|
||
3:Core/Src/can.c **** *
|
||
4:Core/Src/can.c **** * Created on: 07.07.2024
|
||
5:Core/Src/can.c **** * Author: Hamza
|
||
ARM GAS /tmp/ccrYTcjJ.s page 2
|
||
|
||
|
||
6:Core/Src/can.c **** */
|
||
7:Core/Src/can.c ****
|
||
8:Core/Src/can.c **** #include "can.h"
|
||
9:Core/Src/can.c **** #include "AMS_HighLevel.h"
|
||
10:Core/Src/can.c **** #include "PWM_control.h"
|
||
11:Core/Src/can.c **** #include "TMP1075.h"
|
||
12:Core/Src/can.c **** #include "can-halal.h"
|
||
13:Core/Src/can.c **** #include "eeprom.h"
|
||
14:Core/Src/can.c **** #include "soc_estimation.h"
|
||
15:Core/Src/can.c **** #include "state_machine.h"
|
||
16:Core/Src/can.c **** #include "stm32f3xx_hal.h"
|
||
17:Core/Src/can.c **** #include "stm32f3xx_hal_def.h"
|
||
18:Core/Src/can.c **** #include <stdint.h>
|
||
19:Core/Src/can.c ****
|
||
20:Core/Src/can.c **** #define CAN_ID_IN 0x501
|
||
21:Core/Src/can.c **** #define CAN_ID_OUT 0x502
|
||
22:Core/Src/can.c **** #define CAN_ID_LOG 0x503
|
||
23:Core/Src/can.c ****
|
||
24:Core/Src/can.c **** // Every X ms, send message
|
||
25:Core/Src/can.c **** #define CAN_STATUS_FREQ 1000
|
||
26:Core/Src/can.c **** #define CAN_LOGGING_FREQ 200
|
||
27:Core/Src/can.c **** #define CAN_DUMP_FREQ 10
|
||
28:Core/Src/can.c ****
|
||
29:Core/Src/can.c **** // Max time to wait for CAN messages. If we reach it then we target state is set to STATE_ERROR.
|
||
30:Core/Src/can.c **** #define CAN_TIMEOUT 5000
|
||
31:Core/Src/can.c ****
|
||
32:Core/Src/can.c **** uint8_t id_to_log;
|
||
33:Core/Src/can.c **** uint8_t last_message[8];
|
||
34:Core/Src/can.c **** uint32_t can_status_timer, can_log_timer, can_timeout_timer;
|
||
35:Core/Src/can.c ****
|
||
36:Core/Src/can.c **** void can_init(CAN_HandleTypeDef* hcan) {
|
||
63 .loc 1 36 40
|
||
64 .cfi_startproc
|
||
65 @ args = 0, pretend = 0, frame = 8
|
||
66 @ frame_needed = 1, uses_anonymous_args = 0
|
||
67 0000 80B5 push {r7, lr}
|
||
68 .cfi_def_cfa_offset 8
|
||
69 .cfi_offset 7, -8
|
||
70 .cfi_offset 14, -4
|
||
71 0002 82B0 sub sp, sp, #8
|
||
72 .cfi_def_cfa_offset 16
|
||
73 0004 00AF add r7, sp, #0
|
||
74 .cfi_def_cfa_register 7
|
||
75 0006 7860 str r0, [r7, #4]
|
||
37:Core/Src/can.c **** ftcan_init(hcan);
|
||
76 .loc 1 37 3
|
||
77 0008 7868 ldr r0, [r7, #4]
|
||
78 000a FFF7FEFF bl ftcan_init
|
||
38:Core/Src/can.c **** ftcan_add_filter(CAN_ID_IN, 0xFFF);
|
||
79 .loc 1 38 3
|
||
80 000e 40F6FF71 movw r1, #4095
|
||
81 0012 40F20150 movw r0, #1281
|
||
82 0016 FFF7FEFF bl ftcan_add_filter
|
||
39:Core/Src/can.c **** last_message[0] = -1;
|
||
83 .loc 1 39 19
|
||
84 001a 114B ldr r3, .L2
|
||
85 001c FF22 movs r2, #255
|
||
ARM GAS /tmp/ccrYTcjJ.s page 3
|
||
|
||
|
||
86 001e 1A70 strb r2, [r3]
|
||
40:Core/Src/can.c **** last_message[1] = -1;
|
||
87 .loc 1 40 19
|
||
88 0020 0F4B ldr r3, .L2
|
||
89 0022 FF22 movs r2, #255
|
||
90 0024 5A70 strb r2, [r3, #1]
|
||
41:Core/Src/can.c **** can_status_timer = HAL_GetTick() + CAN_STATUS_FREQ;
|
||
91 .loc 1 41 22
|
||
92 0026 FFF7FEFF bl HAL_GetTick
|
||
93 002a 0346 mov r3, r0
|
||
94 .loc 1 41 36 discriminator 1
|
||
95 002c 03F57A73 add r3, r3, #1000
|
||
96 .loc 1 41 20 discriminator 1
|
||
97 0030 0C4A ldr r2, .L2+4
|
||
98 0032 1360 str r3, [r2]
|
||
42:Core/Src/can.c **** can_log_timer = HAL_GetTick() + CAN_LOGGING_FREQ;
|
||
99 .loc 1 42 19
|
||
100 0034 FFF7FEFF bl HAL_GetTick
|
||
101 0038 0346 mov r3, r0
|
||
102 .loc 1 42 33 discriminator 1
|
||
103 003a C833 adds r3, r3, #200
|
||
104 .loc 1 42 17 discriminator 1
|
||
105 003c 0A4A ldr r2, .L2+8
|
||
106 003e 1360 str r3, [r2]
|
||
43:Core/Src/can.c **** can_timeout_timer = HAL_GetTick() + CAN_TIMEOUT;
|
||
107 .loc 1 43 23
|
||
108 0040 FFF7FEFF bl HAL_GetTick
|
||
109 0044 0346 mov r3, r0
|
||
110 .loc 1 43 37 discriminator 1
|
||
111 0046 03F59C53 add r3, r3, #4992
|
||
112 004a 0833 adds r3, r3, #8
|
||
113 .loc 1 43 21 discriminator 1
|
||
114 004c 074A ldr r2, .L2+12
|
||
115 004e 1360 str r3, [r2]
|
||
44:Core/Src/can.c **** id_to_log =0;
|
||
116 .loc 1 44 13
|
||
117 0050 074B ldr r3, .L2+16
|
||
118 0052 0022 movs r2, #0
|
||
119 0054 1A70 strb r2, [r3]
|
||
45:Core/Src/can.c **** }
|
||
120 .loc 1 45 1
|
||
121 0056 00BF nop
|
||
122 0058 0837 adds r7, r7, #8
|
||
123 .cfi_def_cfa_offset 8
|
||
124 005a BD46 mov sp, r7
|
||
125 .cfi_def_cfa_register 13
|
||
126 @ sp needed
|
||
127 005c 80BD pop {r7, pc}
|
||
128 .L3:
|
||
129 005e 00BF .align 2
|
||
130 .L2:
|
||
131 0060 00000000 .word last_message
|
||
132 0064 00000000 .word can_status_timer
|
||
133 0068 00000000 .word can_log_timer
|
||
134 006c 00000000 .word can_timeout_timer
|
||
135 0070 00000000 .word id_to_log
|
||
136 .cfi_endproc
|
||
ARM GAS /tmp/ccrYTcjJ.s page 4
|
||
|
||
|
||
137 .LFE130:
|
||
139 .global __aeabi_i2d
|
||
140 .global __aeabi_ddiv
|
||
141 .global __aeabi_d2f
|
||
142 .section .text.can_handle_send_status,"ax",%progbits
|
||
143 .align 1
|
||
144 .global can_handle_send_status
|
||
145 .syntax unified
|
||
146 .thumb
|
||
147 .thumb_func
|
||
149 can_handle_send_status:
|
||
150 .LFB131:
|
||
46:Core/Src/can.c ****
|
||
47:Core/Src/can.c **** /*
|
||
48:Core/Src/can.c **** This function sends the status of the mvbms, the battery and of powerground.
|
||
49:Core/Src/can.c **** once every 1s in states: INACTIVE, PRECHARGE, DISCHARGE, CHARGING, ERROR.
|
||
50:Core/Src/can.c **** once every 0.5s in states: READY, ACTIVE.
|
||
51:Core/Src/can.c **** with format of:
|
||
52:Core/Src/can.c **** CAN Messages:
|
||
53:Core/Src/can.c **** Error bit
|
||
54:Core/Src/can.c **** MVBMS state
|
||
55:Core/Src/can.c **** Powerground Status 0-100%
|
||
56:Core/Src/can.c **** Errors
|
||
57:Core/Src/can.c **** Battery state of charge
|
||
58:Core/Src/can.c **** Pack Voltage
|
||
59:Core/Src/can.c **** Current
|
||
60:Core/Src/can.c **** Battery temperature (12 bit)
|
||
61:Core/Src/can.c ****
|
||
62:Core/Src/can.c **** Min/Max. Cell Temp (ID, Min Temp, ID, Max Temp)(3B),
|
||
63:Core/Src/can.c **** Min/Max Cell Voltage (ID, Min Voltage, ID, Max Voltage)(3B)
|
||
64:Core/Src/can.c ****
|
||
65:Core/Src/can.c **** bit 0 (1b): empty
|
||
66:Core/Src/can.c **** bit 1-3 (3b): state
|
||
67:Core/Src/can.c **** bit 4-11 (8b): powerground status
|
||
68:Core/Src/can.c **** bit 12-19 (8b): error
|
||
69:Core/Src/can.c **** bit 20-27 (8b): state of charge from 0-100%
|
||
70:Core/Src/can.c **** bit 28-39 (12b): battery voltage
|
||
71:Core/Src/can.c **** bit 40-51 (12b): current measurement
|
||
72:Core/Src/can.c **** bit 52-63 (12b): temperature of the cell with highest temperature
|
||
73:Core/Src/can.c ****
|
||
74:Core/Src/can.c ****
|
||
75:Core/Src/can.c **** bit 0-3 (4b): ID of the sensor with highest temperature
|
||
76:Core/Src/can.c **** bit 4-7 (4b): ID of the sensor with lowest temperataure
|
||
77:Core/Src/can.c **** bit 8-19 (12b): temperature of the coldest cell
|
||
78:Core/Src/can.c **** bit 20-23 (4b): ID of the cell with the lowest voltage
|
||
79:Core/Src/can.c **** bit 24-35 (12b): lowest cell voltage
|
||
80:Core/Src/can.c **** bit 36-39 (4b): ID of the cell the the highest voltage
|
||
81:Core/Src/can.c **** bit 40-51 (12b): highest cell voltage
|
||
82:Core/Src/can.c **** bit 52-63 (12b): empty
|
||
83:Core/Src/can.c **** */
|
||
84:Core/Src/can.c ****
|
||
85:Core/Src/can.c **** void can_handle_send_status() {
|
||
151 .loc 1 85 31
|
||
152 .cfi_startproc
|
||
153 @ args = 0, pretend = 0, frame = 24
|
||
154 @ frame_needed = 1, uses_anonymous_args = 0
|
||
155 0000 80B5 push {r7, lr}
|
||
ARM GAS /tmp/ccrYTcjJ.s page 5
|
||
|
||
|
||
156 .cfi_def_cfa_offset 8
|
||
157 .cfi_offset 7, -8
|
||
158 .cfi_offset 14, -4
|
||
159 0002 86B0 sub sp, sp, #24
|
||
160 .cfi_def_cfa_offset 32
|
||
161 0004 00AF add r7, sp, #0
|
||
162 .cfi_def_cfa_register 7
|
||
86:Core/Src/can.c **** if (can_status_timer > HAL_GetTick())
|
||
163 .loc 1 86 26
|
||
164 0006 FFF7FEFF bl HAL_GetTick
|
||
165 000a 0246 mov r2, r0
|
||
166 .loc 1 86 24 discriminator 1
|
||
167 000c 4D4B ldr r3, .L8
|
||
168 000e 1B68 ldr r3, [r3]
|
||
169 .loc 1 86 6 discriminator 1
|
||
170 0010 9A42 cmp r2, r3
|
||
171 0012 C0F09380 bcc .L7
|
||
172 .LBB2:
|
||
87:Core/Src/can.c **** return;
|
||
88:Core/Src/can.c **** else {
|
||
89:Core/Src/can.c **** uint8_t data[8] = {};
|
||
173 .loc 1 89 13
|
||
174 0016 07F11003 add r3, r7, #16
|
||
175 001a 0022 movs r2, #0
|
||
176 001c 1A60 str r2, [r3]
|
||
177 001e 5A60 str r2, [r3, #4]
|
||
90:Core/Src/can.c **** can_status_timer = HAL_GetTick() + CAN_STATUS_FREQ;
|
||
178 .loc 1 90 24
|
||
179 0020 FFF7FEFF bl HAL_GetTick
|
||
180 0024 0346 mov r3, r0
|
||
181 .loc 1 90 38 discriminator 1
|
||
182 0026 03F57A73 add r3, r3, #1000
|
||
183 .loc 1 90 22 discriminator 1
|
||
184 002a 464A ldr r2, .L8
|
||
185 002c 1360 str r3, [r2]
|
||
91:Core/Src/can.c ****
|
||
92:Core/Src/can.c **** uint8_t id_highest_temp = 0;
|
||
186 .loc 1 92 13
|
||
187 002e 0023 movs r3, #0
|
||
188 0030 FB73 strb r3, [r7, #15]
|
||
93:Core/Src/can.c **** uint16_t highest_temp = 0;
|
||
189 .loc 1 93 14
|
||
190 0032 0023 movs r3, #0
|
||
191 0034 BB81 strh r3, [r7, #12] @ movhi
|
||
94:Core/Src/can.c **** sm_check_battery_temperature(&id_highest_temp, &highest_temp);
|
||
192 .loc 1 94 5
|
||
193 0036 07F10C02 add r2, r7, #12
|
||
194 003a 07F10F03 add r3, r7, #15
|
||
195 003e 1146 mov r1, r2
|
||
196 0040 1846 mov r0, r3
|
||
197 0042 FFF7FEFF bl sm_check_battery_temperature
|
||
95:Core/Src/can.c ****
|
||
96:Core/Src/can.c **** data[0] = (state.current_state); // 8 bit state (only 3 are use)
|
||
198 .loc 1 96 21
|
||
199 0046 404B ldr r3, .L8+4
|
||
200 0048 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
201 .loc 1 96 13
|
||
ARM GAS /tmp/ccrYTcjJ.s page 6
|
||
|
||
|
||
202 004a 3B74 strb r3, [r7, #16]
|
||
97:Core/Src/can.c **** data[1] = (current_powerground_status); // 8 bit powerground
|
||
203 .loc 1 97 13
|
||
204 004c 3F4B ldr r3, .L8+8
|
||
205 004e 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
206 0050 7B74 strb r3, [r7, #17]
|
||
98:Core/Src/can.c **** data[2] = (state.error_source); // 8 bit error
|
||
207 .loc 1 98 21
|
||
208 0052 3D4B ldr r3, .L8+4
|
||
209 0054 5B88 ldrh r3, [r3, #2]
|
||
210 .loc 1 98 13
|
||
211 0056 DBB2 uxtb r3, r3
|
||
212 0058 BB74 strb r3, [r7, #18]
|
||
99:Core/Src/can.c **** data[3] = ((int) current_soc); // 8 bit state of charge
|
||
213 .loc 1 99 16
|
||
214 005a 3D4B ldr r3, .L8+12
|
||
215 005c D3ED007A vldr.32 s15, [r3]
|
||
216 0060 FDEEE77A vcvt.s32.f32 s15, s15
|
||
217 0064 C7ED017A vstr.32 s15, [r7, #4] @ int
|
||
218 .loc 1 99 13
|
||
219 0068 3B79 ldrb r3, [r7, #4] @ zero_extendqisi2
|
||
220 006a FB74 strb r3, [r7, #19]
|
||
100:Core/Src/can.c **** data[4] = (roundf(RELAY_BAT_SIDE_VOLTAGE / 1000.0)); // 8 bit battery voltage
|
||
221 .loc 1 100 46
|
||
222 006c 394B ldr r3, .L8+16
|
||
223 006e 1B68 ldr r3, [r3]
|
||
224 0070 1846 mov r0, r3
|
||
225 0072 FFF7FEFF bl __aeabi_i2d
|
||
226 0076 4FF00002 mov r2, #0
|
||
227 007a 374B ldr r3, .L8+20
|
||
228 007c FFF7FEFF bl __aeabi_ddiv
|
||
229 0080 0246 mov r2, r0
|
||
230 0082 0B46 mov r3, r1
|
||
231 .loc 1 100 16
|
||
232 0084 1046 mov r0, r2
|
||
233 0086 1946 mov r1, r3
|
||
234 0088 FFF7FEFF bl __aeabi_d2f
|
||
235 008c 0346 mov r3, r0 @ float
|
||
236 008e 00EE103A vmov s0, r3
|
||
237 0092 FFF7FEFF bl roundf
|
||
238 0096 F0EE407A vmov.f32 s15, s0
|
||
239 .loc 1 100 13 discriminator 1
|
||
240 009a FCEEE77A vcvt.u32.f32 s15, s15
|
||
241 009e C7ED017A vstr.32 s15, [r7, #4] @ int
|
||
242 00a2 3B79 ldrb r3, [r7, #4]
|
||
243 00a4 DBB2 uxtb r3, r3
|
||
244 00a6 3B75 strb r3, [r7, #20]
|
||
101:Core/Src/can.c **** data[5] = (roundf(RELAY_ESC_SIDE_VOLTAGE / 1000.0)); // 8 bit Inverter voltage
|
||
245 .loc 1 101 46
|
||
246 00a8 2C4B ldr r3, .L8+24
|
||
247 00aa 1B68 ldr r3, [r3]
|
||
248 00ac 1846 mov r0, r3
|
||
249 00ae FFF7FEFF bl __aeabi_i2d
|
||
250 00b2 4FF00002 mov r2, #0
|
||
251 00b6 284B ldr r3, .L8+20
|
||
252 00b8 FFF7FEFF bl __aeabi_ddiv
|
||
253 00bc 0246 mov r2, r0
|
||
ARM GAS /tmp/ccrYTcjJ.s page 7
|
||
|
||
|
||
254 00be 0B46 mov r3, r1
|
||
255 .loc 1 101 16
|
||
256 00c0 1046 mov r0, r2
|
||
257 00c2 1946 mov r1, r3
|
||
258 00c4 FFF7FEFF bl __aeabi_d2f
|
||
259 00c8 0346 mov r3, r0 @ float
|
||
260 00ca 00EE103A vmov s0, r3
|
||
261 00ce FFF7FEFF bl roundf
|
||
262 00d2 F0EE407A vmov.f32 s15, s0
|
||
263 .loc 1 101 13 discriminator 1
|
||
264 00d6 FCEEE77A vcvt.u32.f32 s15, s15
|
||
265 00da C7ED017A vstr.32 s15, [r7, #4] @ int
|
||
266 00de 3B79 ldrb r3, [r7, #4]
|
||
267 00e0 DBB2 uxtb r3, r3
|
||
268 00e2 7B75 strb r3, [r7, #21]
|
||
102:Core/Src/can.c **** data[6] = (roundf(CURRENT_MEASUREMENT / 1000.0)); // 8 bit Current
|
||
269 .loc 1 102 43
|
||
270 00e4 1E4B ldr r3, .L8+28
|
||
271 00e6 1B68 ldr r3, [r3]
|
||
272 00e8 1846 mov r0, r3
|
||
273 00ea FFF7FEFF bl __aeabi_i2d
|
||
274 00ee 4FF00002 mov r2, #0
|
||
275 00f2 194B ldr r3, .L8+20
|
||
276 00f4 FFF7FEFF bl __aeabi_ddiv
|
||
277 00f8 0246 mov r2, r0
|
||
278 00fa 0B46 mov r3, r1
|
||
279 .loc 1 102 16
|
||
280 00fc 1046 mov r0, r2
|
||
281 00fe 1946 mov r1, r3
|
||
282 0100 FFF7FEFF bl __aeabi_d2f
|
||
283 0104 0346 mov r3, r0 @ float
|
||
284 0106 00EE103A vmov s0, r3
|
||
285 010a FFF7FEFF bl roundf
|
||
286 010e F0EE407A vmov.f32 s15, s0
|
||
287 .loc 1 102 13 discriminator 1
|
||
288 0112 FCEEE77A vcvt.u32.f32 s15, s15
|
||
289 0116 C7ED017A vstr.32 s15, [r7, #4] @ int
|
||
290 011a 3B79 ldrb r3, [r7, #4]
|
||
291 011c DBB2 uxtb r3, r3
|
||
292 011e BB75 strb r3, [r7, #22]
|
||
103:Core/Src/can.c **** data[7] = ((highest_temp) >> 4); // 8 bit highest cell temperature
|
||
293 .loc 1 103 13
|
||
294 0120 BB89 ldrh r3, [r7, #12]
|
||
295 0122 1B09 lsrs r3, r3, #4
|
||
296 0124 9BB2 uxth r3, r3
|
||
297 0126 DBB2 uxtb r3, r3
|
||
298 0128 FB75 strb r3, [r7, #23]
|
||
104:Core/Src/can.c **** //data[7] = state.error_source;
|
||
105:Core/Src/can.c **** ftcan_transmit(CAN_ID_OUT, data, sizeof(data));
|
||
299 .loc 1 105 5
|
||
300 012a 07F11003 add r3, r7, #16
|
||
301 012e 0822 movs r2, #8
|
||
302 0130 1946 mov r1, r3
|
||
303 0132 40F20250 movw r0, #1282
|
||
304 0136 FFF7FEFF bl ftcan_transmit
|
||
305 013a 00E0 b .L4
|
||
306 .L7:
|
||
ARM GAS /tmp/ccrYTcjJ.s page 8
|
||
|
||
|
||
307 .LBE2:
|
||
87:Core/Src/can.c **** else {
|
||
308 .loc 1 87 5
|
||
309 013c 00BF nop
|
||
310 .L4:
|
||
106:Core/Src/can.c **** }
|
||
107:Core/Src/can.c **** }
|
||
311 .loc 1 107 1
|
||
312 013e 1837 adds r7, r7, #24
|
||
313 .cfi_def_cfa_offset 8
|
||
314 0140 BD46 mov sp, r7
|
||
315 .cfi_def_cfa_register 13
|
||
316 @ sp needed
|
||
317 0142 80BD pop {r7, pc}
|
||
318 .L9:
|
||
319 .align 2
|
||
320 .L8:
|
||
321 0144 00000000 .word can_status_timer
|
||
322 0148 00000000 .word state
|
||
323 014c 00000000 .word current_powerground_status
|
||
324 0150 00000000 .word current_soc
|
||
325 0154 00000000 .word RELAY_BAT_SIDE_VOLTAGE
|
||
326 0158 00408F40 .word 1083129856
|
||
327 015c 00000000 .word RELAY_ESC_SIDE_VOLTAGE
|
||
328 0160 00000000 .word CURRENT_MEASUREMENT
|
||
329 .cfi_endproc
|
||
330 .LFE131:
|
||
332 .section .text.can_handle_send_log,"ax",%progbits
|
||
333 .align 1
|
||
334 .global can_handle_send_log
|
||
335 .syntax unified
|
||
336 .thumb
|
||
337 .thumb_func
|
||
339 can_handle_send_log:
|
||
340 .LFB132:
|
||
108:Core/Src/can.c ****
|
||
109:Core/Src/can.c **** void can_handle_send_log(){
|
||
341 .loc 1 109 27
|
||
342 .cfi_startproc
|
||
343 @ args = 0, pretend = 0, frame = 8
|
||
344 @ frame_needed = 1, uses_anonymous_args = 0
|
||
345 0000 80B5 push {r7, lr}
|
||
346 .cfi_def_cfa_offset 8
|
||
347 .cfi_offset 7, -8
|
||
348 .cfi_offset 14, -4
|
||
349 0002 82B0 sub sp, sp, #8
|
||
350 .cfi_def_cfa_offset 16
|
||
351 0004 00AF add r7, sp, #0
|
||
352 .cfi_def_cfa_register 7
|
||
110:Core/Src/can.c **** if (can_log_timer > HAL_GetTick())
|
||
353 .loc 1 110 23
|
||
354 0006 FFF7FEFF bl HAL_GetTick
|
||
355 000a 0246 mov r2, r0
|
||
356 .loc 1 110 21 discriminator 1
|
||
357 000c 214B ldr r3, .L15
|
||
358 000e 1B68 ldr r3, [r3]
|
||
359 .loc 1 110 6 discriminator 1
|
||
ARM GAS /tmp/ccrYTcjJ.s page 9
|
||
|
||
|
||
360 0010 9A42 cmp r2, r3
|
||
361 0012 3BD3 bcc .L14
|
||
362 .LBB3:
|
||
111:Core/Src/can.c **** return;
|
||
112:Core/Src/can.c **** else {
|
||
113:Core/Src/can.c **** uint8_t data[4] = {};
|
||
363 .loc 1 113 13
|
||
364 0014 0023 movs r3, #0
|
||
365 0016 7B60 str r3, [r7, #4]
|
||
114:Core/Src/can.c **** can_log_timer = HAL_GetTick() + CAN_LOGGING_FREQ;
|
||
366 .loc 1 114 21
|
||
367 0018 FFF7FEFF bl HAL_GetTick
|
||
368 001c 0346 mov r3, r0
|
||
369 .loc 1 114 35 discriminator 1
|
||
370 001e C833 adds r3, r3, #200
|
||
371 .loc 1 114 19 discriminator 1
|
||
372 0020 1C4A ldr r2, .L15
|
||
373 0022 1360 str r3, [r2]
|
||
115:Core/Src/can.c **** data[0] = id_to_log;
|
||
374 .loc 1 115 13
|
||
375 0024 1C4B ldr r3, .L15+4
|
||
376 0026 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
377 0028 3B71 strb r3, [r7, #4]
|
||
116:Core/Src/can.c **** data[1] = module.cellVoltages[id_to_log] >> 8;
|
||
378 .loc 1 116 34
|
||
379 002a 1B4B ldr r3, .L15+4
|
||
380 002c 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
381 002e 1A46 mov r2, r3
|
||
382 0030 1A4B ldr r3, .L15+8
|
||
383 0032 33F91230 ldrsh r3, [r3, r2, lsl #1]
|
||
384 .loc 1 116 13
|
||
385 0036 1B12 asrs r3, r3, #8
|
||
386 0038 1BB2 sxth r3, r3
|
||
387 003a DBB2 uxtb r3, r3
|
||
388 003c 7B71 strb r3, [r7, #5]
|
||
117:Core/Src/can.c **** data[2] = module.cellVoltages[id_to_log];
|
||
389 .loc 1 117 34
|
||
390 003e 164B ldr r3, .L15+4
|
||
391 0040 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
392 0042 1A46 mov r2, r3
|
||
393 0044 154B ldr r3, .L15+8
|
||
394 0046 33F91230 ldrsh r3, [r3, r2, lsl #1]
|
||
395 .loc 1 117 13
|
||
396 004a DBB2 uxtb r3, r3
|
||
397 004c BB71 strb r3, [r7, #6]
|
||
118:Core/Src/can.c **** data[3] = tmp1075_temps[id_to_log] >> 4;
|
||
398 .loc 1 118 28
|
||
399 004e 124B ldr r3, .L15+4
|
||
400 0050 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
401 0052 1A46 mov r2, r3
|
||
402 0054 124B ldr r3, .L15+12
|
||
403 0056 33F91230 ldrsh r3, [r3, r2, lsl #1]
|
||
404 .loc 1 118 13
|
||
405 005a 1B11 asrs r3, r3, #4
|
||
406 005c 1BB2 sxth r3, r3
|
||
407 005e DBB2 uxtb r3, r3
|
||
408 0060 FB71 strb r3, [r7, #7]
|
||
ARM GAS /tmp/ccrYTcjJ.s page 10
|
||
|
||
|
||
119:Core/Src/can.c **** ftcan_transmit(CAN_ID_LOG, data, 4);
|
||
409 .loc 1 119 5
|
||
410 0062 3B1D adds r3, r7, #4
|
||
411 0064 0422 movs r2, #4
|
||
412 0066 1946 mov r1, r3
|
||
413 0068 40F20350 movw r0, #1283
|
||
414 006c FFF7FEFF bl ftcan_transmit
|
||
120:Core/Src/can.c **** id_to_log++;
|
||
415 .loc 1 120 14
|
||
416 0070 094B ldr r3, .L15+4
|
||
417 0072 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
418 0074 0133 adds r3, r3, #1
|
||
419 0076 DAB2 uxtb r2, r3
|
||
420 0078 074B ldr r3, .L15+4
|
||
421 007a 1A70 strb r2, [r3]
|
||
121:Core/Src/can.c **** if (id_to_log == 13)
|
||
422 .loc 1 121 19
|
||
423 007c 064B ldr r3, .L15+4
|
||
424 007e 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
425 .loc 1 121 8
|
||
426 0080 0D2B cmp r3, #13
|
||
427 0082 04D1 bne .L10
|
||
122:Core/Src/can.c **** id_to_log = 0;
|
||
428 .loc 1 122 17
|
||
429 0084 044B ldr r3, .L15+4
|
||
430 0086 0022 movs r2, #0
|
||
431 0088 1A70 strb r2, [r3]
|
||
432 008a 00E0 b .L10
|
||
433 .L14:
|
||
434 .LBE3:
|
||
111:Core/Src/can.c **** else {
|
||
435 .loc 1 111 5
|
||
436 008c 00BF nop
|
||
437 .L10:
|
||
123:Core/Src/can.c **** }
|
||
124:Core/Src/can.c **** /*
|
||
125:Core/Src/can.c **** 021E 30
|
||
126:Core/Src/can.c **** 0232 50
|
||
127:Core/Src/can.c **** 0238 60
|
||
128:Core/Src/can.c **** 0246 70
|
||
129:Core/Src/can.c **** 0250 80
|
||
130:Core/Src/can.c **** 025A 90
|
||
131:Core/Src/can.c **** 0264 100
|
||
132:Core/Src/can.c **** */
|
||
133:Core/Src/can.c **** }
|
||
438 .loc 1 133 1
|
||
439 008e 0837 adds r7, r7, #8
|
||
440 .cfi_def_cfa_offset 8
|
||
441 0090 BD46 mov sp, r7
|
||
442 .cfi_def_cfa_register 13
|
||
443 @ sp needed
|
||
444 0092 80BD pop {r7, pc}
|
||
445 .L16:
|
||
446 .align 2
|
||
447 .L15:
|
||
448 0094 00000000 .word can_log_timer
|
||
449 0098 00000000 .word id_to_log
|
||
ARM GAS /tmp/ccrYTcjJ.s page 11
|
||
|
||
|
||
450 009c 00000000 .word module
|
||
451 00a0 00000000 .word tmp1075_temps
|
||
452 .cfi_endproc
|
||
453 .LFE132:
|
||
455 .section .text.can_handle_recieve_command,"ax",%progbits
|
||
456 .align 1
|
||
457 .global can_handle_recieve_command
|
||
458 .syntax unified
|
||
459 .thumb
|
||
460 .thumb_func
|
||
462 can_handle_recieve_command:
|
||
463 .LFB133:
|
||
134:Core/Src/can.c ****
|
||
135:Core/Src/can.c **** /*
|
||
136:Core/Src/can.c **** can_handle_recieve_command() should only check if the message is valid and then hand it
|
||
137:Core/Src/can.c **** to the sm_handle_ams_in() which handles the state machine transition.
|
||
138:Core/Src/can.c ****
|
||
139:Core/Src/can.c **** This function recieves a command from the Autobox with the CAN ID of 0x501.
|
||
140:Core/Src/can.c **** with format of:
|
||
141:Core/Src/can.c **** data[0] = target state
|
||
142:Core/Src/can.c **** 0x00 STATE_INACTIVE | disconnect power to the ESC of powerground. Send it to return the mvbms to
|
||
143:Core/Src/can.c **** 0x01 STATE_READY | connect power to the ESC of powerground and but with no PWM signal.
|
||
144:Core/Src/can.c **** 0x02 STATE_ACTIVE | activate powerground at (data[1]) percent.
|
||
145:Core/Src/can.c ****
|
||
146:Core/Src/can.c **** allowed transitions:
|
||
147:Core/Src/can.c **** STATE_INACTIVE -> STATE_READY
|
||
148:Core/Src/can.c **** STATE_READY -> STATE_INACTIVE, STATE_ACTIVE
|
||
149:Core/Src/can.c **** STATE_ACTIVE -> STATE_INACTIVE, STATE_READY
|
||
150:Core/Src/can.c **** */
|
||
151:Core/Src/can.c **** void can_handle_recieve_command(const uint8_t *data){
|
||
464 .loc 1 151 53
|
||
465 .cfi_startproc
|
||
466 @ args = 0, pretend = 0, frame = 8
|
||
467 @ frame_needed = 1, uses_anonymous_args = 0
|
||
468 0000 80B5 push {r7, lr}
|
||
469 .cfi_def_cfa_offset 8
|
||
470 .cfi_offset 7, -8
|
||
471 .cfi_offset 14, -4
|
||
472 0002 82B0 sub sp, sp, #8
|
||
473 .cfi_def_cfa_offset 16
|
||
474 0004 00AF add r7, sp, #0
|
||
475 .cfi_def_cfa_register 7
|
||
476 0006 7860 str r0, [r7, #4]
|
||
152:Core/Src/can.c **** if (data[0] == 0x00){
|
||
477 .loc 1 152 11
|
||
478 0008 7B68 ldr r3, [r7, #4]
|
||
479 000a 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
480 .loc 1 152 6
|
||
481 000c 002B cmp r3, #0
|
||
482 000e 03D1 bne .L18
|
||
153:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
483 .loc 1 153 5
|
||
484 0010 7868 ldr r0, [r7, #4]
|
||
485 0012 FFF7FEFF bl sm_handle_ams_in
|
||
154:Core/Src/can.c **** } else if (data[0] == 0x01 && data[1] == 0x00){
|
||
155:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
156:Core/Src/can.c **** } else if (data[0] == 0x02 && data[1] <= 100) {
|
||
ARM GAS /tmp/ccrYTcjJ.s page 12
|
||
|
||
|
||
157:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
158:Core/Src/can.c **** } else if (data[0] == 0xF0 && data[1] == 0x00) {
|
||
159:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
160:Core/Src/can.c **** } else if (data[0] == 0xF1 && data[1] == 0x00) {
|
||
161:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
162:Core/Src/can.c **** } else if (data[0] == 0xFF && data[1] == 0x00) {
|
||
163:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
164:Core/Src/can.c **** }
|
||
165:Core/Src/can.c **** }
|
||
486 .loc 1 165 1
|
||
487 0016 40E0 b .L24
|
||
488 .L18:
|
||
154:Core/Src/can.c **** } else if (data[0] == 0x01 && data[1] == 0x00){
|
||
489 .loc 1 154 18
|
||
490 0018 7B68 ldr r3, [r7, #4]
|
||
491 001a 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
154:Core/Src/can.c **** } else if (data[0] == 0x01 && data[1] == 0x00){
|
||
492 .loc 1 154 13
|
||
493 001c 012B cmp r3, #1
|
||
494 001e 08D1 bne .L20
|
||
154:Core/Src/can.c **** } else if (data[0] == 0x01 && data[1] == 0x00){
|
||
495 .loc 1 154 37 discriminator 1
|
||
496 0020 7B68 ldr r3, [r7, #4]
|
||
497 0022 0133 adds r3, r3, #1
|
||
498 0024 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
154:Core/Src/can.c **** } else if (data[0] == 0x01 && data[1] == 0x00){
|
||
499 .loc 1 154 30 discriminator 1
|
||
500 0026 002B cmp r3, #0
|
||
501 0028 03D1 bne .L20
|
||
155:Core/Src/can.c **** } else if (data[0] == 0x02 && data[1] <= 100) {
|
||
502 .loc 1 155 5
|
||
503 002a 7868 ldr r0, [r7, #4]
|
||
504 002c FFF7FEFF bl sm_handle_ams_in
|
||
505 0030 33E0 b .L19
|
||
506 .L20:
|
||
156:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
507 .loc 1 156 18
|
||
508 0032 7B68 ldr r3, [r7, #4]
|
||
509 0034 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
156:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
510 .loc 1 156 13
|
||
511 0036 022B cmp r3, #2
|
||
512 0038 08D1 bne .L21
|
||
156:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
513 .loc 1 156 37 discriminator 1
|
||
514 003a 7B68 ldr r3, [r7, #4]
|
||
515 003c 0133 adds r3, r3, #1
|
||
516 003e 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
156:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
517 .loc 1 156 30 discriminator 1
|
||
518 0040 642B cmp r3, #100
|
||
519 0042 03D8 bhi .L21
|
||
157:Core/Src/can.c **** } else if (data[0] == 0xF0 && data[1] == 0x00) {
|
||
520 .loc 1 157 5
|
||
521 0044 7868 ldr r0, [r7, #4]
|
||
522 0046 FFF7FEFF bl sm_handle_ams_in
|
||
523 004a 26E0 b .L19
|
||
ARM GAS /tmp/ccrYTcjJ.s page 13
|
||
|
||
|
||
524 .L21:
|
||
158:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
525 .loc 1 158 18
|
||
526 004c 7B68 ldr r3, [r7, #4]
|
||
527 004e 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
158:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
528 .loc 1 158 13
|
||
529 0050 F02B cmp r3, #240
|
||
530 0052 08D1 bne .L22
|
||
158:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
531 .loc 1 158 37 discriminator 1
|
||
532 0054 7B68 ldr r3, [r7, #4]
|
||
533 0056 0133 adds r3, r3, #1
|
||
534 0058 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
158:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
535 .loc 1 158 30 discriminator 1
|
||
536 005a 002B cmp r3, #0
|
||
537 005c 03D1 bne .L22
|
||
159:Core/Src/can.c **** } else if (data[0] == 0xF1 && data[1] == 0x00) {
|
||
538 .loc 1 159 5
|
||
539 005e 7868 ldr r0, [r7, #4]
|
||
540 0060 FFF7FEFF bl sm_handle_ams_in
|
||
541 0064 19E0 b .L19
|
||
542 .L22:
|
||
160:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
543 .loc 1 160 18
|
||
544 0066 7B68 ldr r3, [r7, #4]
|
||
545 0068 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
160:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
546 .loc 1 160 13
|
||
547 006a F12B cmp r3, #241
|
||
548 006c 08D1 bne .L23
|
||
160:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
549 .loc 1 160 37 discriminator 1
|
||
550 006e 7B68 ldr r3, [r7, #4]
|
||
551 0070 0133 adds r3, r3, #1
|
||
552 0072 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
160:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
553 .loc 1 160 30 discriminator 1
|
||
554 0074 002B cmp r3, #0
|
||
555 0076 03D1 bne .L23
|
||
161:Core/Src/can.c **** } else if (data[0] == 0xFF && data[1] == 0x00) {
|
||
556 .loc 1 161 5
|
||
557 0078 7868 ldr r0, [r7, #4]
|
||
558 007a FFF7FEFF bl sm_handle_ams_in
|
||
559 007e 0CE0 b .L19
|
||
560 .L23:
|
||
162:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
561 .loc 1 162 18
|
||
562 0080 7B68 ldr r3, [r7, #4]
|
||
563 0082 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
162:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
564 .loc 1 162 13
|
||
565 0084 FF2B cmp r3, #255
|
||
566 0086 08D1 bne .L24
|
||
162:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
567 .loc 1 162 37 discriminator 1
|
||
ARM GAS /tmp/ccrYTcjJ.s page 14
|
||
|
||
|
||
568 0088 7B68 ldr r3, [r7, #4]
|
||
569 008a 0133 adds r3, r3, #1
|
||
570 008c 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
162:Core/Src/can.c **** sm_handle_ams_in(data);
|
||
571 .loc 1 162 30 discriminator 1
|
||
572 008e 002B cmp r3, #0
|
||
573 0090 03D1 bne .L24
|
||
163:Core/Src/can.c **** }
|
||
574 .loc 1 163 5
|
||
575 0092 7868 ldr r0, [r7, #4]
|
||
576 0094 FFF7FEFF bl sm_handle_ams_in
|
||
577 .loc 1 165 1
|
||
578 0098 FFE7 b .L24
|
||
579 .L19:
|
||
580 .L24:
|
||
581 009a 00BF nop
|
||
582 009c 0837 adds r7, r7, #8
|
||
583 .cfi_def_cfa_offset 8
|
||
584 009e BD46 mov sp, r7
|
||
585 .cfi_def_cfa_register 13
|
||
586 @ sp needed
|
||
587 00a0 80BD pop {r7, pc}
|
||
588 .cfi_endproc
|
||
589 .LFE133:
|
||
591 .section .text.can_handle_dump,"ax",%progbits
|
||
592 .align 1
|
||
593 .global can_handle_dump
|
||
594 .syntax unified
|
||
595 .thumb
|
||
596 .thumb_func
|
||
598 can_handle_dump:
|
||
599 .LFB134:
|
||
166:Core/Src/can.c ****
|
||
167:Core/Src/can.c **** void can_handle_dump() {
|
||
600 .loc 1 167 24
|
||
601 .cfi_startproc
|
||
602 @ args = 0, pretend = 0, frame = 16
|
||
603 @ frame_needed = 1, uses_anonymous_args = 0
|
||
604 0000 80B5 push {r7, lr}
|
||
605 .cfi_def_cfa_offset 8
|
||
606 .cfi_offset 7, -8
|
||
607 .cfi_offset 14, -4
|
||
608 0002 84B0 sub sp, sp, #16
|
||
609 .cfi_def_cfa_offset 24
|
||
610 0004 00AF add r7, sp, #0
|
||
611 .cfi_def_cfa_register 7
|
||
168:Core/Src/can.c **** uint8_t* data = {};
|
||
612 .loc 1 168 12
|
||
613 0006 0023 movs r3, #0
|
||
614 0008 BB60 str r3, [r7, #8]
|
||
169:Core/Src/can.c **** HAL_StatusTypeDef status = HAL_OK;
|
||
615 .loc 1 169 21
|
||
616 000a 0023 movs r3, #0
|
||
617 000c FB71 strb r3, [r7, #7]
|
||
170:Core/Src/can.c **** while (status == HAL_OK){
|
||
618 .loc 1 170 9
|
||
619 000e 22E0 b .L26
|
||
ARM GAS /tmp/ccrYTcjJ.s page 15
|
||
|
||
|
||
620 .L29:
|
||
171:Core/Src/can.c **** HAL_Delay(2);
|
||
621 .loc 1 171 5
|
||
622 0010 0220 movs r0, #2
|
||
623 0012 FFF7FEFF bl HAL_Delay
|
||
172:Core/Src/can.c **** eeprom_read(data, 62);
|
||
624 .loc 1 172 5
|
||
625 0016 3E21 movs r1, #62
|
||
626 0018 B868 ldr r0, [r7, #8]
|
||
627 001a FFF7FEFF bl eeprom_read
|
||
628 .LBB4:
|
||
173:Core/Src/can.c **** for (int i = 0; i < (EEPROM_MEMORY_SIZE-8)/8; i += 8) {
|
||
629 .loc 1 173 14
|
||
630 001e 0023 movs r3, #0
|
||
631 0020 FB60 str r3, [r7, #12]
|
||
632 .loc 1 173 5
|
||
633 0022 0BE0 b .L27
|
||
634 .L28:
|
||
174:Core/Src/can.c **** ftcan_transmit(CAN_ID_OUT, &data[i], 8);
|
||
635 .loc 1 174 7
|
||
636 0024 FB68 ldr r3, [r7, #12]
|
||
637 .loc 1 174 34
|
||
638 0026 BA68 ldr r2, [r7, #8]
|
||
639 0028 1344 add r3, r3, r2
|
||
640 .loc 1 174 7
|
||
641 002a 0822 movs r2, #8
|
||
642 002c 1946 mov r1, r3
|
||
643 002e 40F20250 movw r0, #1282
|
||
644 0032 FFF7FEFF bl ftcan_transmit
|
||
173:Core/Src/can.c **** for (int i = 0; i < (EEPROM_MEMORY_SIZE-8)/8; i += 8) {
|
||
645 .loc 1 173 53 discriminator 3
|
||
646 0036 FB68 ldr r3, [r7, #12]
|
||
647 0038 0833 adds r3, r3, #8
|
||
648 003a FB60 str r3, [r7, #12]
|
||
649 .L27:
|
||
173:Core/Src/can.c **** for (int i = 0; i < (EEPROM_MEMORY_SIZE-8)/8; i += 8) {
|
||
650 .loc 1 173 23 discriminator 1
|
||
651 003c FB68 ldr r3, [r7, #12]
|
||
652 003e 43F6FE72 movw r2, #16382
|
||
653 0042 9342 cmp r3, r2
|
||
654 0044 EEDD ble .L28
|
||
655 .LBE4:
|
||
175:Core/Src/can.c **** }
|
||
176:Core/Src/can.c **** ftcan_transmit(CAN_ID_OUT, &data[56], 6);
|
||
656 .loc 1 176 32
|
||
657 0046 BB68 ldr r3, [r7, #8]
|
||
658 0048 3833 adds r3, r3, #56
|
||
659 .loc 1 176 5
|
||
660 004a 0622 movs r2, #6
|
||
661 004c 1946 mov r1, r3
|
||
662 004e 40F20250 movw r0, #1282
|
||
663 0052 FFF7FEFF bl ftcan_transmit
|
||
664 .L26:
|
||
170:Core/Src/can.c **** HAL_Delay(2);
|
||
665 .loc 1 170 17
|
||
666 0056 FB79 ldrb r3, [r7, #7] @ zero_extendqisi2
|
||
667 0058 002B cmp r3, #0
|
||
ARM GAS /tmp/ccrYTcjJ.s page 16
|
||
|
||
|
||
668 005a D9D0 beq .L29
|
||
177:Core/Src/can.c **** }
|
||
178:Core/Src/can.c **** read_address = 0;
|
||
669 .loc 1 178 16
|
||
670 005c 034B ldr r3, .L30
|
||
671 005e 0022 movs r2, #0
|
||
672 0060 1A60 str r2, [r3]
|
||
179:Core/Src/can.c **** }
|
||
673 .loc 1 179 1
|
||
674 0062 00BF nop
|
||
675 0064 1037 adds r7, r7, #16
|
||
676 .cfi_def_cfa_offset 8
|
||
677 0066 BD46 mov sp, r7
|
||
678 .cfi_def_cfa_register 13
|
||
679 @ sp needed
|
||
680 0068 80BD pop {r7, pc}
|
||
681 .L31:
|
||
682 006a 00BF .align 2
|
||
683 .L30:
|
||
684 006c 00000000 .word read_address
|
||
685 .cfi_endproc
|
||
686 .LFE134:
|
||
688 .section .text.ftcan_msg_received_cb,"ax",%progbits
|
||
689 .align 1
|
||
690 .global ftcan_msg_received_cb
|
||
691 .syntax unified
|
||
692 .thumb
|
||
693 .thumb_func
|
||
695 ftcan_msg_received_cb:
|
||
696 .LFB135:
|
||
180:Core/Src/can.c ****
|
||
181:Core/Src/can.c **** /*
|
||
182:Core/Src/can.c **** implements the _weak method ftcan_msg_recieved_cb() which throws an interrupt when a CAN message is
|
||
183:Core/Src/can.c **** it only checks if the id is and datalen is correct thans hands data over to can_handle_recieve_comm
|
||
184:Core/Src/can.c ****
|
||
185:Core/Src/can.c **** in MXCUBE under CAN NVIC settings "USB low priority or CAN_RX0 interrupts" has to be on
|
||
186:Core/Src/can.c **** */
|
||
187:Core/Src/can.c **** void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data){
|
||
697 .loc 1 187 77
|
||
698 .cfi_startproc
|
||
699 @ args = 0, pretend = 0, frame = 16
|
||
700 @ frame_needed = 1, uses_anonymous_args = 0
|
||
701 0000 80B5 push {r7, lr}
|
||
702 .cfi_def_cfa_offset 8
|
||
703 .cfi_offset 7, -8
|
||
704 .cfi_offset 14, -4
|
||
705 0002 84B0 sub sp, sp, #16
|
||
706 .cfi_def_cfa_offset 24
|
||
707 0004 00AF add r7, sp, #0
|
||
708 .cfi_def_cfa_register 7
|
||
709 0006 0346 mov r3, r0
|
||
710 0008 B960 str r1, [r7, #8]
|
||
711 000a 7A60 str r2, [r7, #4]
|
||
712 000c FB81 strh r3, [r7, #14] @ movhi
|
||
188:Core/Src/can.c **** if (programming_mode == 1){
|
||
713 .loc 1 188 24
|
||
714 000e 1F4B ldr r3, .L37
|
||
ARM GAS /tmp/ccrYTcjJ.s page 17
|
||
|
||
|
||
715 0010 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
716 .loc 1 188 6
|
||
717 0012 002B cmp r3, #0
|
||
718 0014 03D0 beq .L33
|
||
189:Core/Src/can.c **** can_handle_recieve_command(data);
|
||
719 .loc 1 189 5
|
||
720 0016 7868 ldr r0, [r7, #4]
|
||
721 0018 FFF7FEFF bl can_handle_recieve_command
|
||
190:Core/Src/can.c **** return;
|
||
722 .loc 1 190 5
|
||
723 001c 32E0 b .L32
|
||
724 .L33:
|
||
191:Core/Src/can.c **** }
|
||
192:Core/Src/can.c ****
|
||
193:Core/Src/can.c **** if (id == 0x501 && datalen == 2){
|
||
725 .loc 1 193 6
|
||
726 001e FB89 ldrh r3, [r7, #14]
|
||
727 0020 40F20152 movw r2, #1281
|
||
728 0024 9342 cmp r3, r2
|
||
729 0026 2DD1 bne .L32
|
||
730 .loc 1 193 19 discriminator 1
|
||
731 0028 BB68 ldr r3, [r7, #8]
|
||
732 002a 022B cmp r3, #2
|
||
733 002c 2AD1 bne .L32
|
||
194:Core/Src/can.c **** can_timeout_timer = HAL_GetTick() + CAN_TIMEOUT;
|
||
734 .loc 1 194 25
|
||
735 002e FFF7FEFF bl HAL_GetTick
|
||
736 0032 0346 mov r3, r0
|
||
737 .loc 1 194 39 discriminator 1
|
||
738 0034 03F59C53 add r3, r3, #4992
|
||
739 0038 0833 adds r3, r3, #8
|
||
740 .loc 1 194 23 discriminator 1
|
||
741 003a 154A ldr r2, .L37+4
|
||
742 003c 1360 str r3, [r2]
|
||
195:Core/Src/can.c **** if (state.current_state == STATE_ERROR){
|
||
743 .loc 1 195 14
|
||
744 003e 154B ldr r3, .L37+8
|
||
745 0040 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
746 .loc 1 195 8
|
||
747 0042 072B cmp r3, #7
|
||
748 0044 05D1 bne .L35
|
||
196:Core/Src/can.c **** last_message[0] = 0;
|
||
749 .loc 1 196 23
|
||
750 0046 144B ldr r3, .L37+12
|
||
751 0048 0022 movs r2, #0
|
||
752 004a 1A70 strb r2, [r3]
|
||
197:Core/Src/can.c **** last_message[1] = 0;
|
||
753 .loc 1 197 23
|
||
754 004c 124B ldr r3, .L37+12
|
||
755 004e 0022 movs r2, #0
|
||
756 0050 5A70 strb r2, [r3, #1]
|
||
757 .L35:
|
||
198:Core/Src/can.c **** }
|
||
199:Core/Src/can.c **** if (last_message[0] != data[0] || last_message[1] != data[1]){
|
||
758 .loc 1 199 21
|
||
759 0052 114B ldr r3, .L37+12
|
||
760 0054 1A78 ldrb r2, [r3] @ zero_extendqisi2
|
||
ARM GAS /tmp/ccrYTcjJ.s page 18
|
||
|
||
|
||
761 .loc 1 199 25
|
||
762 0056 7B68 ldr r3, [r7, #4]
|
||
763 0058 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
764 .loc 1 199 8
|
||
765 005a 9A42 cmp r2, r3
|
||
766 005c 06D1 bne .L36
|
||
767 .loc 1 199 51 discriminator 1
|
||
768 005e 0E4B ldr r3, .L37+12
|
||
769 0060 5A78 ldrb r2, [r3, #1] @ zero_extendqisi2
|
||
770 .loc 1 199 62 discriminator 1
|
||
771 0062 7B68 ldr r3, [r7, #4]
|
||
772 0064 0133 adds r3, r3, #1
|
||
773 .loc 1 199 55 discriminator 1
|
||
774 0066 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
||
775 .loc 1 199 36 discriminator 1
|
||
776 0068 9A42 cmp r2, r3
|
||
777 006a 0BD0 beq .L32
|
||
778 .L36:
|
||
200:Core/Src/can.c **** last_message[0] = data[0];
|
||
779 .loc 1 200 29
|
||
780 006c 7B68 ldr r3, [r7, #4]
|
||
781 006e 1A78 ldrb r2, [r3] @ zero_extendqisi2
|
||
782 .loc 1 200 23
|
||
783 0070 094B ldr r3, .L37+12
|
||
784 0072 1A70 strb r2, [r3]
|
||
201:Core/Src/can.c **** last_message[1] = data[1];
|
||
785 .loc 1 201 29
|
||
786 0074 7B68 ldr r3, [r7, #4]
|
||
787 0076 0133 adds r3, r3, #1
|
||
788 0078 1A78 ldrb r2, [r3] @ zero_extendqisi2
|
||
789 .loc 1 201 23
|
||
790 007a 074B ldr r3, .L37+12
|
||
791 007c 5A70 strb r2, [r3, #1]
|
||
202:Core/Src/can.c **** can_handle_recieve_command(data);
|
||
792 .loc 1 202 7
|
||
793 007e 7868 ldr r0, [r7, #4]
|
||
794 0080 FFF7FEFF bl can_handle_recieve_command
|
||
795 .L32:
|
||
203:Core/Src/can.c **** }
|
||
204:Core/Src/can.c **** }
|
||
205:Core/Src/can.c **** }
|
||
796 .loc 1 205 1
|
||
797 0084 1037 adds r7, r7, #16
|
||
798 .cfi_def_cfa_offset 8
|
||
799 0086 BD46 mov sp, r7
|
||
800 .cfi_def_cfa_register 13
|
||
801 @ sp needed
|
||
802 0088 80BD pop {r7, pc}
|
||
803 .L38:
|
||
804 008a 00BF .align 2
|
||
805 .L37:
|
||
806 008c 00000000 .word programming_mode
|
||
807 0090 00000000 .word can_timeout_timer
|
||
808 0094 00000000 .word state
|
||
809 0098 00000000 .word last_message
|
||
810 .cfi_endproc
|
||
811 .LFE135:
|
||
ARM GAS /tmp/ccrYTcjJ.s page 19
|
||
|
||
|
||
813 .text
|
||
814 .Letext0:
|
||
815 .file 2 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/arm-none-eabi/incl
|
||
816 .file 3 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/arm-none-eabi/incl
|
||
817 .file 4 "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f302xc.h"
|
||
818 .file 5 "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h"
|
||
819 .file 6 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/lib/gcc/arm-none-e
|
||
820 .file 7 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_def.h"
|
||
821 .file 8 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_can.h"
|
||
822 .file 9 "Core/Inc/ADBMS_LL_Driver.h"
|
||
823 .file 10 "Core/Inc/ADBMS_Abstraction.h"
|
||
824 .file 11 "Core/Inc/AMS_HighLevel.h"
|
||
825 .file 12 "Core/Inc/soc_estimation.h"
|
||
826 .file 13 "Core/Inc/TMP1075.h"
|
||
827 .file 14 "Core/Inc/eeprom.h"
|
||
828 .file 15 "Core/Inc/PWM_control.h"
|
||
829 .file 16 "Core/Inc/state_machine.h"
|
||
830 .file 17 "Core/Inc/can.h"
|
||
831 .file 18 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal.h"
|
||
832 .file 19 "Core/Lib/can-halal/can-halal.h"
|
||
833 .file 20 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/arm-none-eabi/inc
|
||
ARM GAS /tmp/ccrYTcjJ.s page 20
|
||
|
||
|
||
DEFINED SYMBOLS
|
||
*ABS*:00000000 can.c
|
||
/tmp/ccrYTcjJ.s:24 .bss.id_to_log:00000000 id_to_log
|
||
/tmp/ccrYTcjJ.s:25 .bss.id_to_log:00000000 $d
|
||
/tmp/ccrYTcjJ.s:31 .bss.last_message:00000000 last_message
|
||
/tmp/ccrYTcjJ.s:28 .bss.last_message:00000000 $d
|
||
/tmp/ccrYTcjJ.s:38 .bss.can_status_timer:00000000 can_status_timer
|
||
/tmp/ccrYTcjJ.s:35 .bss.can_status_timer:00000000 $d
|
||
/tmp/ccrYTcjJ.s:45 .bss.can_log_timer:00000000 can_log_timer
|
||
/tmp/ccrYTcjJ.s:42 .bss.can_log_timer:00000000 $d
|
||
/tmp/ccrYTcjJ.s:52 .bss.can_timeout_timer:00000000 can_timeout_timer
|
||
/tmp/ccrYTcjJ.s:49 .bss.can_timeout_timer:00000000 $d
|
||
/tmp/ccrYTcjJ.s:55 .text.can_init:00000000 $t
|
||
/tmp/ccrYTcjJ.s:61 .text.can_init:00000000 can_init
|
||
/tmp/ccrYTcjJ.s:131 .text.can_init:00000060 $d
|
||
/tmp/ccrYTcjJ.s:143 .text.can_handle_send_status:00000000 $t
|
||
/tmp/ccrYTcjJ.s:149 .text.can_handle_send_status:00000000 can_handle_send_status
|
||
/tmp/ccrYTcjJ.s:321 .text.can_handle_send_status:00000144 $d
|
||
/tmp/ccrYTcjJ.s:333 .text.can_handle_send_log:00000000 $t
|
||
/tmp/ccrYTcjJ.s:339 .text.can_handle_send_log:00000000 can_handle_send_log
|
||
/tmp/ccrYTcjJ.s:448 .text.can_handle_send_log:00000094 $d
|
||
/tmp/ccrYTcjJ.s:456 .text.can_handle_recieve_command:00000000 $t
|
||
/tmp/ccrYTcjJ.s:462 .text.can_handle_recieve_command:00000000 can_handle_recieve_command
|
||
/tmp/ccrYTcjJ.s:592 .text.can_handle_dump:00000000 $t
|
||
/tmp/ccrYTcjJ.s:598 .text.can_handle_dump:00000000 can_handle_dump
|
||
/tmp/ccrYTcjJ.s:684 .text.can_handle_dump:0000006c $d
|
||
/tmp/ccrYTcjJ.s:689 .text.ftcan_msg_received_cb:00000000 $t
|
||
/tmp/ccrYTcjJ.s:695 .text.ftcan_msg_received_cb:00000000 ftcan_msg_received_cb
|
||
/tmp/ccrYTcjJ.s:806 .text.ftcan_msg_received_cb:0000008c $d
|
||
|
||
UNDEFINED SYMBOLS
|
||
ftcan_init
|
||
ftcan_add_filter
|
||
HAL_GetTick
|
||
__aeabi_i2d
|
||
__aeabi_ddiv
|
||
__aeabi_d2f
|
||
sm_check_battery_temperature
|
||
roundf
|
||
ftcan_transmit
|
||
state
|
||
current_powerground_status
|
||
current_soc
|
||
RELAY_BAT_SIDE_VOLTAGE
|
||
RELAY_ESC_SIDE_VOLTAGE
|
||
CURRENT_MEASUREMENT
|
||
module
|
||
tmp1075_temps
|
||
sm_handle_ams_in
|
||
HAL_Delay
|
||
eeprom_read
|
||
read_address
|
||
programming_mode
|