ARM GAS /tmp/cc1QLhHg.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 "TMP1075.c" 16 .text 17 .Ltext0: 18 .cfi_sections .debug_frame 19 .file 1 "Core/Src/TMP1075.c" 20 .global tmp1075_temps 21 .section .bss.tmp1075_temps,"aw",%nobits 22 .align 2 25 tmp1075_temps: 26 0000 00000000 .space 26 26 00000000 26 00000000 26 00000000 26 00000000 27 .global tmp1075_failed_sensors 28 .section .bss.tmp1075_failed_sensors,"aw",%nobits 29 .align 2 32 tmp1075_failed_sensors: 33 0000 00000000 .space 4 34 .global nfailed_temp_sensors 35 .section .bss.nfailed_temp_sensors,"aw",%nobits 38 nfailed_temp_sensors: 39 0000 00 .space 1 40 .global hi2c 41 .section .bss.hi2c,"aw",%nobits 42 .align 2 45 hi2c: 46 0000 00000000 .space 4 47 .section .text.tmp1075_init,"ax",%progbits 48 .align 1 49 .global tmp1075_init 50 .syntax unified 51 .thumb 52 .thumb_func 54 tmp1075_init: 55 .LFB130: 1:Core/Src/TMP1075.c **** #include "TMP1075.h" 2:Core/Src/TMP1075.c **** #include "state_machine.h" 3:Core/Src/TMP1075.c **** 4:Core/Src/TMP1075.c **** #define MAX_TEMP_DISCHARGING ((int16_t)(59 / 0.0625f)) 5:Core/Src/TMP1075.c **** #define MIN_TEMP_DISCHARGING ((int16_t)(-20 / 0.0625f)) 6:Core/Src/TMP1075.c **** #define MAX_TEMP_CHARGING ((int16_t)(45 / 0.0625f)) 7:Core/Src/TMP1075.c **** #define MIN_TEMP_CHARGING ((int16_t)(0 / 0.0625f)) ARM GAS /tmp/cc1QLhHg.s page 2 8:Core/Src/TMP1075.c **** 9:Core/Src/TMP1075.c **** #define MAX_FAILED_TEMP 2 //TODO: change value for compliance with the actual number of sensors 10:Core/Src/TMP1075.c **** // TODO: "change value for compliance with the actual number of sensors", change temps to float 11:Core/Src/TMP1075.c **** 12:Core/Src/TMP1075.c **** int16_t tmp1075_temps[N_TEMP_SENSORS] = {0}; 13:Core/Src/TMP1075.c **** uint32_t tmp1075_failed_sensors = 0; 14:Core/Src/TMP1075.c **** uint8_t nfailed_temp_sensors = 0; 15:Core/Src/TMP1075.c **** 16:Core/Src/TMP1075.c **** I2C_HandleTypeDef* hi2c; 17:Core/Src/TMP1075.c **** 18:Core/Src/TMP1075.c **** HAL_StatusTypeDef tmp1075_init(I2C_HandleTypeDef* handle) { 56 .loc 1 18 59 57 .cfi_startproc 58 @ args = 0, pretend = 0, frame = 16 59 @ frame_needed = 1, uses_anonymous_args = 0 60 0000 80B5 push {r7, lr} 61 .cfi_def_cfa_offset 8 62 .cfi_offset 7, -8 63 .cfi_offset 14, -4 64 0002 84B0 sub sp, sp, #16 65 .cfi_def_cfa_offset 24 66 0004 00AF add r7, sp, #0 67 .cfi_def_cfa_register 7 68 0006 7860 str r0, [r7, #4] 19:Core/Src/TMP1075.c **** hi2c = handle; 69 .loc 1 19 8 70 0008 0D4A ldr r2, .L6 71 000a 7B68 ldr r3, [r7, #4] 72 000c 1360 str r3, [r2] 73 .LBB2: 20:Core/Src/TMP1075.c **** for (int i = 0; i < N_TEMP_SENSORS; i++) { 74 .loc 1 20 12 75 000e 0023 movs r3, #0 76 0010 FB60 str r3, [r7, #12] 77 .loc 1 20 3 78 0012 0CE0 b .L2 79 .L5: 80 .LBB3: 21:Core/Src/TMP1075.c **** HAL_StatusTypeDef status = tmp1075_sensor_init(i); 81 .loc 1 21 32 82 0014 F868 ldr r0, [r7, #12] 83 0016 FFF7FEFF bl tmp1075_sensor_init 84 001a 0346 mov r3, r0 85 001c FB72 strb r3, [r7, #11] 22:Core/Src/TMP1075.c **** if (status != HAL_OK) { 86 .loc 1 22 8 87 001e FB7A ldrb r3, [r7, #11] @ zero_extendqisi2 88 0020 002B cmp r3, #0 89 0022 01D0 beq .L3 23:Core/Src/TMP1075.c **** return status; 90 .loc 1 23 14 91 0024 FB7A ldrb r3, [r7, #11] @ zero_extendqisi2 92 0026 06E0 b .L4 93 .L3: 94 .LBE3: 20:Core/Src/TMP1075.c **** HAL_StatusTypeDef status = tmp1075_sensor_init(i); 95 .loc 1 20 40 discriminator 2 ARM GAS /tmp/cc1QLhHg.s page 3 96 0028 FB68 ldr r3, [r7, #12] 97 002a 0133 adds r3, r3, #1 98 002c FB60 str r3, [r7, #12] 99 .L2: 20:Core/Src/TMP1075.c **** HAL_StatusTypeDef status = tmp1075_sensor_init(i); 100 .loc 1 20 21 discriminator 1 101 002e FB68 ldr r3, [r7, #12] 102 0030 0C2B cmp r3, #12 103 0032 EFDD ble .L5 104 .LBE2: 24:Core/Src/TMP1075.c **** } 25:Core/Src/TMP1075.c **** } 26:Core/Src/TMP1075.c **** return HAL_OK; 105 .loc 1 26 10 106 0034 0023 movs r3, #0 107 .L4: 27:Core/Src/TMP1075.c **** } 108 .loc 1 27 1 109 0036 1846 mov r0, r3 110 0038 1037 adds r7, r7, #16 111 .cfi_def_cfa_offset 8 112 003a BD46 mov sp, r7 113 .cfi_def_cfa_register 13 114 @ sp needed 115 003c 80BD pop {r7, pc} 116 .L7: 117 003e 00BF .align 2 118 .L6: 119 0040 00000000 .word hi2c 120 .cfi_endproc 121 .LFE130: 123 .section .text.handle_over_maxtemp,"ax",%progbits 124 .align 1 125 .global handle_over_maxtemp 126 .syntax unified 127 .thumb 128 .thumb_func 130 handle_over_maxtemp: 131 .LFB131: 28:Core/Src/TMP1075.c **** 29:Core/Src/TMP1075.c **** void handle_over_maxtemp(uint8_t index, uint16_t value) { 132 .loc 1 29 57 133 .cfi_startproc 134 @ args = 0, pretend = 0, frame = 16 135 @ frame_needed = 1, uses_anonymous_args = 0 136 0000 B0B5 push {r4, r5, r7, lr} 137 .cfi_def_cfa_offset 16 138 .cfi_offset 4, -16 139 .cfi_offset 5, -12 140 .cfi_offset 7, -8 141 .cfi_offset 14, -4 142 0002 86B0 sub sp, sp, #24 143 .cfi_def_cfa_offset 40 144 0004 02AF add r7, sp, #8 145 .cfi_def_cfa 7, 32 146 0006 0346 mov r3, r0 147 0008 0A46 mov r2, r1 ARM GAS /tmp/cc1QLhHg.s page 4 148 000a FB71 strb r3, [r7, #7] 149 000c 1346 mov r3, r2 @ movhi 150 000e BB80 strh r3, [r7, #4] @ movhi 30:Core/Src/TMP1075.c **** set_error_source(ERROR_SOURCE_TEMPERATURES); 151 .loc 1 30 3 152 0010 0220 movs r0, #2 153 0012 FFF7FEFF bl set_error_source 31:Core/Src/TMP1075.c **** error_data.data_kind = SEK_OVERTEMP; 154 .loc 1 31 24 155 0016 0C4B ldr r3, .L9 156 0018 0022 movs r2, #0 157 001a 5A80 strh r2, [r3, #2] @ movhi 32:Core/Src/TMP1075.c **** error_data.data[0] = index; 158 .loc 1 32 22 159 001c 0A4A ldr r2, .L9 160 001e FB79 ldrb r3, [r7, #7] 161 0020 1371 strb r3, [r2, #4] 33:Core/Src/TMP1075.c **** uint8_t* ptr = &error_data.data[1]; 162 .loc 1 33 12 163 0022 0A4B ldr r3, .L9+4 164 0024 FB60 str r3, [r7, #12] 34:Core/Src/TMP1075.c **** ptr = ftcan_marshal_unsigned(ptr, value, 2); 165 .loc 1 34 9 166 0026 BB88 ldrh r3, [r7, #4] 167 0028 0022 movs r2, #0 168 002a 1C46 mov r4, r3 169 002c 1546 mov r5, r2 170 002e 0223 movs r3, #2 171 0030 0093 str r3, [sp] 172 0032 2246 mov r2, r4 173 0034 2B46 mov r3, r5 174 0036 F868 ldr r0, [r7, #12] 175 0038 FFF7FEFF bl ftcan_marshal_unsigned 176 003c F860 str r0, [r7, #12] 35:Core/Src/TMP1075.c **** } 177 .loc 1 35 1 178 003e 00BF nop 179 0040 1037 adds r7, r7, #16 180 .cfi_def_cfa_offset 16 181 0042 BD46 mov sp, r7 182 .cfi_def_cfa_register 13 183 @ sp needed 184 0044 B0BD pop {r4, r5, r7, pc} 185 .L10: 186 0046 00BF .align 2 187 .L9: 188 0048 00000000 .word error_data 189 004c 05000000 .word error_data+5 190 .cfi_endproc 191 .LFE131: 193 .section .text.tmp1075_measure,"ax",%progbits 194 .align 1 195 .global tmp1075_measure 196 .syntax unified 197 .thumb 198 .thumb_func 200 tmp1075_measure: ARM GAS /tmp/cc1QLhHg.s page 5 201 .LFB132: 36:Core/Src/TMP1075.c **** 37:Core/Src/TMP1075.c **** HAL_StatusTypeDef tmp1075_measure() { 202 .loc 1 37 37 203 .cfi_startproc 204 @ args = 0, pretend = 0, frame = 16 205 @ frame_needed = 1, uses_anonymous_args = 0 206 0000 80B5 push {r7, lr} 207 .cfi_def_cfa_offset 8 208 .cfi_offset 7, -8 209 .cfi_offset 14, -4 210 0002 84B0 sub sp, sp, #16 211 .cfi_def_cfa_offset 24 212 0004 00AF add r7, sp, #0 213 .cfi_def_cfa_register 7 38:Core/Src/TMP1075.c **** int err = 0; 214 .loc 1 38 7 215 0006 0023 movs r3, #0 216 0008 FB60 str r3, [r7, #12] 39:Core/Src/TMP1075.c **** int temp_error = 0; 217 .loc 1 39 7 218 000a 0023 movs r3, #0 219 000c BB60 str r3, [r7, #8] 220 .LBB4: 40:Core/Src/TMP1075.c **** for (int i = 0; i < N_TEMP_SENSORS; i++) { 221 .loc 1 40 12 222 000e 0023 movs r3, #0 223 0010 7B60 str r3, [r7, #4] 224 .loc 1 40 3 225 0012 9FE0 b .L12 226 .L23: 41:Core/Src/TMP1075.c **** if (tmp1075_sensor_read(i, &tmp1075_temps[i]) != HAL_OK || (tmp1075_temps[i] & 0x000F) != 0) { 227 .loc 1 41 9 228 0014 7B68 ldr r3, [r7, #4] 229 0016 5B00 lsls r3, r3, #1 230 0018 5F4A ldr r2, .L27 231 001a 1344 add r3, r3, r2 232 001c 1946 mov r1, r3 233 001e 7868 ldr r0, [r7, #4] 234 0020 FFF7FEFF bl tmp1075_sensor_read 235 0024 0346 mov r3, r0 236 .loc 1 41 8 discriminator 1 237 0026 002B cmp r3, #0 238 0028 08D1 bne .L13 239 .loc 1 41 78 discriminator 1 240 002a 5B4A ldr r2, .L27 241 002c 7B68 ldr r3, [r7, #4] 242 002e 32F91330 ldrsh r3, [r2, r3, lsl #1] 243 .loc 1 41 82 discriminator 1 244 0032 9BB2 uxth r3, r3 245 0034 03F00F03 and r3, r3, #15 246 .loc 1 41 61 discriminator 1 247 0038 002B cmp r3, #0 248 003a 12D0 beq .L14 249 .L13: 42:Core/Src/TMP1075.c **** tmp1075_failed_sensors |= 1 << i; 250 .loc 1 42 35 ARM GAS /tmp/cc1QLhHg.s page 6 251 003c 0122 movs r2, #1 252 003e 7B68 ldr r3, [r7, #4] 253 0040 02FA03F3 lsl r3, r2, r3 254 0044 1A46 mov r2, r3 255 .loc 1 42 30 256 0046 554B ldr r3, .L27+4 257 0048 1B68 ldr r3, [r3] 258 004a 1343 orrs r3, r3, r2 259 004c 534A ldr r2, .L27+4 260 004e 1360 str r3, [r2] 43:Core/Src/TMP1075.c **** nfailed_temp_sensors++; 261 .loc 1 43 27 262 0050 534B ldr r3, .L27+8 263 0052 1B78 ldrb r3, [r3] @ zero_extendqisi2 264 0054 0133 adds r3, r3, #1 265 0056 DAB2 uxtb r2, r3 266 0058 514B ldr r3, .L27+8 267 005a 1A70 strb r2, [r3] 44:Core/Src/TMP1075.c **** err = 1; 268 .loc 1 44 11 269 005c 0123 movs r3, #1 270 005e FB60 str r3, [r7, #12] 271 0060 75E0 b .L15 272 .L14: 45:Core/Src/TMP1075.c **** } else { 46:Core/Src/TMP1075.c **** tmp1075_temps[i] >>= 4; 273 .loc 1 46 20 274 0062 4D4A ldr r2, .L27 275 0064 7B68 ldr r3, [r7, #4] 276 0066 32F91330 ldrsh r3, [r2, r3, lsl #1] 277 .loc 1 46 24 278 006a 1B11 asrs r3, r3, #4 279 006c 19B2 sxth r1, r3 280 006e 4A4A ldr r2, .L27 281 0070 7B68 ldr r3, [r7, #4] 282 0072 22F81310 strh r1, [r2, r3, lsl #1] @ movhi 47:Core/Src/TMP1075.c **** tmp1075_failed_sensors &= ~(1 << i); 283 .loc 1 47 37 284 0076 0122 movs r2, #1 285 0078 7B68 ldr r3, [r7, #4] 286 007a 02FA03F3 lsl r3, r2, r3 287 .loc 1 47 33 288 007e DB43 mvns r3, r3 289 0080 1A46 mov r2, r3 290 .loc 1 47 30 291 0082 464B ldr r3, .L27+4 292 0084 1B68 ldr r3, [r3] 293 0086 1340 ands r3, r3, r2 294 0088 444A ldr r2, .L27+4 295 008a 1360 str r3, [r2] 48:Core/Src/TMP1075.c **** if (state.current_state == STATE_CHARGING || state.current_state == STATE_CHARGING_PRECHARGE) 296 .loc 1 48 16 297 008c 454B ldr r3, .L27+12 298 008e 1B78 ldrb r3, [r3] @ zero_extendqisi2 299 .loc 1 48 10 300 0090 062B cmp r3, #6 301 0092 03D0 beq .L16 ARM GAS /tmp/cc1QLhHg.s page 7 302 .loc 1 48 57 discriminator 1 303 0094 434B ldr r3, .L27+12 304 0096 1B78 ldrb r3, [r3] @ zero_extendqisi2 305 .loc 1 48 49 discriminator 1 306 0098 052B cmp r3, #5 307 009a 14D1 bne .L17 308 .L16: 49:Core/Src/TMP1075.c **** if (tmp1075_temps[i] >= MAX_TEMP_CHARGING) { 309 .loc 1 49 26 310 009c 3E4A ldr r2, .L27 311 009e 7B68 ldr r3, [r7, #4] 312 00a0 32F91330 ldrsh r3, [r2, r3, lsl #1] 313 .loc 1 49 12 314 00a4 B3F5347F cmp r3, #720 315 00a8 21DB blt .L19 50:Core/Src/TMP1075.c **** temp_error = 1; 316 .loc 1 50 22 317 00aa 0123 movs r3, #1 318 00ac BB60 str r3, [r7, #8] 51:Core/Src/TMP1075.c **** handle_over_maxtemp(i, tmp1075_temps[i]); 319 .loc 1 51 11 320 00ae 7B68 ldr r3, [r7, #4] 321 00b0 DAB2 uxtb r2, r3 322 .loc 1 51 47 323 00b2 3949 ldr r1, .L27 324 00b4 7B68 ldr r3, [r7, #4] 325 00b6 31F91330 ldrsh r3, [r1, r3, lsl #1] 326 .loc 1 51 11 327 00ba 9BB2 uxth r3, r3 328 00bc 1946 mov r1, r3 329 00be 1046 mov r0, r2 330 00c0 FFF7FEFF bl handle_over_maxtemp 49:Core/Src/TMP1075.c **** if (tmp1075_temps[i] >= MAX_TEMP_CHARGING) { 331 .loc 1 49 12 332 00c4 13E0 b .L19 333 .L17: 52:Core/Src/TMP1075.c **** } 53:Core/Src/TMP1075.c **** } else { 54:Core/Src/TMP1075.c **** if (tmp1075_temps[i] >= MAX_TEMP_DISCHARGING) { 334 .loc 1 54 26 335 00c6 344A ldr r2, .L27 336 00c8 7B68 ldr r3, [r7, #4] 337 00ca 32F91330 ldrsh r3, [r2, r3, lsl #1] 338 .loc 1 54 12 339 00ce B3F56C7F cmp r3, #944 340 00d2 0CDB blt .L19 55:Core/Src/TMP1075.c **** temp_error = 1; 341 .loc 1 55 22 342 00d4 0123 movs r3, #1 343 00d6 BB60 str r3, [r7, #8] 56:Core/Src/TMP1075.c **** handle_over_maxtemp(i, tmp1075_temps[i]); 344 .loc 1 56 11 345 00d8 7B68 ldr r3, [r7, #4] 346 00da DAB2 uxtb r2, r3 347 .loc 1 56 47 348 00dc 2E49 ldr r1, .L27 349 00de 7B68 ldr r3, [r7, #4] ARM GAS /tmp/cc1QLhHg.s page 8 350 00e0 31F91330 ldrsh r3, [r1, r3, lsl #1] 351 .loc 1 56 11 352 00e4 9BB2 uxth r3, r3 353 00e6 1946 mov r1, r3 354 00e8 1046 mov r0, r2 355 00ea FFF7FEFF bl handle_over_maxtemp 356 .L19: 57:Core/Src/TMP1075.c **** } 58:Core/Src/TMP1075.c **** } 59:Core/Src/TMP1075.c **** 60:Core/Src/TMP1075.c **** if (state.current_state == STATE_CHARGING || state.current_state == STATE_CHARGING_PRECHARGE) 357 .loc 1 60 16 358 00ee 2D4B ldr r3, .L27+12 359 00f0 1B78 ldrb r3, [r3] @ zero_extendqisi2 360 .loc 1 60 10 361 00f2 062B cmp r3, #6 362 00f4 03D0 beq .L20 363 .loc 1 60 57 discriminator 1 364 00f6 2B4B ldr r3, .L27+12 365 00f8 1B78 ldrb r3, [r3] @ zero_extendqisi2 366 .loc 1 60 49 discriminator 1 367 00fa 052B cmp r3, #5 368 00fc 13D1 bne .L21 369 .L20: 61:Core/Src/TMP1075.c **** if (tmp1075_temps[i] <= MIN_TEMP_CHARGING) { 370 .loc 1 61 26 371 00fe 264A ldr r2, .L27 372 0100 7B68 ldr r3, [r7, #4] 373 0102 32F91330 ldrsh r3, [r2, r3, lsl #1] 374 .loc 1 61 12 375 0106 002B cmp r3, #0 376 0108 21DC bgt .L15 62:Core/Src/TMP1075.c **** temp_error = 1; 377 .loc 1 62 22 378 010a 0123 movs r3, #1 379 010c BB60 str r3, [r7, #8] 63:Core/Src/TMP1075.c **** handle_over_maxtemp(i, tmp1075_temps[i]); 380 .loc 1 63 11 381 010e 7B68 ldr r3, [r7, #4] 382 0110 DAB2 uxtb r2, r3 383 .loc 1 63 47 384 0112 2149 ldr r1, .L27 385 0114 7B68 ldr r3, [r7, #4] 386 0116 31F91330 ldrsh r3, [r1, r3, lsl #1] 387 .loc 1 63 11 388 011a 9BB2 uxth r3, r3 389 011c 1946 mov r1, r3 390 011e 1046 mov r0, r2 391 0120 FFF7FEFF bl handle_over_maxtemp 61:Core/Src/TMP1075.c **** if (tmp1075_temps[i] <= MIN_TEMP_CHARGING) { 392 .loc 1 61 12 393 0124 13E0 b .L15 394 .L21: 64:Core/Src/TMP1075.c **** } 65:Core/Src/TMP1075.c **** } else { 66:Core/Src/TMP1075.c **** if (tmp1075_temps[i] <= MIN_TEMP_DISCHARGING) { 395 .loc 1 66 26 ARM GAS /tmp/cc1QLhHg.s page 9 396 0126 1C4A ldr r2, .L27 397 0128 7B68 ldr r3, [r7, #4] 398 012a 32F91330 ldrsh r3, [r2, r3, lsl #1] 399 .loc 1 66 12 400 012e 13F5A07F cmn r3, #320 401 0132 0CDC bgt .L15 67:Core/Src/TMP1075.c **** temp_error = 1; 402 .loc 1 67 22 403 0134 0123 movs r3, #1 404 0136 BB60 str r3, [r7, #8] 68:Core/Src/TMP1075.c **** handle_over_maxtemp(i, tmp1075_temps[i]); 405 .loc 1 68 11 406 0138 7B68 ldr r3, [r7, #4] 407 013a DAB2 uxtb r2, r3 408 .loc 1 68 47 409 013c 1649 ldr r1, .L27 410 013e 7B68 ldr r3, [r7, #4] 411 0140 31F91330 ldrsh r3, [r1, r3, lsl #1] 412 .loc 1 68 11 413 0144 9BB2 uxth r3, r3 414 0146 1946 mov r1, r3 415 0148 1046 mov r0, r2 416 014a FFF7FEFF bl handle_over_maxtemp 417 .L15: 40:Core/Src/TMP1075.c **** if (tmp1075_sensor_read(i, &tmp1075_temps[i]) != HAL_OK || (tmp1075_temps[i] & 0x000F) != 0) { 418 .loc 1 40 40 discriminator 2 419 014e 7B68 ldr r3, [r7, #4] 420 0150 0133 adds r3, r3, #1 421 0152 7B60 str r3, [r7, #4] 422 .L12: 40:Core/Src/TMP1075.c **** if (tmp1075_sensor_read(i, &tmp1075_temps[i]) != HAL_OK || (tmp1075_temps[i] & 0x000F) != 0) { 423 .loc 1 40 21 discriminator 1 424 0154 7B68 ldr r3, [r7, #4] 425 0156 0C2B cmp r3, #12 426 0158 7FF75CAF ble .L23 427 .LBE4: 69:Core/Src/TMP1075.c **** } 70:Core/Src/TMP1075.c **** } 71:Core/Src/TMP1075.c **** } 72:Core/Src/TMP1075.c **** } 73:Core/Src/TMP1075.c **** if (nfailed_temp_sensors > MAX_FAILED_TEMP) { 428 .loc 1 73 28 429 015c 104B ldr r3, .L27+8 430 015e 1B78 ldrb r3, [r3] @ zero_extendqisi2 431 .loc 1 73 6 432 0160 022B cmp r3, #2 433 0162 06D9 bls .L24 74:Core/Src/TMP1075.c **** error_data.data_kind = SEK_TOO_FEW_TEMPS; 434 .loc 1 74 26 435 0164 104B ldr r3, .L27+16 436 0166 0422 movs r2, #4 437 0168 5A80 strh r2, [r3, #2] @ movhi 75:Core/Src/TMP1075.c **** set_error_source(ERROR_SOURCE_TEMPERATURES); 438 .loc 1 75 5 439 016a 0220 movs r0, #2 440 016c FFF7FEFF bl set_error_source 441 0170 05E0 b .L25 ARM GAS /tmp/cc1QLhHg.s page 10 442 .L24: 76:Core/Src/TMP1075.c **** } else if (!temp_error) { 443 .loc 1 76 13 444 0172 BB68 ldr r3, [r7, #8] 445 0174 002B cmp r3, #0 446 0176 02D1 bne .L25 77:Core/Src/TMP1075.c **** clear_error_source(ERROR_SOURCE_TEMPERATURES); 447 .loc 1 77 5 448 0178 0220 movs r0, #2 449 017a FFF7FEFF bl clear_error_source 450 .L25: 78:Core/Src/TMP1075.c **** } 79:Core/Src/TMP1075.c **** nfailed_temp_sensors = 0; 451 .loc 1 79 24 452 017e 084B ldr r3, .L27+8 453 0180 0022 movs r2, #0 454 0182 1A70 strb r2, [r3] 80:Core/Src/TMP1075.c **** return err ? HAL_ERROR : HAL_OK; 455 .loc 1 80 26 456 0184 FB68 ldr r3, [r7, #12] 457 0186 002B cmp r3, #0 458 0188 14BF ite ne 459 018a 0123 movne r3, #1 460 018c 0023 moveq r3, #0 461 018e DBB2 uxtb r3, r3 81:Core/Src/TMP1075.c **** } 462 .loc 1 81 1 463 0190 1846 mov r0, r3 464 0192 1037 adds r7, r7, #16 465 .cfi_def_cfa_offset 8 466 0194 BD46 mov sp, r7 467 .cfi_def_cfa_register 13 468 @ sp needed 469 0196 80BD pop {r7, pc} 470 .L28: 471 .align 2 472 .L27: 473 0198 00000000 .word tmp1075_temps 474 019c 00000000 .word tmp1075_failed_sensors 475 01a0 00000000 .word nfailed_temp_sensors 476 01a4 00000000 .word state 477 01a8 00000000 .word error_data 478 .cfi_endproc 479 .LFE132: 481 .section .text.tmp1075_sensor_init,"ax",%progbits 482 .align 1 483 .global tmp1075_sensor_init 484 .syntax unified 485 .thumb 486 .thumb_func 488 tmp1075_sensor_init: 489 .LFB133: 82:Core/Src/TMP1075.c **** 83:Core/Src/TMP1075.c **** HAL_StatusTypeDef tmp1075_sensor_init(int n) { 490 .loc 1 83 46 491 .cfi_startproc 492 @ args = 0, pretend = 0, frame = 16 ARM GAS /tmp/cc1QLhHg.s page 11 493 @ frame_needed = 1, uses_anonymous_args = 0 494 0000 80B5 push {r7, lr} 495 .cfi_def_cfa_offset 8 496 .cfi_offset 7, -8 497 .cfi_offset 14, -4 498 0002 86B0 sub sp, sp, #24 499 .cfi_def_cfa_offset 32 500 0004 02AF add r7, sp, #8 501 .cfi_def_cfa 7, 24 502 0006 7860 str r0, [r7, #4] 84:Core/Src/TMP1075.c **** uint16_t addr = (0b1000000 | n) << 1; 503 .loc 1 84 35 504 0008 7B68 ldr r3, [r7, #4] 505 000a 1BB2 sxth r3, r3 506 000c 5B00 lsls r3, r3, #1 507 000e 1BB2 sxth r3, r3 508 0010 43F08003 orr r3, r3, #128 509 0014 1BB2 sxth r3, r3 510 .loc 1 84 12 511 0016 FB81 strh r3, [r7, #14] @ movhi 85:Core/Src/TMP1075.c **** uint8_t data[] = {0}; 512 .loc 1 85 11 513 0018 0023 movs r3, #0 514 001a 3B73 strb r3, [r7, #12] 86:Core/Src/TMP1075.c **** return HAL_I2C_Master_Transmit(hi2c, addr, data, sizeof(data), 100); 515 .loc 1 86 10 516 001c 074B ldr r3, .L31 517 001e 1868 ldr r0, [r3] 518 0020 07F10C02 add r2, r7, #12 519 0024 F989 ldrh r1, [r7, #14] 520 0026 6423 movs r3, #100 521 0028 0093 str r3, [sp] 522 002a 0123 movs r3, #1 523 002c FFF7FEFF bl HAL_I2C_Master_Transmit 524 0030 0346 mov r3, r0 87:Core/Src/TMP1075.c **** } 525 .loc 1 87 1 526 0032 1846 mov r0, r3 527 0034 1037 adds r7, r7, #16 528 .cfi_def_cfa_offset 8 529 0036 BD46 mov sp, r7 530 .cfi_def_cfa_register 13 531 @ sp needed 532 0038 80BD pop {r7, pc} 533 .L32: 534 003a 00BF .align 2 535 .L31: 536 003c 00000000 .word hi2c 537 .cfi_endproc 538 .LFE133: 540 .section .text.tmp1075_sensor_read,"ax",%progbits 541 .align 1 542 .global tmp1075_sensor_read 543 .syntax unified 544 .thumb 545 .thumb_func 547 tmp1075_sensor_read: ARM GAS /tmp/cc1QLhHg.s page 12 548 .LFB134: 88:Core/Src/TMP1075.c **** 89:Core/Src/TMP1075.c **** HAL_StatusTypeDef tmp1075_sensor_read(int n, int16_t* res) { 549 .loc 1 89 60 550 .cfi_startproc 551 @ args = 0, pretend = 0, frame = 16 552 @ frame_needed = 1, uses_anonymous_args = 0 553 0000 80B5 push {r7, lr} 554 .cfi_def_cfa_offset 8 555 .cfi_offset 7, -8 556 .cfi_offset 14, -4 557 0002 86B0 sub sp, sp, #24 558 .cfi_def_cfa_offset 32 559 0004 02AF add r7, sp, #8 560 .cfi_def_cfa 7, 24 561 0006 7860 str r0, [r7, #4] 562 0008 3960 str r1, [r7] 90:Core/Src/TMP1075.c **** uint16_t addr = (0b1000000 | n) << 1; 563 .loc 1 90 35 564 000a 7B68 ldr r3, [r7, #4] 565 000c 1BB2 sxth r3, r3 566 000e 5B00 lsls r3, r3, #1 567 0010 1BB2 sxth r3, r3 568 0012 43F08003 orr r3, r3, #128 569 0016 1BB2 sxth r3, r3 570 .loc 1 90 12 571 0018 FB81 strh r3, [r7, #14] @ movhi 91:Core/Src/TMP1075.c **** addr |= 1; // Read 572 .loc 1 91 8 573 001a FB89 ldrh r3, [r7, #14] @ movhi 574 001c 43F00103 orr r3, r3, #1 575 0020 FB81 strh r3, [r7, #14] @ movhi 92:Core/Src/TMP1075.c **** uint8_t result[2]; 93:Core/Src/TMP1075.c **** HAL_StatusTypeDef status = 94:Core/Src/TMP1075.c **** HAL_I2C_Master_Receive(hi2c, addr, result, sizeof(result), 5); //5ms timeout for failure (cas 576 .loc 1 94 7 577 0022 0F4B ldr r3, .L36 578 0024 1868 ldr r0, [r3] 579 0026 07F10802 add r2, r7, #8 580 002a F989 ldrh r1, [r7, #14] 581 002c 0523 movs r3, #5 582 002e 0093 str r3, [sp] 583 0030 0223 movs r3, #2 584 0032 FFF7FEFF bl HAL_I2C_Master_Receive 585 0036 0346 mov r3, r0 586 0038 7B73 strb r3, [r7, #13] 95:Core/Src/TMP1075.c **** if (status == HAL_OK) { 587 .loc 1 95 6 588 003a 7B7B ldrb r3, [r7, #13] @ zero_extendqisi2 589 003c 002B cmp r3, #0 590 003e 09D1 bne .L34 96:Core/Src/TMP1075.c **** *res = (result[0] << 8) | result[1]; 591 .loc 1 96 19 592 0040 3B7A ldrb r3, [r7, #8] @ zero_extendqisi2 593 .loc 1 96 29 594 0042 1BB2 sxth r3, r3 595 0044 1B02 lsls r3, r3, #8 ARM GAS /tmp/cc1QLhHg.s page 13 596 0046 1AB2 sxth r2, r3 597 .loc 1 96 37 598 0048 7B7A ldrb r3, [r7, #9] @ zero_extendqisi2 599 004a 1BB2 sxth r3, r3 600 .loc 1 96 29 601 004c 1343 orrs r3, r3, r2 602 004e 1AB2 sxth r2, r3 603 .loc 1 96 10 604 0050 3B68 ldr r3, [r7] 605 0052 1A80 strh r2, [r3] @ movhi 606 .L34: 97:Core/Src/TMP1075.c **** } 98:Core/Src/TMP1075.c **** return status; 607 .loc 1 98 10 608 0054 7B7B ldrb r3, [r7, #13] @ zero_extendqisi2 99:Core/Src/TMP1075.c **** } 609 .loc 1 99 1 610 0056 1846 mov r0, r3 611 0058 1037 adds r7, r7, #16 612 .cfi_def_cfa_offset 8 613 005a BD46 mov sp, r7 614 .cfi_def_cfa_register 13 615 @ sp needed 616 005c 80BD pop {r7, pc} 617 .L37: 618 005e 00BF .align 2 619 .L36: 620 0060 00000000 .word hi2c 621 .cfi_endproc 622 .LFE134: 624 .text 625 .Letext0: 626 .file 2 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/arm-none-eabi/incl 627 .file 3 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/arm-none-eabi/incl 628 .file 4 "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f302xc.h" 629 .file 5 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/lib/gcc/arm-none-e 630 .file 6 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_def.h" 631 .file 7 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_dma.h" 632 .file 8 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_i2c.h" 633 .file 9 "Core/Inc/errors.h" 634 .file 10 "Core/Inc/TMP1075.h" 635 .file 11 "Core/Inc/state_machine.h" 636 .file 12 "Core/Lib/can-halal/can-halal.h" ARM GAS /tmp/cc1QLhHg.s page 14 DEFINED SYMBOLS *ABS*:00000000 TMP1075.c /tmp/cc1QLhHg.s:25 .bss.tmp1075_temps:00000000 tmp1075_temps /tmp/cc1QLhHg.s:22 .bss.tmp1075_temps:00000000 $d /tmp/cc1QLhHg.s:32 .bss.tmp1075_failed_sensors:00000000 tmp1075_failed_sensors /tmp/cc1QLhHg.s:29 .bss.tmp1075_failed_sensors:00000000 $d /tmp/cc1QLhHg.s:38 .bss.nfailed_temp_sensors:00000000 nfailed_temp_sensors /tmp/cc1QLhHg.s:39 .bss.nfailed_temp_sensors:00000000 $d /tmp/cc1QLhHg.s:45 .bss.hi2c:00000000 hi2c /tmp/cc1QLhHg.s:42 .bss.hi2c:00000000 $d /tmp/cc1QLhHg.s:48 .text.tmp1075_init:00000000 $t /tmp/cc1QLhHg.s:54 .text.tmp1075_init:00000000 tmp1075_init /tmp/cc1QLhHg.s:488 .text.tmp1075_sensor_init:00000000 tmp1075_sensor_init /tmp/cc1QLhHg.s:119 .text.tmp1075_init:00000040 $d /tmp/cc1QLhHg.s:124 .text.handle_over_maxtemp:00000000 $t /tmp/cc1QLhHg.s:130 .text.handle_over_maxtemp:00000000 handle_over_maxtemp /tmp/cc1QLhHg.s:188 .text.handle_over_maxtemp:00000048 $d /tmp/cc1QLhHg.s:194 .text.tmp1075_measure:00000000 $t /tmp/cc1QLhHg.s:200 .text.tmp1075_measure:00000000 tmp1075_measure /tmp/cc1QLhHg.s:547 .text.tmp1075_sensor_read:00000000 tmp1075_sensor_read /tmp/cc1QLhHg.s:473 .text.tmp1075_measure:00000198 $d /tmp/cc1QLhHg.s:482 .text.tmp1075_sensor_init:00000000 $t /tmp/cc1QLhHg.s:536 .text.tmp1075_sensor_init:0000003c $d /tmp/cc1QLhHg.s:541 .text.tmp1075_sensor_read:00000000 $t /tmp/cc1QLhHg.s:620 .text.tmp1075_sensor_read:00000060 $d UNDEFINED SYMBOLS set_error_source ftcan_marshal_unsigned error_data clear_error_source state HAL_I2C_Master_Transmit HAL_I2C_Master_Receive