1161 lines
46 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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