ARM GAS /tmp/cczsHaNw.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 "ADBMS_LL_Driver.c" 16 .text 17 .Ltext0: 18 .cfi_sections .debug_frame 19 .file 1 "Core/Src/ADBMS_LL_Driver.c" 20 .global adbmsspi 21 .section .bss.adbmsspi,"aw",%nobits 22 .align 2 25 adbmsspi: 26 0000 00000000 .space 4 27 .section .text.adbmsDriverInit,"ax",%progbits 28 .align 1 29 .global adbmsDriverInit 30 .syntax unified 31 .thumb 32 .thumb_func 34 adbmsDriverInit: 35 .LFB130: 1:Core/Src/ADBMS_LL_Driver.c **** /* 2:Core/Src/ADBMS_LL_Driver.c **** * ADBMS_LL_Driver.c 3:Core/Src/ADBMS_LL_Driver.c **** * 4:Core/Src/ADBMS_LL_Driver.c **** * Created on: 05.06.2022 5:Core/Src/ADBMS_LL_Driver.c **** * Author: max 6:Core/Src/ADBMS_LL_Driver.c **** */ 7:Core/Src/ADBMS_LL_Driver.c **** 8:Core/Src/ADBMS_LL_Driver.c **** #include "ADBMS_LL_Driver.h" 9:Core/Src/ADBMS_LL_Driver.c **** 10:Core/Src/ADBMS_LL_Driver.c **** #define INITIAL_COMMAND_PEC 0x0010 11:Core/Src/ADBMS_LL_Driver.c **** #define INITIAL_DATA_PEC 0x0010 12:Core/Src/ADBMS_LL_Driver.c **** #define ADBMS_SPI_TIMEOUT 100 // Timeout in ms 13:Core/Src/ADBMS_LL_Driver.c **** #warning ask about the timeout value 14:Core/Src/ADBMS_LL_Driver.c **** 15:Core/Src/ADBMS_LL_Driver.c **** SPI_HandleTypeDef* adbmsspi; 16:Core/Src/ADBMS_LL_Driver.c **** 17:Core/Src/ADBMS_LL_Driver.c **** uint8 adbmsDriverInit(SPI_HandleTypeDef* hspi) { 36 .loc 1 17 48 37 .cfi_startproc 38 @ args = 0, pretend = 0, frame = 8 39 @ frame_needed = 1, uses_anonymous_args = 0 40 0000 80B5 push {r7, lr} 41 .cfi_def_cfa_offset 8 42 .cfi_offset 7, -8 43 .cfi_offset 14, -4 ARM GAS /tmp/cczsHaNw.s page 2 44 0002 82B0 sub sp, sp, #8 45 .cfi_def_cfa_offset 16 46 0004 00AF add r7, sp, #0 47 .cfi_def_cfa_register 7 48 0006 7860 str r0, [r7, #4] 18:Core/Src/ADBMS_LL_Driver.c **** mcuAdbmsCSLow(); 49 .loc 1 18 3 50 0008 FFF7FEFF bl mcuAdbmsCSLow 19:Core/Src/ADBMS_LL_Driver.c **** HAL_Delay(1); 51 .loc 1 19 3 52 000c 0120 movs r0, #1 53 000e FFF7FEFF bl HAL_Delay 20:Core/Src/ADBMS_LL_Driver.c **** mcuAdbmsCSHigh(); 54 .loc 1 20 3 55 0012 FFF7FEFF bl mcuAdbmsCSHigh 21:Core/Src/ADBMS_LL_Driver.c **** adbmsspi = hspi; 56 .loc 1 21 12 57 0016 044A ldr r2, .L3 58 0018 7B68 ldr r3, [r7, #4] 59 001a 1360 str r3, [r2] 22:Core/Src/ADBMS_LL_Driver.c **** return 0; 60 .loc 1 22 10 61 001c 0023 movs r3, #0 23:Core/Src/ADBMS_LL_Driver.c **** } 62 .loc 1 23 1 63 001e 1846 mov r0, r3 64 0020 0837 adds r7, r7, #8 65 .cfi_def_cfa_offset 8 66 0022 BD46 mov sp, r7 67 .cfi_def_cfa_register 13 68 @ sp needed 69 0024 80BD pop {r7, pc} 70 .L4: 71 0026 00BF .align 2 72 .L3: 73 0028 00000000 .word adbmsspi 74 .cfi_endproc 75 .LFE130: 77 .section .text.calculateCommandPEC,"ax",%progbits 78 .align 1 79 .global calculateCommandPEC 80 .syntax unified 81 .thumb 82 .thumb_func 84 calculateCommandPEC: 85 .LFB131: 24:Core/Src/ADBMS_LL_Driver.c **** 25:Core/Src/ADBMS_LL_Driver.c **** //command PEC calculation 26:Core/Src/ADBMS_LL_Driver.c **** //CRC-15 27:Core/Src/ADBMS_LL_Driver.c **** //x^15 + x^14 + x^10 + x^8 + x^7 + x^4 + x^3 + 1 28:Core/Src/ADBMS_LL_Driver.c **** 29:Core/Src/ADBMS_LL_Driver.c **** uint8 calculateCommandPEC(uint8_t* data, uint8_t datalen) { 86 .loc 1 29 59 87 .cfi_startproc 88 @ args = 0, pretend = 0, frame = 24 89 @ frame_needed = 1, uses_anonymous_args = 0 90 0000 80B5 push {r7, lr} ARM GAS /tmp/cczsHaNw.s page 3 91 .cfi_def_cfa_offset 8 92 .cfi_offset 7, -8 93 .cfi_offset 14, -4 94 0002 86B0 sub sp, sp, #24 95 .cfi_def_cfa_offset 32 96 0004 00AF add r7, sp, #0 97 .cfi_def_cfa_register 7 98 0006 7860 str r0, [r7, #4] 99 0008 0B46 mov r3, r1 100 000a FB70 strb r3, [r7, #3] 30:Core/Src/ADBMS_LL_Driver.c **** uint16 currentpec = INITIAL_COMMAND_PEC; 101 .loc 1 30 10 102 000c 1023 movs r3, #16 103 000e FB82 strh r3, [r7, #22] @ movhi 31:Core/Src/ADBMS_LL_Driver.c **** if (datalen >= 3) { 104 .loc 1 31 6 105 0010 FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 106 0012 022B cmp r3, #2 107 0014 38D9 bls .L6 108 .LBB2: 32:Core/Src/ADBMS_LL_Driver.c **** for (int i = 0; i < (datalen - 2); i++) { 109 .loc 1 32 14 110 0016 0023 movs r3, #0 111 0018 3B61 str r3, [r7, #16] 112 .loc 1 32 5 113 001a 1CE0 b .L7 114 .L10: 115 .LBB3: 33:Core/Src/ADBMS_LL_Driver.c **** for (int n = 0; n < 8; n++) { 116 .loc 1 33 16 117 001c 0023 movs r3, #0 118 001e FB60 str r3, [r7, #12] 119 .loc 1 33 7 120 0020 13E0 b .L8 121 .L9: 122 .LBB4: 34:Core/Src/ADBMS_LL_Driver.c **** const uint8 din = data[i] << (n); 123 .loc 1 34 33 124 0022 3B69 ldr r3, [r7, #16] 125 0024 7A68 ldr r2, [r7, #4] 126 0026 1344 add r3, r3, r2 127 0028 1B78 ldrb r3, [r3] @ zero_extendqisi2 128 002a 1A46 mov r2, r3 129 .loc 1 34 37 130 002c FB68 ldr r3, [r7, #12] 131 002e 02FA03F3 lsl r3, r2, r3 132 .loc 1 34 23 133 0032 FB72 strb r3, [r7, #11] 35:Core/Src/ADBMS_LL_Driver.c **** currentpec = updateCommandPEC(currentpec, din); 134 .loc 1 35 22 135 0034 FA7A ldrb r2, [r7, #11] @ zero_extendqisi2 136 0036 FB8A ldrh r3, [r7, #22] 137 0038 1146 mov r1, r2 138 003a 1846 mov r0, r3 139 003c FFF7FEFF bl updateCommandPEC 140 0040 0346 mov r3, r0 141 0042 FB82 strh r3, [r7, #22] @ movhi ARM GAS /tmp/cczsHaNw.s page 4 142 .LBE4: 33:Core/Src/ADBMS_LL_Driver.c **** for (int n = 0; n < 8; n++) { 143 .loc 1 33 31 discriminator 3 144 0044 FB68 ldr r3, [r7, #12] 145 0046 0133 adds r3, r3, #1 146 0048 FB60 str r3, [r7, #12] 147 .L8: 33:Core/Src/ADBMS_LL_Driver.c **** for (int n = 0; n < 8; n++) { 148 .loc 1 33 25 discriminator 1 149 004a FB68 ldr r3, [r7, #12] 150 004c 072B cmp r3, #7 151 004e E8DD ble .L9 152 .LBE3: 32:Core/Src/ADBMS_LL_Driver.c **** for (int n = 0; n < 8; n++) { 153 .loc 1 32 41 discriminator 2 154 0050 3B69 ldr r3, [r7, #16] 155 0052 0133 adds r3, r3, #1 156 0054 3B61 str r3, [r7, #16] 157 .L7: 32:Core/Src/ADBMS_LL_Driver.c **** for (int n = 0; n < 8; n++) { 158 .loc 1 32 34 discriminator 1 159 0056 FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 160 0058 023B subs r3, r3, #2 32:Core/Src/ADBMS_LL_Driver.c **** for (int n = 0; n < 8; n++) { 161 .loc 1 32 23 discriminator 1 162 005a 3A69 ldr r2, [r7, #16] 163 005c 9A42 cmp r2, r3 164 005e DDDB blt .L10 165 .LBE2: 36:Core/Src/ADBMS_LL_Driver.c **** } 37:Core/Src/ADBMS_LL_Driver.c **** } 38:Core/Src/ADBMS_LL_Driver.c **** 39:Core/Src/ADBMS_LL_Driver.c **** data[datalen - 2] = (currentpec >> 7) & 0xFF; 166 .loc 1 39 23 167 0060 FB8A ldrh r3, [r7, #22] 168 0062 DB09 lsrs r3, r3, #7 169 0064 99B2 uxth r1, r3 170 .loc 1 39 9 171 0066 FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 172 0068 023B subs r3, r3, #2 173 006a 7A68 ldr r2, [r7, #4] 174 006c 1344 add r3, r3, r2 175 .loc 1 39 23 176 006e CAB2 uxtb r2, r1 177 0070 1A70 strb r2, [r3] 40:Core/Src/ADBMS_LL_Driver.c **** data[datalen - 1] = (currentpec << 1) & 0xFF; 178 .loc 1 40 23 179 0072 FB8A ldrh r3, [r7, #22] @ movhi 180 0074 DAB2 uxtb r2, r3 181 .loc 1 40 9 182 0076 FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 183 0078 013B subs r3, r3, #1 184 007a 7968 ldr r1, [r7, #4] 185 007c 0B44 add r3, r3, r1 186 .loc 1 40 23 187 007e 5200 lsls r2, r2, #1 188 0080 D2B2 uxtb r2, r2 ARM GAS /tmp/cczsHaNw.s page 5 189 0082 1A70 strb r2, [r3] 41:Core/Src/ADBMS_LL_Driver.c **** return 0; 190 .loc 1 41 12 191 0084 0023 movs r3, #0 192 0086 00E0 b .L11 193 .L6: 42:Core/Src/ADBMS_LL_Driver.c **** } else { 43:Core/Src/ADBMS_LL_Driver.c **** return 1; 194 .loc 1 43 12 195 0088 0123 movs r3, #1 196 .L11: 44:Core/Src/ADBMS_LL_Driver.c **** } 45:Core/Src/ADBMS_LL_Driver.c **** } 197 .loc 1 45 1 198 008a 1846 mov r0, r3 199 008c 1837 adds r7, r7, #24 200 .cfi_def_cfa_offset 8 201 008e BD46 mov sp, r7 202 .cfi_def_cfa_register 13 203 @ sp needed 204 0090 80BD pop {r7, pc} 205 .cfi_endproc 206 .LFE131: 208 .section .text.checkCommandPEC,"ax",%progbits 209 .align 1 210 .global checkCommandPEC 211 .syntax unified 212 .thumb 213 .thumb_func 215 checkCommandPEC: 216 .LFB132: 46:Core/Src/ADBMS_LL_Driver.c **** 47:Core/Src/ADBMS_LL_Driver.c **** uint8 checkCommandPEC(uint8* data, uint8 datalen) { 217 .loc 1 47 51 218 .cfi_startproc 219 @ args = 0, pretend = 0, frame = 24 220 @ frame_needed = 1, uses_anonymous_args = 0 221 0000 80B5 push {r7, lr} 222 .cfi_def_cfa_offset 8 223 .cfi_offset 7, -8 224 .cfi_offset 14, -4 225 0002 86B0 sub sp, sp, #24 226 .cfi_def_cfa_offset 32 227 0004 00AF add r7, sp, #0 228 .cfi_def_cfa_register 7 229 0006 7860 str r0, [r7, #4] 230 0008 0B46 mov r3, r1 231 000a FB70 strb r3, [r7, #3] 48:Core/Src/ADBMS_LL_Driver.c **** if (datalen <= 3) { 232 .loc 1 48 6 233 000c FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 234 000e 032B cmp r3, #3 235 0010 01D8 bhi .L13 49:Core/Src/ADBMS_LL_Driver.c **** return 255; 236 .loc 1 49 12 237 0012 FF23 movs r3, #255 238 0014 41E0 b .L14 ARM GAS /tmp/cczsHaNw.s page 6 239 .L13: 50:Core/Src/ADBMS_LL_Driver.c **** } 51:Core/Src/ADBMS_LL_Driver.c **** 52:Core/Src/ADBMS_LL_Driver.c **** uint16 currentpec = INITIAL_COMMAND_PEC; 240 .loc 1 52 10 241 0016 1023 movs r3, #16 242 0018 FB82 strh r3, [r7, #22] @ movhi 243 .LBB5: 53:Core/Src/ADBMS_LL_Driver.c **** 54:Core/Src/ADBMS_LL_Driver.c **** for (int i = 0; i < (datalen - 2); i++) { 244 .loc 1 54 12 245 001a 0023 movs r3, #0 246 001c 3B61 str r3, [r7, #16] 247 .loc 1 54 3 248 001e 1CE0 b .L15 249 .L18: 250 .LBB6: 55:Core/Src/ADBMS_LL_Driver.c **** for (int n = 0; n < 8; n++) { 251 .loc 1 55 14 252 0020 0023 movs r3, #0 253 0022 FB60 str r3, [r7, #12] 254 .loc 1 55 5 255 0024 13E0 b .L16 256 .L17: 257 .LBB7: 56:Core/Src/ADBMS_LL_Driver.c **** const uint8 din = data[i] << (n); 258 .loc 1 56 31 259 0026 3B69 ldr r3, [r7, #16] 260 0028 7A68 ldr r2, [r7, #4] 261 002a 1344 add r3, r3, r2 262 002c 1B78 ldrb r3, [r3] @ zero_extendqisi2 263 002e 1A46 mov r2, r3 264 .loc 1 56 35 265 0030 FB68 ldr r3, [r7, #12] 266 0032 02FA03F3 lsl r3, r2, r3 267 .loc 1 56 21 268 0036 7B72 strb r3, [r7, #9] 57:Core/Src/ADBMS_LL_Driver.c **** currentpec = updateCommandPEC(currentpec, din); 269 .loc 1 57 20 270 0038 7A7A ldrb r2, [r7, #9] @ zero_extendqisi2 271 003a FB8A ldrh r3, [r7, #22] 272 003c 1146 mov r1, r2 273 003e 1846 mov r0, r3 274 0040 FFF7FEFF bl updateCommandPEC 275 0044 0346 mov r3, r0 276 0046 FB82 strh r3, [r7, #22] @ movhi 277 .LBE7: 55:Core/Src/ADBMS_LL_Driver.c **** for (int n = 0; n < 8; n++) { 278 .loc 1 55 29 discriminator 3 279 0048 FB68 ldr r3, [r7, #12] 280 004a 0133 adds r3, r3, #1 281 004c FB60 str r3, [r7, #12] 282 .L16: 55:Core/Src/ADBMS_LL_Driver.c **** for (int n = 0; n < 8; n++) { 283 .loc 1 55 23 discriminator 1 284 004e FB68 ldr r3, [r7, #12] 285 0050 072B cmp r3, #7 ARM GAS /tmp/cczsHaNw.s page 7 286 0052 E8DD ble .L17 287 .LBE6: 54:Core/Src/ADBMS_LL_Driver.c **** for (int n = 0; n < 8; n++) { 288 .loc 1 54 39 discriminator 2 289 0054 3B69 ldr r3, [r7, #16] 290 0056 0133 adds r3, r3, #1 291 0058 3B61 str r3, [r7, #16] 292 .L15: 54:Core/Src/ADBMS_LL_Driver.c **** for (int n = 0; n < 8; n++) { 293 .loc 1 54 32 discriminator 1 294 005a FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 295 005c 023B subs r3, r3, #2 54:Core/Src/ADBMS_LL_Driver.c **** for (int n = 0; n < 8; n++) { 296 .loc 1 54 21 discriminator 1 297 005e 3A69 ldr r2, [r7, #16] 298 0060 9A42 cmp r2, r3 299 0062 DDDB blt .L18 300 .LBE5: 58:Core/Src/ADBMS_LL_Driver.c **** } 59:Core/Src/ADBMS_LL_Driver.c **** } 60:Core/Src/ADBMS_LL_Driver.c **** 61:Core/Src/ADBMS_LL_Driver.c **** const uint8 pechigh = (currentpec >> 7) & 0xFF; 301 .loc 1 61 15 302 0064 FB8A ldrh r3, [r7, #22] 303 0066 DB09 lsrs r3, r3, #7 304 0068 9BB2 uxth r3, r3 305 006a FB72 strb r3, [r7, #11] 62:Core/Src/ADBMS_LL_Driver.c **** const uint8 peclow = (currentpec << 1) & 0xFF; 306 .loc 1 62 15 307 006c FB8A ldrh r3, [r7, #22] @ movhi 308 006e DBB2 uxtb r3, r3 309 0070 5B00 lsls r3, r3, #1 310 0072 BB72 strb r3, [r7, #10] 63:Core/Src/ADBMS_LL_Driver.c **** 64:Core/Src/ADBMS_LL_Driver.c **** if ((pechigh == data[datalen - 2]) && (peclow == data[datalen - 1])) { 311 .loc 1 64 23 312 0074 FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 313 0076 023B subs r3, r3, #2 314 0078 7A68 ldr r2, [r7, #4] 315 007a 1344 add r3, r3, r2 316 007c 1B78 ldrb r3, [r3] @ zero_extendqisi2 317 .loc 1 64 6 318 007e FA7A ldrb r2, [r7, #11] @ zero_extendqisi2 319 0080 9A42 cmp r2, r3 320 0082 09D1 bne .L19 321 .loc 1 64 56 discriminator 1 322 0084 FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 323 0086 013B subs r3, r3, #1 324 0088 7A68 ldr r2, [r7, #4] 325 008a 1344 add r3, r3, r2 326 008c 1B78 ldrb r3, [r3] @ zero_extendqisi2 327 .loc 1 64 38 discriminator 1 328 008e BA7A ldrb r2, [r7, #10] @ zero_extendqisi2 329 0090 9A42 cmp r2, r3 330 0092 01D1 bne .L19 65:Core/Src/ADBMS_LL_Driver.c **** return 0; 331 .loc 1 65 12 ARM GAS /tmp/cczsHaNw.s page 8 332 0094 0023 movs r3, #0 333 0096 00E0 b .L14 334 .L19: 66:Core/Src/ADBMS_LL_Driver.c **** } 67:Core/Src/ADBMS_LL_Driver.c **** 68:Core/Src/ADBMS_LL_Driver.c **** return 1; 335 .loc 1 68 10 336 0098 0123 movs r3, #1 337 .L14: 69:Core/Src/ADBMS_LL_Driver.c **** } 338 .loc 1 69 1 339 009a 1846 mov r0, r3 340 009c 1837 adds r7, r7, #24 341 .cfi_def_cfa_offset 8 342 009e BD46 mov sp, r7 343 .cfi_def_cfa_register 13 344 @ sp needed 345 00a0 80BD pop {r7, pc} 346 .cfi_endproc 347 .LFE132: 349 .section .text.updateCommandPEC,"ax",%progbits 350 .align 1 351 .global updateCommandPEC 352 .syntax unified 353 .thumb 354 .thumb_func 356 updateCommandPEC: 357 .LFB133: 70:Core/Src/ADBMS_LL_Driver.c **** 71:Core/Src/ADBMS_LL_Driver.c **** uint16 updateCommandPEC(uint16 currentPEC, uint8 din) { 358 .loc 1 71 55 359 .cfi_startproc 360 @ args = 0, pretend = 0, frame = 24 361 @ frame_needed = 1, uses_anonymous_args = 0 362 @ link register save eliminated. 363 0000 80B4 push {r7} 364 .cfi_def_cfa_offset 4 365 .cfi_offset 7, -4 366 0002 87B0 sub sp, sp, #28 367 .cfi_def_cfa_offset 32 368 0004 00AF add r7, sp, #0 369 .cfi_def_cfa_register 7 370 0006 0346 mov r3, r0 371 0008 0A46 mov r2, r1 372 000a FB80 strh r3, [r7, #6] @ movhi 373 000c 1346 mov r3, r2 374 000e 7B71 strb r3, [r7, #5] 72:Core/Src/ADBMS_LL_Driver.c **** din = (din >> 7) & 0x01; 375 .loc 1 72 7 376 0010 7B79 ldrb r3, [r7, #5] @ zero_extendqisi2 377 0012 DB09 lsrs r3, r3, #7 378 0014 7B71 strb r3, [r7, #5] 73:Core/Src/ADBMS_LL_Driver.c **** const uint8 in0 = din ^ ((currentPEC >> 14) & 0x01); 379 .loc 1 73 47 380 0016 FB88 ldrh r3, [r7, #6] 381 0018 9B0B lsrs r3, r3, #14 382 001a 9BB2 uxth r3, r3 ARM GAS /tmp/cczsHaNw.s page 9 383 001c 5BB2 sxtb r3, r3 384 001e 03F00103 and r3, r3, #1 385 0022 5AB2 sxtb r2, r3 386 .loc 1 73 25 387 0024 97F90530 ldrsb r3, [r7, #5] 388 0028 5340 eors r3, r3, r2 389 002a 5BB2 sxtb r3, r3 390 .loc 1 73 15 391 002c FB75 strb r3, [r7, #23] 74:Core/Src/ADBMS_LL_Driver.c **** const uint8 in3 = in0 ^ ((currentPEC >> 2) & 0x01); 392 .loc 1 74 46 393 002e FB88 ldrh r3, [r7, #6] 394 0030 9B08 lsrs r3, r3, #2 395 0032 9BB2 uxth r3, r3 396 0034 5BB2 sxtb r3, r3 397 0036 03F00103 and r3, r3, #1 398 003a 5AB2 sxtb r2, r3 399 .loc 1 74 25 400 003c 97F91730 ldrsb r3, [r7, #23] 401 0040 5340 eors r3, r3, r2 402 0042 5BB2 sxtb r3, r3 403 .loc 1 74 15 404 0044 BB75 strb r3, [r7, #22] 75:Core/Src/ADBMS_LL_Driver.c **** const uint8 in4 = in0 ^ ((currentPEC >> 3) & 0x01); 405 .loc 1 75 46 406 0046 FB88 ldrh r3, [r7, #6] 407 0048 DB08 lsrs r3, r3, #3 408 004a 9BB2 uxth r3, r3 409 004c 5BB2 sxtb r3, r3 410 004e 03F00103 and r3, r3, #1 411 0052 5AB2 sxtb r2, r3 412 .loc 1 75 25 413 0054 97F91730 ldrsb r3, [r7, #23] 414 0058 5340 eors r3, r3, r2 415 005a 5BB2 sxtb r3, r3 416 .loc 1 75 15 417 005c 7B75 strb r3, [r7, #21] 76:Core/Src/ADBMS_LL_Driver.c **** const uint8 in7 = in0 ^ ((currentPEC >> 6) & 0x01); 418 .loc 1 76 46 419 005e FB88 ldrh r3, [r7, #6] 420 0060 9B09 lsrs r3, r3, #6 421 0062 9BB2 uxth r3, r3 422 0064 5BB2 sxtb r3, r3 423 0066 03F00103 and r3, r3, #1 424 006a 5AB2 sxtb r2, r3 425 .loc 1 76 25 426 006c 97F91730 ldrsb r3, [r7, #23] 427 0070 5340 eors r3, r3, r2 428 0072 5BB2 sxtb r3, r3 429 .loc 1 76 15 430 0074 3B75 strb r3, [r7, #20] 77:Core/Src/ADBMS_LL_Driver.c **** const uint8 in8 = in0 ^ ((currentPEC >> 7) & 0x01); 431 .loc 1 77 46 432 0076 FB88 ldrh r3, [r7, #6] 433 0078 DB09 lsrs r3, r3, #7 434 007a 9BB2 uxth r3, r3 435 007c 5BB2 sxtb r3, r3 ARM GAS /tmp/cczsHaNw.s page 10 436 007e 03F00103 and r3, r3, #1 437 0082 5AB2 sxtb r2, r3 438 .loc 1 77 25 439 0084 97F91730 ldrsb r3, [r7, #23] 440 0088 5340 eors r3, r3, r2 441 008a 5BB2 sxtb r3, r3 442 .loc 1 77 15 443 008c FB74 strb r3, [r7, #19] 78:Core/Src/ADBMS_LL_Driver.c **** const uint8 in10 = in0 ^ ((currentPEC >> 9) & 0x01); 444 .loc 1 78 47 445 008e FB88 ldrh r3, [r7, #6] 446 0090 5B0A lsrs r3, r3, #9 447 0092 9BB2 uxth r3, r3 448 0094 5BB2 sxtb r3, r3 449 0096 03F00103 and r3, r3, #1 450 009a 5AB2 sxtb r2, r3 451 .loc 1 78 26 452 009c 97F91730 ldrsb r3, [r7, #23] 453 00a0 5340 eors r3, r3, r2 454 00a2 5BB2 sxtb r3, r3 455 .loc 1 78 15 456 00a4 BB74 strb r3, [r7, #18] 79:Core/Src/ADBMS_LL_Driver.c **** const uint8 in14 = in0 ^ ((currentPEC >> 13) & 0x01); 457 .loc 1 79 48 458 00a6 FB88 ldrh r3, [r7, #6] 459 00a8 5B0B lsrs r3, r3, #13 460 00aa 9BB2 uxth r3, r3 461 00ac 5BB2 sxtb r3, r3 462 00ae 03F00103 and r3, r3, #1 463 00b2 5AB2 sxtb r2, r3 464 .loc 1 79 26 465 00b4 97F91730 ldrsb r3, [r7, #23] 466 00b8 5340 eors r3, r3, r2 467 00ba 5BB2 sxtb r3, r3 468 .loc 1 79 15 469 00bc 7B74 strb r3, [r7, #17] 80:Core/Src/ADBMS_LL_Driver.c **** 81:Core/Src/ADBMS_LL_Driver.c **** uint16 newPEC = 0; 470 .loc 1 81 10 471 00be 0023 movs r3, #0 472 00c0 FB81 strh r3, [r7, #14] @ movhi 82:Core/Src/ADBMS_LL_Driver.c **** 83:Core/Src/ADBMS_LL_Driver.c **** newPEC |= in14 << 14; 473 .loc 1 83 10 474 00c2 7B7C ldrb r3, [r7, #17] @ zero_extendqisi2 475 00c4 1BB2 sxth r3, r3 476 00c6 9B03 lsls r3, r3, #14 477 00c8 1AB2 sxth r2, r3 478 00ca B7F90E30 ldrsh r3, [r7, #14] 479 00ce 1343 orrs r3, r3, r2 480 00d0 1BB2 sxth r3, r3 481 00d2 FB81 strh r3, [r7, #14] @ movhi 84:Core/Src/ADBMS_LL_Driver.c **** newPEC |= (currentPEC & (0x01 << 12)) << 1; 482 .loc 1 84 41 483 00d4 B7F90630 ldrsh r3, [r7, #6] 484 00d8 5B00 lsls r3, r3, #1 485 00da 1BB2 sxth r3, r3 ARM GAS /tmp/cczsHaNw.s page 11 486 00dc 03F40053 and r3, r3, #8192 487 00e0 1AB2 sxth r2, r3 488 .loc 1 84 10 489 00e2 B7F90E30 ldrsh r3, [r7, #14] 490 00e6 1343 orrs r3, r3, r2 491 00e8 1BB2 sxth r3, r3 492 00ea FB81 strh r3, [r7, #14] @ movhi 85:Core/Src/ADBMS_LL_Driver.c **** newPEC |= (currentPEC & (0x01 << 11)) << 1; 493 .loc 1 85 41 494 00ec B7F90630 ldrsh r3, [r7, #6] 495 00f0 5B00 lsls r3, r3, #1 496 00f2 1BB2 sxth r3, r3 497 00f4 03F48053 and r3, r3, #4096 498 00f8 1AB2 sxth r2, r3 499 .loc 1 85 10 500 00fa B7F90E30 ldrsh r3, [r7, #14] 501 00fe 1343 orrs r3, r3, r2 502 0100 1BB2 sxth r3, r3 503 0102 FB81 strh r3, [r7, #14] @ movhi 86:Core/Src/ADBMS_LL_Driver.c **** newPEC |= (currentPEC & (0x01 << 10)) << 1; 504 .loc 1 86 41 505 0104 B7F90630 ldrsh r3, [r7, #6] 506 0108 5B00 lsls r3, r3, #1 507 010a 1BB2 sxth r3, r3 508 010c 03F40063 and r3, r3, #2048 509 0110 1AB2 sxth r2, r3 510 .loc 1 86 10 511 0112 B7F90E30 ldrsh r3, [r7, #14] 512 0116 1343 orrs r3, r3, r2 513 0118 1BB2 sxth r3, r3 514 011a FB81 strh r3, [r7, #14] @ movhi 87:Core/Src/ADBMS_LL_Driver.c **** newPEC |= in10 << 10; 515 .loc 1 87 10 516 011c BB7C ldrb r3, [r7, #18] @ zero_extendqisi2 517 011e 1BB2 sxth r3, r3 518 0120 9B02 lsls r3, r3, #10 519 0122 1AB2 sxth r2, r3 520 0124 B7F90E30 ldrsh r3, [r7, #14] 521 0128 1343 orrs r3, r3, r2 522 012a 1BB2 sxth r3, r3 523 012c FB81 strh r3, [r7, #14] @ movhi 88:Core/Src/ADBMS_LL_Driver.c **** newPEC |= (currentPEC & (0x01 << 8)) << 1; 524 .loc 1 88 40 525 012e B7F90630 ldrsh r3, [r7, #6] 526 0132 5B00 lsls r3, r3, #1 527 0134 1BB2 sxth r3, r3 528 0136 03F40073 and r3, r3, #512 529 013a 1AB2 sxth r2, r3 530 .loc 1 88 10 531 013c B7F90E30 ldrsh r3, [r7, #14] 532 0140 1343 orrs r3, r3, r2 533 0142 1BB2 sxth r3, r3 534 0144 FB81 strh r3, [r7, #14] @ movhi 89:Core/Src/ADBMS_LL_Driver.c **** newPEC |= in8 << 8; 535 .loc 1 89 10 536 0146 FB7C ldrb r3, [r7, #19] @ zero_extendqisi2 537 0148 1BB2 sxth r3, r3 ARM GAS /tmp/cczsHaNw.s page 12 538 014a 1B02 lsls r3, r3, #8 539 014c 1AB2 sxth r2, r3 540 014e B7F90E30 ldrsh r3, [r7, #14] 541 0152 1343 orrs r3, r3, r2 542 0154 1BB2 sxth r3, r3 543 0156 FB81 strh r3, [r7, #14] @ movhi 90:Core/Src/ADBMS_LL_Driver.c **** newPEC |= in7 << 7; 544 .loc 1 90 10 545 0158 3B7D ldrb r3, [r7, #20] @ zero_extendqisi2 546 015a 1BB2 sxth r3, r3 547 015c DB01 lsls r3, r3, #7 548 015e 1AB2 sxth r2, r3 549 0160 B7F90E30 ldrsh r3, [r7, #14] 550 0164 1343 orrs r3, r3, r2 551 0166 1BB2 sxth r3, r3 552 0168 FB81 strh r3, [r7, #14] @ movhi 91:Core/Src/ADBMS_LL_Driver.c **** newPEC |= (currentPEC & (0x01 << 5)) << 1; 553 .loc 1 91 40 554 016a B7F90630 ldrsh r3, [r7, #6] 555 016e 5B00 lsls r3, r3, #1 556 0170 1BB2 sxth r3, r3 557 0172 03F04003 and r3, r3, #64 558 0176 1AB2 sxth r2, r3 559 .loc 1 91 10 560 0178 B7F90E30 ldrsh r3, [r7, #14] 561 017c 1343 orrs r3, r3, r2 562 017e 1BB2 sxth r3, r3 563 0180 FB81 strh r3, [r7, #14] @ movhi 92:Core/Src/ADBMS_LL_Driver.c **** newPEC |= (currentPEC & (0x01 << 4)) << 1; 564 .loc 1 92 40 565 0182 B7F90630 ldrsh r3, [r7, #6] 566 0186 5B00 lsls r3, r3, #1 567 0188 1BB2 sxth r3, r3 568 018a 03F02003 and r3, r3, #32 569 018e 1AB2 sxth r2, r3 570 .loc 1 92 10 571 0190 B7F90E30 ldrsh r3, [r7, #14] 572 0194 1343 orrs r3, r3, r2 573 0196 1BB2 sxth r3, r3 574 0198 FB81 strh r3, [r7, #14] @ movhi 93:Core/Src/ADBMS_LL_Driver.c **** newPEC |= in4 << 4; 575 .loc 1 93 10 576 019a 7B7D ldrb r3, [r7, #21] @ zero_extendqisi2 577 019c 1BB2 sxth r3, r3 578 019e 1B01 lsls r3, r3, #4 579 01a0 1AB2 sxth r2, r3 580 01a2 B7F90E30 ldrsh r3, [r7, #14] 581 01a6 1343 orrs r3, r3, r2 582 01a8 1BB2 sxth r3, r3 583 01aa FB81 strh r3, [r7, #14] @ movhi 94:Core/Src/ADBMS_LL_Driver.c **** newPEC |= in3 << 3; 584 .loc 1 94 10 585 01ac BB7D ldrb r3, [r7, #22] @ zero_extendqisi2 586 01ae 1BB2 sxth r3, r3 587 01b0 DB00 lsls r3, r3, #3 588 01b2 1AB2 sxth r2, r3 589 01b4 B7F90E30 ldrsh r3, [r7, #14] ARM GAS /tmp/cczsHaNw.s page 13 590 01b8 1343 orrs r3, r3, r2 591 01ba 1BB2 sxth r3, r3 592 01bc FB81 strh r3, [r7, #14] @ movhi 95:Core/Src/ADBMS_LL_Driver.c **** newPEC |= (currentPEC & (0x01 << 1)) << 1; 593 .loc 1 95 40 594 01be B7F90630 ldrsh r3, [r7, #6] 595 01c2 5B00 lsls r3, r3, #1 596 01c4 1BB2 sxth r3, r3 597 01c6 03F00403 and r3, r3, #4 598 01ca 1AB2 sxth r2, r3 599 .loc 1 95 10 600 01cc B7F90E30 ldrsh r3, [r7, #14] 601 01d0 1343 orrs r3, r3, r2 602 01d2 1BB2 sxth r3, r3 603 01d4 FB81 strh r3, [r7, #14] @ movhi 96:Core/Src/ADBMS_LL_Driver.c **** newPEC |= (currentPEC & (0x01)) << 1; 604 .loc 1 96 35 605 01d6 B7F90630 ldrsh r3, [r7, #6] 606 01da 5B00 lsls r3, r3, #1 607 01dc 1BB2 sxth r3, r3 608 01de 03F00203 and r3, r3, #2 609 01e2 1AB2 sxth r2, r3 610 .loc 1 96 10 611 01e4 B7F90E30 ldrsh r3, [r7, #14] 612 01e8 1343 orrs r3, r3, r2 613 01ea 1BB2 sxth r3, r3 614 01ec FB81 strh r3, [r7, #14] @ movhi 97:Core/Src/ADBMS_LL_Driver.c **** newPEC |= in0; 615 .loc 1 97 10 616 01ee FB7D ldrb r3, [r7, #23] @ zero_extendqisi2 617 01f0 9AB2 uxth r2, r3 618 01f2 FB89 ldrh r3, [r7, #14] @ movhi 619 01f4 1343 orrs r3, r3, r2 620 01f6 FB81 strh r3, [r7, #14] @ movhi 98:Core/Src/ADBMS_LL_Driver.c **** 99:Core/Src/ADBMS_LL_Driver.c **** return newPEC; 621 .loc 1 99 10 622 01f8 FB89 ldrh r3, [r7, #14] 100:Core/Src/ADBMS_LL_Driver.c **** } 623 .loc 1 100 1 624 01fa 1846 mov r0, r3 625 01fc 1C37 adds r7, r7, #28 626 .cfi_def_cfa_offset 4 627 01fe BD46 mov sp, r7 628 .cfi_def_cfa_register 13 629 @ sp needed 630 0200 5DF8047B ldr r7, [sp], #4 631 .cfi_restore 7 632 .cfi_def_cfa_offset 0 633 0204 7047 bx lr 634 .cfi_endproc 635 .LFE133: 637 .section .text.pec10_calc,"ax",%progbits 638 .align 1 639 .global pec10_calc 640 .syntax unified 641 .thumb ARM GAS /tmp/cczsHaNw.s page 14 642 .thumb_func 644 pec10_calc: 645 .LFB134: 101:Core/Src/ADBMS_LL_Driver.c **** 102:Core/Src/ADBMS_LL_Driver.c **** //data PEC calculation 103:Core/Src/ADBMS_LL_Driver.c **** //CRC-10 104:Core/Src/ADBMS_LL_Driver.c **** //x^10 + x^7 + x^3 + x^2 + x + 1 105:Core/Src/ADBMS_LL_Driver.c **** 106:Core/Src/ADBMS_LL_Driver.c **** uint16_t pec10_calc(bool rx_cmd, int len, const uint8_t* data) { 646 .loc 1 106 64 647 .cfi_startproc 648 @ args = 0, pretend = 0, frame = 24 649 @ frame_needed = 1, uses_anonymous_args = 0 650 @ link register save eliminated. 651 0000 80B4 push {r7} 652 .cfi_def_cfa_offset 4 653 .cfi_offset 7, -4 654 0002 87B0 sub sp, sp, #28 655 .cfi_def_cfa_offset 32 656 0004 00AF add r7, sp, #0 657 .cfi_def_cfa_register 7 658 0006 0346 mov r3, r0 659 0008 B960 str r1, [r7, #8] 660 000a 7A60 str r2, [r7, #4] 661 000c FB73 strb r3, [r7, #15] 107:Core/Src/ADBMS_LL_Driver.c **** uint16_t remainder = 16; /* PEC_SEED; 0000010000 */ 662 .loc 1 107 12 663 000e 1023 movs r3, #16 664 0010 FB82 strh r3, [r7, #22] @ movhi 108:Core/Src/ADBMS_LL_Driver.c **** const uint16_t polynom = 0x8F; /* x10 + x7 + x3 + x2 + x + 1 <- the CRC15 polynomial 665 .loc 1 108 18 666 0012 8F23 movs r3, #143 667 0014 3B82 strh r3, [r7, #16] @ movhi 668 .LBB8: 109:Core/Src/ADBMS_LL_Driver.c **** 100 1000 1111 48F */ 110:Core/Src/ADBMS_LL_Driver.c **** 111:Core/Src/ADBMS_LL_Driver.c **** /* Perform modulo-2 division, a byte at a time. */ 112:Core/Src/ADBMS_LL_Driver.c **** for (uint8_t pbyte = 0; pbyte < len; ++pbyte) { 669 .loc 1 112 16 670 0016 0023 movs r3, #0 671 0018 7B75 strb r3, [r7, #21] 672 .loc 1 112 3 673 001a 24E0 b .L23 674 .L28: 113:Core/Src/ADBMS_LL_Driver.c **** /* Bring the next byte into the remainder. */ 114:Core/Src/ADBMS_LL_Driver.c **** remainder ^= (uint16_t)(data[pbyte] << 2); 675 .loc 1 114 33 676 001c 7B7D ldrb r3, [r7, #21] @ zero_extendqisi2 677 001e 7A68 ldr r2, [r7, #4] 678 0020 1344 add r3, r3, r2 679 0022 1B78 ldrb r3, [r3] @ zero_extendqisi2 680 .loc 1 114 18 681 0024 9B00 lsls r3, r3, #2 682 0026 9AB2 uxth r2, r3 683 .loc 1 114 15 684 0028 FB8A ldrh r3, [r7, #22] @ movhi 685 002a 5340 eors r3, r3, r2 ARM GAS /tmp/cczsHaNw.s page 15 686 002c FB82 strh r3, [r7, #22] @ movhi 687 .LBB9: 115:Core/Src/ADBMS_LL_Driver.c **** /* Perform modulo-2 division, a bit at a time.*/ 116:Core/Src/ADBMS_LL_Driver.c **** for (uint8_t bit_ = 8; bit_ > 0; --bit_) { 688 .loc 1 116 18 689 002e 0823 movs r3, #8 690 0030 3B75 strb r3, [r7, #20] 691 .loc 1 116 5 692 0032 12E0 b .L24 693 .L27: 117:Core/Src/ADBMS_LL_Driver.c **** /* Try to divide the current data bit. */ 118:Core/Src/ADBMS_LL_Driver.c **** if ((remainder & 0x200) > 694 .loc 1 118 22 695 0034 FB8A ldrh r3, [r7, #22] 696 0036 03F40073 and r3, r3, #512 697 .loc 1 118 10 698 003a 002B cmp r3, #0 699 003c 07DD ble .L25 119:Core/Src/ADBMS_LL_Driver.c **** 0) // equivalent to remainder & 2^14 simply check for MSB 120:Core/Src/ADBMS_LL_Driver.c **** { 121:Core/Src/ADBMS_LL_Driver.c **** remainder = (uint16_t)((remainder << 1)); 700 .loc 1 121 19 701 003e FB8A ldrh r3, [r7, #22] @ movhi 702 0040 5B00 lsls r3, r3, #1 703 0042 FB82 strh r3, [r7, #22] @ movhi 122:Core/Src/ADBMS_LL_Driver.c **** remainder = (uint16_t)(remainder ^ polynom); 704 .loc 1 122 19 705 0044 FA8A ldrh r2, [r7, #22] @ movhi 706 0046 3B8A ldrh r3, [r7, #16] @ movhi 707 0048 5340 eors r3, r3, r2 708 004a FB82 strh r3, [r7, #22] @ movhi 709 004c 02E0 b .L26 710 .L25: 123:Core/Src/ADBMS_LL_Driver.c **** } else { 124:Core/Src/ADBMS_LL_Driver.c **** remainder = (uint16_t)(remainder << 1); 711 .loc 1 124 19 712 004e FB8A ldrh r3, [r7, #22] @ movhi 713 0050 5B00 lsls r3, r3, #1 714 0052 FB82 strh r3, [r7, #22] @ movhi 715 .L26: 116:Core/Src/ADBMS_LL_Driver.c **** /* Try to divide the current data bit. */ 716 .loc 1 116 38 discriminator 2 717 0054 3B7D ldrb r3, [r7, #20] 718 0056 013B subs r3, r3, #1 719 0058 3B75 strb r3, [r7, #20] 720 .L24: 116:Core/Src/ADBMS_LL_Driver.c **** /* Try to divide the current data bit. */ 721 .loc 1 116 33 discriminator 1 722 005a 3B7D ldrb r3, [r7, #20] @ zero_extendqisi2 723 005c 002B cmp r3, #0 724 005e E9D1 bne .L27 725 .LBE9: 112:Core/Src/ADBMS_LL_Driver.c **** /* Bring the next byte into the remainder. */ 726 .loc 1 112 40 discriminator 2 727 0060 7B7D ldrb r3, [r7, #21] 728 0062 0133 adds r3, r3, #1 729 0064 7B75 strb r3, [r7, #21] ARM GAS /tmp/cczsHaNw.s page 16 730 .L23: 112:Core/Src/ADBMS_LL_Driver.c **** /* Bring the next byte into the remainder. */ 731 .loc 1 112 33 discriminator 1 732 0066 7B7D ldrb r3, [r7, #21] @ zero_extendqisi2 733 0068 BA68 ldr r2, [r7, #8] 734 006a 9A42 cmp r2, r3 735 006c D6DC bgt .L28 736 .LBE8: 125:Core/Src/ADBMS_LL_Driver.c **** } 126:Core/Src/ADBMS_LL_Driver.c **** } 127:Core/Src/ADBMS_LL_Driver.c **** } 128:Core/Src/ADBMS_LL_Driver.c **** if (rx_cmd == true) { 737 .loc 1 128 6 738 006e FB7B ldrb r3, [r7, #15] @ zero_extendqisi2 739 0070 002B cmp r3, #0 740 0072 27D0 beq .L29 129:Core/Src/ADBMS_LL_Driver.c **** remainder ^= (uint16_t)((data[len] & 0xFC) << 2); 741 .loc 1 129 34 742 0074 BB68 ldr r3, [r7, #8] 743 0076 7A68 ldr r2, [r7, #4] 744 0078 1344 add r3, r3, r2 745 007a 1B78 ldrb r3, [r3] @ zero_extendqisi2 746 .loc 1 129 48 747 007c 1BB2 sxth r3, r3 748 007e 9B00 lsls r3, r3, #2 749 0080 1BB2 sxth r3, r3 750 .loc 1 129 18 751 0082 03F47C73 and r3, r3, #1008 752 0086 1AB2 sxth r2, r3 753 .loc 1 129 15 754 0088 B7F91630 ldrsh r3, [r7, #22] 755 008c 5340 eors r3, r3, r2 756 008e 1BB2 sxth r3, r3 757 0090 FB82 strh r3, [r7, #22] @ movhi 758 .LBB10: 130:Core/Src/ADBMS_LL_Driver.c **** /* Perform modulo-2 division, a bit at a time */ 131:Core/Src/ADBMS_LL_Driver.c **** for (uint8_t bit_ = 6; bit_ > 0; --bit_) { 759 .loc 1 131 18 760 0092 0623 movs r3, #6 761 0094 FB74 strb r3, [r7, #19] 762 .loc 1 131 5 763 0096 12E0 b .L30 764 .L33: 132:Core/Src/ADBMS_LL_Driver.c **** /* Try to divide the current data bit */ 133:Core/Src/ADBMS_LL_Driver.c **** if ((remainder & 0x200) > 765 .loc 1 133 22 766 0098 FB8A ldrh r3, [r7, #22] 767 009a 03F40073 and r3, r3, #512 768 .loc 1 133 10 769 009e 002B cmp r3, #0 770 00a0 07DD ble .L31 134:Core/Src/ADBMS_LL_Driver.c **** 0) // equivalent to remainder & 2^14 simply check for MSB 135:Core/Src/ADBMS_LL_Driver.c **** { 136:Core/Src/ADBMS_LL_Driver.c **** remainder = (uint16_t)((remainder << 1)); 771 .loc 1 136 19 772 00a2 FB8A ldrh r3, [r7, #22] @ movhi 773 00a4 5B00 lsls r3, r3, #1 ARM GAS /tmp/cczsHaNw.s page 17 774 00a6 FB82 strh r3, [r7, #22] @ movhi 137:Core/Src/ADBMS_LL_Driver.c **** remainder = (uint16_t)(remainder ^ polynom); 775 .loc 1 137 19 776 00a8 FA8A ldrh r2, [r7, #22] @ movhi 777 00aa 3B8A ldrh r3, [r7, #16] @ movhi 778 00ac 5340 eors r3, r3, r2 779 00ae FB82 strh r3, [r7, #22] @ movhi 780 00b0 02E0 b .L32 781 .L31: 138:Core/Src/ADBMS_LL_Driver.c **** } else { 139:Core/Src/ADBMS_LL_Driver.c **** remainder = (uint16_t)((remainder << 1)); 782 .loc 1 139 19 783 00b2 FB8A ldrh r3, [r7, #22] @ movhi 784 00b4 5B00 lsls r3, r3, #1 785 00b6 FB82 strh r3, [r7, #22] @ movhi 786 .L32: 131:Core/Src/ADBMS_LL_Driver.c **** /* Try to divide the current data bit */ 787 .loc 1 131 38 discriminator 2 788 00b8 FB7C ldrb r3, [r7, #19] 789 00ba 013B subs r3, r3, #1 790 00bc FB74 strb r3, [r7, #19] 791 .L30: 131:Core/Src/ADBMS_LL_Driver.c **** /* Try to divide the current data bit */ 792 .loc 1 131 33 discriminator 1 793 00be FB7C ldrb r3, [r7, #19] @ zero_extendqisi2 794 00c0 002B cmp r3, #0 795 00c2 E9D1 bne .L33 796 .L29: 797 .LBE10: 140:Core/Src/ADBMS_LL_Driver.c **** } 141:Core/Src/ADBMS_LL_Driver.c **** } 142:Core/Src/ADBMS_LL_Driver.c **** } 143:Core/Src/ADBMS_LL_Driver.c **** return ((uint16_t)(remainder & 0x3FF)); 798 .loc 1 143 11 799 00c4 FB8A ldrh r3, [r7, #22] @ movhi 800 00c6 C3F30903 ubfx r3, r3, #0, #10 801 00ca 9BB2 uxth r3, r3 144:Core/Src/ADBMS_LL_Driver.c **** } 802 .loc 1 144 1 803 00cc 1846 mov r0, r3 804 00ce 1C37 adds r7, r7, #28 805 .cfi_def_cfa_offset 4 806 00d0 BD46 mov sp, r7 807 .cfi_def_cfa_register 13 808 @ sp needed 809 00d2 5DF8047B ldr r7, [sp], #4 810 .cfi_restore 7 811 .cfi_def_cfa_offset 0 812 00d6 7047 bx lr 813 .cfi_endproc 814 .LFE134: 816 .section .text.calculateDataPEC,"ax",%progbits 817 .align 1 818 .global calculateDataPEC 819 .syntax unified 820 .thumb 821 .thumb_func ARM GAS /tmp/cczsHaNw.s page 18 823 calculateDataPEC: 824 .LFB135: 145:Core/Src/ADBMS_LL_Driver.c **** 146:Core/Src/ADBMS_LL_Driver.c **** typedef uint16_t crc; 147:Core/Src/ADBMS_LL_Driver.c **** crc F_CRC_CalculaCheckSum(uint8_t const AF_Datos[], uint16_t VF_nBytes); 148:Core/Src/ADBMS_LL_Driver.c **** 149:Core/Src/ADBMS_LL_Driver.c **** uint8 calculateDataPEC(uint8_t* data, uint8_t datalen) { 825 .loc 1 149 56 826 .cfi_startproc 827 @ args = 0, pretend = 0, frame = 16 828 @ frame_needed = 1, uses_anonymous_args = 0 829 0000 80B5 push {r7, lr} 830 .cfi_def_cfa_offset 8 831 .cfi_offset 7, -8 832 .cfi_offset 14, -4 833 0002 84B0 sub sp, sp, #16 834 .cfi_def_cfa_offset 24 835 0004 00AF add r7, sp, #0 836 .cfi_def_cfa_register 7 837 0006 7860 str r0, [r7, #4] 838 0008 0B46 mov r3, r1 839 000a FB70 strb r3, [r7, #3] 150:Core/Src/ADBMS_LL_Driver.c **** 151:Core/Src/ADBMS_LL_Driver.c **** if (datalen >= 3) { 840 .loc 1 151 6 841 000c FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 842 000e 022B cmp r3, #2 843 0010 1CD9 bls .L36 844 .LBB11: 152:Core/Src/ADBMS_LL_Driver.c **** 153:Core/Src/ADBMS_LL_Driver.c **** const crc currentpec = pec10_calc(true, datalen - 2, data) & 0x3FF; // mask to 10 bits 845 .loc 1 153 30 846 0012 FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 847 0014 023B subs r3, r3, #2 848 0016 7A68 ldr r2, [r7, #4] 849 0018 1946 mov r1, r3 850 001a 0120 movs r0, #1 851 001c FFF7FEFF bl pec10_calc 852 0020 0346 mov r3, r0 853 .loc 1 153 17 discriminator 1 854 0022 C3F30903 ubfx r3, r3, #0, #10 855 0026 FB81 strh r3, [r7, #14] @ movhi 154:Core/Src/ADBMS_LL_Driver.c **** 155:Core/Src/ADBMS_LL_Driver.c **** // memory layout is [[zeroes], PEC[9:8]], [PEC[7:0]] 156:Core/Src/ADBMS_LL_Driver.c **** data[datalen - 2] = (currentpec >> 8) & 0xFF; 856 .loc 1 156 23 857 0028 FB89 ldrh r3, [r7, #14] 858 002a 1B0A lsrs r3, r3, #8 859 002c 99B2 uxth r1, r3 860 .loc 1 156 9 861 002e FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 862 0030 023B subs r3, r3, #2 863 0032 7A68 ldr r2, [r7, #4] 864 0034 1344 add r3, r3, r2 865 .loc 1 156 23 866 0036 CAB2 uxtb r2, r1 867 0038 1A70 strb r2, [r3] ARM GAS /tmp/cczsHaNw.s page 19 157:Core/Src/ADBMS_LL_Driver.c **** data[datalen - 1] = currentpec & 0xFF; 868 .loc 1 157 9 869 003a FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 870 003c 013B subs r3, r3, #1 871 003e 7A68 ldr r2, [r7, #4] 872 0040 1344 add r3, r3, r2 873 .loc 1 157 23 874 0042 FA89 ldrh r2, [r7, #14] @ movhi 875 0044 D2B2 uxtb r2, r2 876 0046 1A70 strb r2, [r3] 158:Core/Src/ADBMS_LL_Driver.c **** 159:Core/Src/ADBMS_LL_Driver.c **** return 0; 877 .loc 1 159 12 878 0048 0023 movs r3, #0 879 004a 00E0 b .L37 880 .L36: 881 .LBE11: 160:Core/Src/ADBMS_LL_Driver.c **** } else { 161:Core/Src/ADBMS_LL_Driver.c **** return 1; 882 .loc 1 161 12 883 004c 0123 movs r3, #1 884 .L37: 162:Core/Src/ADBMS_LL_Driver.c **** } 163:Core/Src/ADBMS_LL_Driver.c **** } 885 .loc 1 163 1 886 004e 1846 mov r0, r3 887 0050 1037 adds r7, r7, #16 888 .cfi_def_cfa_offset 8 889 0052 BD46 mov sp, r7 890 .cfi_def_cfa_register 13 891 @ sp needed 892 0054 80BD pop {r7, pc} 893 .cfi_endproc 894 .LFE135: 896 .section .text.checkDataPEC,"ax",%progbits 897 .align 1 898 .global checkDataPEC 899 .syntax unified 900 .thumb 901 .thumb_func 903 checkDataPEC: 904 .LFB136: 164:Core/Src/ADBMS_LL_Driver.c **** 165:Core/Src/ADBMS_LL_Driver.c **** uint8 checkDataPEC(uint8* data, uint8 len) { 905 .loc 1 165 44 906 .cfi_startproc 907 @ args = 0, pretend = 0, frame = 16 908 @ frame_needed = 1, uses_anonymous_args = 0 909 0000 80B5 push {r7, lr} 910 .cfi_def_cfa_offset 8 911 .cfi_offset 7, -8 912 .cfi_offset 14, -4 913 0002 84B0 sub sp, sp, #16 914 .cfi_def_cfa_offset 24 915 0004 00AF add r7, sp, #0 916 .cfi_def_cfa_register 7 917 0006 7860 str r0, [r7, #4] ARM GAS /tmp/cczsHaNw.s page 20 918 0008 0B46 mov r3, r1 919 000a FB70 strb r3, [r7, #3] 166:Core/Src/ADBMS_LL_Driver.c **** if (len <= 2) { 920 .loc 1 166 6 921 000c FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 922 000e 022B cmp r3, #2 923 0010 01D8 bhi .L39 167:Core/Src/ADBMS_LL_Driver.c **** return 255; 924 .loc 1 167 12 925 0012 FF23 movs r3, #255 926 0014 0DE0 b .L40 927 .L39: 168:Core/Src/ADBMS_LL_Driver.c **** } 169:Core/Src/ADBMS_LL_Driver.c **** 170:Core/Src/ADBMS_LL_Driver.c **** const crc currentpec = F_CRC_CalculaCheckSum(data, len); 928 .loc 1 170 26 929 0016 FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 930 0018 9BB2 uxth r3, r3 931 001a 1946 mov r1, r3 932 001c 7868 ldr r0, [r7, #4] 933 001e FFF7FEFF bl F_CRC_CalculaCheckSum 934 0022 0346 mov r3, r0 935 0024 FB81 strh r3, [r7, #14] @ movhi 171:Core/Src/ADBMS_LL_Driver.c **** 172:Core/Src/ADBMS_LL_Driver.c **** return (currentpec == 0) ? 0 : 1; 936 .loc 1 172 32 937 0026 FB89 ldrh r3, [r7, #14] 938 0028 002B cmp r3, #0 939 002a 14BF ite ne 940 002c 0123 movne r3, #1 941 002e 0023 moveq r3, #0 942 0030 DBB2 uxtb r3, r3 943 .L40: 173:Core/Src/ADBMS_LL_Driver.c **** } 944 .loc 1 173 1 945 0032 1846 mov r0, r3 946 0034 1037 adds r7, r7, #16 947 .cfi_def_cfa_offset 8 948 0036 BD46 mov sp, r7 949 .cfi_def_cfa_register 13 950 @ sp needed 951 0038 80BD pop {r7, pc} 952 .cfi_endproc 953 .LFE136: 955 .section .text.F_CRC_ObtenValorDeTabla,"ax",%progbits 956 .align 1 957 .syntax unified 958 .thumb 959 .thumb_func 961 F_CRC_ObtenValorDeTabla: 962 .LFB137: 174:Core/Src/ADBMS_LL_Driver.c **** 175:Core/Src/ADBMS_LL_Driver.c **** 176:Core/Src/ADBMS_LL_Driver.c **** static crc F_CRC_ObtenValorDeTabla(uint8_t VP_Pos_Tabla) { 963 .loc 1 176 58 964 .cfi_startproc 965 @ args = 0, pretend = 0, frame = 16 ARM GAS /tmp/cczsHaNw.s page 21 966 @ frame_needed = 1, uses_anonymous_args = 0 967 @ link register save eliminated. 968 0000 80B4 push {r7} 969 .cfi_def_cfa_offset 4 970 .cfi_offset 7, -4 971 0002 85B0 sub sp, sp, #20 972 .cfi_def_cfa_offset 24 973 0004 00AF add r7, sp, #0 974 .cfi_def_cfa_register 7 975 0006 0346 mov r3, r0 976 0008 FB71 strb r3, [r7, #7] 177:Core/Src/ADBMS_LL_Driver.c **** crc VP_CRCTableValue = 0; 977 .loc 1 177 7 978 000a 0023 movs r3, #0 979 000c FB81 strh r3, [r7, #14] @ movhi 178:Core/Src/ADBMS_LL_Driver.c **** uint8_t VP_Pos_bit = 0; 980 .loc 1 178 11 981 000e 0023 movs r3, #0 982 0010 7B73 strb r3, [r7, #13] 179:Core/Src/ADBMS_LL_Driver.c **** 180:Core/Src/ADBMS_LL_Driver.c **** VP_CRCTableValue = ((crc)(VP_Pos_Tabla)) << (10 - 8); 983 .loc 1 180 44 984 0012 FB79 ldrb r3, [r7, #7] @ zero_extendqisi2 985 0014 9BB2 uxth r3, r3 986 .loc 1 180 20 987 0016 9B00 lsls r3, r3, #2 988 0018 FB81 strh r3, [r7, #14] @ movhi 181:Core/Src/ADBMS_LL_Driver.c **** 182:Core/Src/ADBMS_LL_Driver.c **** for (VP_Pos_bit = 0; VP_Pos_bit < 8; VP_Pos_bit++) { 989 .loc 1 182 19 990 001a 0023 movs r3, #0 991 001c 7B73 strb r3, [r7, #13] 992 .loc 1 182 3 993 001e 13E0 b .L42 994 .L45: 183:Core/Src/ADBMS_LL_Driver.c **** if (VP_CRCTableValue & (((crc)1) << (10 - 1))) { 995 .loc 1 183 26 996 0020 FB89 ldrh r3, [r7, #14] 997 0022 03F40073 and r3, r3, #512 998 .loc 1 183 8 999 0026 002B cmp r3, #0 1000 0028 08D0 beq .L43 184:Core/Src/ADBMS_LL_Driver.c **** VP_CRCTableValue = (VP_CRCTableValue << 1) ^ 0x8F; 1001 .loc 1 184 50 1002 002a B7F90E30 ldrsh r3, [r7, #14] 1003 002e 5B00 lsls r3, r3, #1 1004 0030 1BB2 sxth r3, r3 1005 0032 83F08F03 eor r3, r3, #143 1006 0036 1BB2 sxth r3, r3 1007 .loc 1 184 24 1008 0038 FB81 strh r3, [r7, #14] @ movhi 1009 003a 02E0 b .L44 1010 .L43: 185:Core/Src/ADBMS_LL_Driver.c **** } else { 186:Core/Src/ADBMS_LL_Driver.c **** VP_CRCTableValue = (VP_CRCTableValue << 1); 1011 .loc 1 186 24 1012 003c FB89 ldrh r3, [r7, #14] @ movhi ARM GAS /tmp/cczsHaNw.s page 22 1013 003e 5B00 lsls r3, r3, #1 1014 0040 FB81 strh r3, [r7, #14] @ movhi 1015 .L44: 182:Core/Src/ADBMS_LL_Driver.c **** if (VP_CRCTableValue & (((crc)1) << (10 - 1))) { 1016 .loc 1 182 50 discriminator 2 1017 0042 7B7B ldrb r3, [r7, #13] @ zero_extendqisi2 1018 0044 0133 adds r3, r3, #1 1019 0046 7B73 strb r3, [r7, #13] 1020 .L42: 182:Core/Src/ADBMS_LL_Driver.c **** if (VP_CRCTableValue & (((crc)1) << (10 - 1))) { 1021 .loc 1 182 35 discriminator 1 1022 0048 7B7B ldrb r3, [r7, #13] @ zero_extendqisi2 1023 004a 072B cmp r3, #7 1024 004c E8D9 bls .L45 187:Core/Src/ADBMS_LL_Driver.c **** } 188:Core/Src/ADBMS_LL_Driver.c **** } 189:Core/Src/ADBMS_LL_Driver.c **** return ((VP_CRCTableValue)); 1025 .loc 1 189 10 1026 004e FB89 ldrh r3, [r7, #14] 190:Core/Src/ADBMS_LL_Driver.c **** } 1027 .loc 1 190 1 1028 0050 1846 mov r0, r3 1029 0052 1437 adds r7, r7, #20 1030 .cfi_def_cfa_offset 4 1031 0054 BD46 mov sp, r7 1032 .cfi_def_cfa_register 13 1033 @ sp needed 1034 0056 5DF8047B ldr r7, [sp], #4 1035 .cfi_restore 7 1036 .cfi_def_cfa_offset 0 1037 005a 7047 bx lr 1038 .cfi_endproc 1039 .LFE137: 1041 .section .text.F_CRC_CalculaCheckSum,"ax",%progbits 1042 .align 1 1043 .global F_CRC_CalculaCheckSum 1044 .syntax unified 1045 .thumb 1046 .thumb_func 1048 F_CRC_CalculaCheckSum: 1049 .LFB138: 191:Core/Src/ADBMS_LL_Driver.c **** crc F_CRC_CalculaCheckSum(uint8_t const AF_Datos[], uint16_t VF_nBytes) { 1050 .loc 1 191 73 1051 .cfi_startproc 1052 @ args = 0, pretend = 0, frame = 16 1053 @ frame_needed = 1, uses_anonymous_args = 0 1054 0000 90B5 push {r4, r7, lr} 1055 .cfi_def_cfa_offset 12 1056 .cfi_offset 4, -12 1057 .cfi_offset 7, -8 1058 .cfi_offset 14, -4 1059 0002 85B0 sub sp, sp, #20 1060 .cfi_def_cfa_offset 32 1061 0004 00AF add r7, sp, #0 1062 .cfi_def_cfa_register 7 1063 0006 7860 str r0, [r7, #4] 1064 0008 0B46 mov r3, r1 ARM GAS /tmp/cczsHaNw.s page 23 1065 000a 7B80 strh r3, [r7, #2] @ movhi 192:Core/Src/ADBMS_LL_Driver.c **** crc VP_CRCTableValue = 16; 1066 .loc 1 192 7 1067 000c 1023 movs r3, #16 1068 000e FB81 strh r3, [r7, #14] @ movhi 193:Core/Src/ADBMS_LL_Driver.c **** int16_t VP_bytes = 0; 1069 .loc 1 193 11 1070 0010 0023 movs r3, #0 1071 0012 BB81 strh r3, [r7, #12] @ movhi 194:Core/Src/ADBMS_LL_Driver.c **** 195:Core/Src/ADBMS_LL_Driver.c **** for (VP_bytes = 0; VP_bytes < VF_nBytes; VP_bytes++) { 1072 .loc 1 195 17 1073 0014 0023 movs r3, #0 1074 0016 BB81 strh r3, [r7, #12] @ movhi 1075 .loc 1 195 3 1076 0018 1CE0 b .L48 1077 .L49: 196:Core/Src/ADBMS_LL_Driver.c **** 197:Core/Src/ADBMS_LL_Driver.c **** VP_CRCTableValue = (VP_CRCTableValue << 8) ^ 1078 .loc 1 197 48 1079 001a B7F90E30 ldrsh r3, [r7, #14] 1080 001e 1B02 lsls r3, r3, #8 1081 0020 1CB2 sxth r4, r3 198:Core/Src/ADBMS_LL_Driver.c **** F_CRC_ObtenValorDeTabla( 199:Core/Src/ADBMS_LL_Driver.c **** ((uint8_t)((VP_CRCTableValue >> (10 - 8)) & 0xFF)) ^ 1082 .loc 1 199 29 1083 0022 FB89 ldrh r3, [r7, #14] 1084 0024 9B08 lsrs r3, r3, #2 1085 0026 9BB2 uxth r3, r3 1086 0028 DAB2 uxtb r2, r3 200:Core/Src/ADBMS_LL_Driver.c **** AF_Datos[VP_bytes]); 1087 .loc 1 200 36 1088 002a B7F90C30 ldrsh r3, [r7, #12] 1089 002e 7968 ldr r1, [r7, #4] 1090 0030 0B44 add r3, r3, r1 1091 0032 1B78 ldrb r3, [r3] @ zero_extendqisi2 198:Core/Src/ADBMS_LL_Driver.c **** F_CRC_ObtenValorDeTabla( 1092 .loc 1 198 24 1093 0034 5340 eors r3, r3, r2 1094 0036 DBB2 uxtb r3, r3 1095 0038 1846 mov r0, r3 1096 003a FFF7FEFF bl F_CRC_ObtenValorDeTabla 1097 003e 0346 mov r3, r0 198:Core/Src/ADBMS_LL_Driver.c **** F_CRC_ObtenValorDeTabla( 1098 .loc 1 198 24 is_stmt 0 discriminator 1 1099 0040 1BB2 sxth r3, r3 197:Core/Src/ADBMS_LL_Driver.c **** F_CRC_ObtenValorDeTabla( 1100 .loc 1 197 48 is_stmt 1 1101 0042 6340 eors r3, r3, r4 1102 0044 1BB2 sxth r3, r3 197:Core/Src/ADBMS_LL_Driver.c **** F_CRC_ObtenValorDeTabla( 1103 .loc 1 197 22 1104 0046 FB81 strh r3, [r7, #14] @ movhi 195:Core/Src/ADBMS_LL_Driver.c **** 1105 .loc 1 195 52 discriminator 3 1106 0048 B7F90C30 ldrsh r3, [r7, #12] 1107 004c 9BB2 uxth r3, r3 ARM GAS /tmp/cczsHaNw.s page 24 1108 004e 0133 adds r3, r3, #1 1109 0050 9BB2 uxth r3, r3 1110 0052 BB81 strh r3, [r7, #12] @ movhi 1111 .L48: 195:Core/Src/ADBMS_LL_Driver.c **** 1112 .loc 1 195 31 discriminator 1 1113 0054 B7F90C20 ldrsh r2, [r7, #12] 1114 0058 7B88 ldrh r3, [r7, #2] 1115 005a 9A42 cmp r2, r3 1116 005c DDDB blt .L49 201:Core/Src/ADBMS_LL_Driver.c **** } 202:Core/Src/ADBMS_LL_Driver.c **** 203:Core/Src/ADBMS_LL_Driver.c **** if ((8 * sizeof(crc)) > 10) { 204:Core/Src/ADBMS_LL_Driver.c **** VP_CRCTableValue = VP_CRCTableValue & ((((crc)(1)) << 10) - 1); 1117 .loc 1 204 22 1118 005e FB89 ldrh r3, [r7, #14] @ movhi 1119 0060 C3F30903 ubfx r3, r3, #0, #10 1120 0064 FB81 strh r3, [r7, #14] @ movhi 205:Core/Src/ADBMS_LL_Driver.c **** } 206:Core/Src/ADBMS_LL_Driver.c **** 207:Core/Src/ADBMS_LL_Driver.c **** return (VP_CRCTableValue ^ 0x0000); 1121 .loc 1 207 28 1122 0066 FB89 ldrh r3, [r7, #14] 208:Core/Src/ADBMS_LL_Driver.c **** } 1123 .loc 1 208 1 1124 0068 1846 mov r0, r3 1125 006a 1437 adds r7, r7, #20 1126 .cfi_def_cfa_offset 12 1127 006c BD46 mov sp, r7 1128 .cfi_def_cfa_register 13 1129 @ sp needed 1130 006e 90BD pop {r4, r7, pc} 1131 .cfi_endproc 1132 .LFE138: 1134 .section .text.updateDataPEC,"ax",%progbits 1135 .align 1 1136 .global updateDataPEC 1137 .syntax unified 1138 .thumb 1139 .thumb_func 1141 updateDataPEC: 1142 .LFB139: 209:Core/Src/ADBMS_LL_Driver.c **** 210:Core/Src/ADBMS_LL_Driver.c **** uint16 updateDataPEC(uint16 currentPEC, uint8 din) { 1143 .loc 1 210 52 1144 .cfi_startproc 1145 @ args = 0, pretend = 0, frame = 16 1146 @ frame_needed = 1, uses_anonymous_args = 0 1147 @ link register save eliminated. 1148 0000 80B4 push {r7} 1149 .cfi_def_cfa_offset 4 1150 .cfi_offset 7, -4 1151 0002 85B0 sub sp, sp, #20 1152 .cfi_def_cfa_offset 24 1153 0004 00AF add r7, sp, #0 1154 .cfi_def_cfa_register 7 1155 0006 0346 mov r3, r0 ARM GAS /tmp/cczsHaNw.s page 25 1156 0008 0A46 mov r2, r1 1157 000a FB80 strh r3, [r7, #6] @ movhi 1158 000c 1346 mov r3, r2 1159 000e 7B71 strb r3, [r7, #5] 211:Core/Src/ADBMS_LL_Driver.c **** din = (din >> 7) & 0x01; 1160 .loc 1 211 7 1161 0010 7B79 ldrb r3, [r7, #5] @ zero_extendqisi2 1162 0012 DB09 lsrs r3, r3, #7 1163 0014 7B71 strb r3, [r7, #5] 212:Core/Src/ADBMS_LL_Driver.c **** const uint8 in0 = din ^ ((currentPEC >> 9) & 0x01); 1164 .loc 1 212 46 1165 0016 FB88 ldrh r3, [r7, #6] 1166 0018 5B0A lsrs r3, r3, #9 1167 001a 9BB2 uxth r3, r3 1168 001c 5BB2 sxtb r3, r3 1169 001e 03F00103 and r3, r3, #1 1170 0022 5AB2 sxtb r2, r3 1171 .loc 1 212 25 1172 0024 97F90530 ldrsb r3, [r7, #5] 1173 0028 5340 eors r3, r3, r2 1174 002a 5BB2 sxtb r3, r3 1175 .loc 1 212 15 1176 002c FB73 strb r3, [r7, #15] 213:Core/Src/ADBMS_LL_Driver.c **** const uint8 in2 = in0 ^ ((currentPEC >> 1) & 0x01); 1177 .loc 1 213 46 1178 002e FB88 ldrh r3, [r7, #6] 1179 0030 5B08 lsrs r3, r3, #1 1180 0032 9BB2 uxth r3, r3 1181 0034 5BB2 sxtb r3, r3 1182 0036 03F00103 and r3, r3, #1 1183 003a 5AB2 sxtb r2, r3 1184 .loc 1 213 25 1185 003c 97F90F30 ldrsb r3, [r7, #15] 1186 0040 5340 eors r3, r3, r2 1187 0042 5BB2 sxtb r3, r3 1188 .loc 1 213 15 1189 0044 BB73 strb r3, [r7, #14] 214:Core/Src/ADBMS_LL_Driver.c **** const uint8 in3 = in0 ^ ((currentPEC >> 2) & 0x01); 1190 .loc 1 214 46 1191 0046 FB88 ldrh r3, [r7, #6] 1192 0048 9B08 lsrs r3, r3, #2 1193 004a 9BB2 uxth r3, r3 1194 004c 5BB2 sxtb r3, r3 1195 004e 03F00103 and r3, r3, #1 1196 0052 5AB2 sxtb r2, r3 1197 .loc 1 214 25 1198 0054 97F90F30 ldrsb r3, [r7, #15] 1199 0058 5340 eors r3, r3, r2 1200 005a 5BB2 sxtb r3, r3 1201 .loc 1 214 15 1202 005c 7B73 strb r3, [r7, #13] 215:Core/Src/ADBMS_LL_Driver.c **** const uint8 in7 = in0 ^ ((currentPEC >> 6) & 0x01); 1203 .loc 1 215 46 1204 005e FB88 ldrh r3, [r7, #6] 1205 0060 9B09 lsrs r3, r3, #6 1206 0062 9BB2 uxth r3, r3 1207 0064 5BB2 sxtb r3, r3 ARM GAS /tmp/cczsHaNw.s page 26 1208 0066 03F00103 and r3, r3, #1 1209 006a 5AB2 sxtb r2, r3 1210 .loc 1 215 25 1211 006c 97F90F30 ldrsb r3, [r7, #15] 1212 0070 5340 eors r3, r3, r2 1213 0072 5BB2 sxtb r3, r3 1214 .loc 1 215 15 1215 0074 3B73 strb r3, [r7, #12] 216:Core/Src/ADBMS_LL_Driver.c **** 217:Core/Src/ADBMS_LL_Driver.c **** uint16 newPEC = 0; 1216 .loc 1 217 10 1217 0076 0023 movs r3, #0 1218 0078 7B81 strh r3, [r7, #10] @ movhi 218:Core/Src/ADBMS_LL_Driver.c **** 219:Core/Src/ADBMS_LL_Driver.c **** newPEC |= (currentPEC & (0x01 << 8)) << 1; 1219 .loc 1 219 40 1220 007a B7F90630 ldrsh r3, [r7, #6] 1221 007e 5B00 lsls r3, r3, #1 1222 0080 1BB2 sxth r3, r3 1223 0082 03F40073 and r3, r3, #512 1224 0086 1AB2 sxth r2, r3 1225 .loc 1 219 10 1226 0088 B7F90A30 ldrsh r3, [r7, #10] 1227 008c 1343 orrs r3, r3, r2 1228 008e 1BB2 sxth r3, r3 1229 0090 7B81 strh r3, [r7, #10] @ movhi 220:Core/Src/ADBMS_LL_Driver.c **** newPEC |= (currentPEC & (0x01 << 7)) << 1; 1230 .loc 1 220 40 1231 0092 B7F90630 ldrsh r3, [r7, #6] 1232 0096 5B00 lsls r3, r3, #1 1233 0098 1BB2 sxth r3, r3 1234 009a 03F48073 and r3, r3, #256 1235 009e 1AB2 sxth r2, r3 1236 .loc 1 220 10 1237 00a0 B7F90A30 ldrsh r3, [r7, #10] 1238 00a4 1343 orrs r3, r3, r2 1239 00a6 1BB2 sxth r3, r3 1240 00a8 7B81 strh r3, [r7, #10] @ movhi 221:Core/Src/ADBMS_LL_Driver.c **** newPEC |= in7 << 7; 1241 .loc 1 221 10 1242 00aa 3B7B ldrb r3, [r7, #12] @ zero_extendqisi2 1243 00ac 1BB2 sxth r3, r3 1244 00ae DB01 lsls r3, r3, #7 1245 00b0 1AB2 sxth r2, r3 1246 00b2 B7F90A30 ldrsh r3, [r7, #10] 1247 00b6 1343 orrs r3, r3, r2 1248 00b8 1BB2 sxth r3, r3 1249 00ba 7B81 strh r3, [r7, #10] @ movhi 222:Core/Src/ADBMS_LL_Driver.c **** newPEC |= (currentPEC & (0x01 << 5)) << 1; 1250 .loc 1 222 40 1251 00bc B7F90630 ldrsh r3, [r7, #6] 1252 00c0 5B00 lsls r3, r3, #1 1253 00c2 1BB2 sxth r3, r3 1254 00c4 03F04003 and r3, r3, #64 1255 00c8 1AB2 sxth r2, r3 1256 .loc 1 222 10 1257 00ca B7F90A30 ldrsh r3, [r7, #10] ARM GAS /tmp/cczsHaNw.s page 27 1258 00ce 1343 orrs r3, r3, r2 1259 00d0 1BB2 sxth r3, r3 1260 00d2 7B81 strh r3, [r7, #10] @ movhi 223:Core/Src/ADBMS_LL_Driver.c **** newPEC |= (currentPEC & (0x01 << 4)) << 1; 1261 .loc 1 223 40 1262 00d4 B7F90630 ldrsh r3, [r7, #6] 1263 00d8 5B00 lsls r3, r3, #1 1264 00da 1BB2 sxth r3, r3 1265 00dc 03F02003 and r3, r3, #32 1266 00e0 1AB2 sxth r2, r3 1267 .loc 1 223 10 1268 00e2 B7F90A30 ldrsh r3, [r7, #10] 1269 00e6 1343 orrs r3, r3, r2 1270 00e8 1BB2 sxth r3, r3 1271 00ea 7B81 strh r3, [r7, #10] @ movhi 224:Core/Src/ADBMS_LL_Driver.c **** newPEC |= in3 << 3; 1272 .loc 1 224 10 1273 00ec 7B7B ldrb r3, [r7, #13] @ zero_extendqisi2 1274 00ee 1BB2 sxth r3, r3 1275 00f0 DB00 lsls r3, r3, #3 1276 00f2 1AB2 sxth r2, r3 1277 00f4 B7F90A30 ldrsh r3, [r7, #10] 1278 00f8 1343 orrs r3, r3, r2 1279 00fa 1BB2 sxth r3, r3 1280 00fc 7B81 strh r3, [r7, #10] @ movhi 225:Core/Src/ADBMS_LL_Driver.c **** newPEC |= in2 << 2; 1281 .loc 1 225 10 1282 00fe BB7B ldrb r3, [r7, #14] @ zero_extendqisi2 1283 0100 1BB2 sxth r3, r3 1284 0102 9B00 lsls r3, r3, #2 1285 0104 1AB2 sxth r2, r3 1286 0106 B7F90A30 ldrsh r3, [r7, #10] 1287 010a 1343 orrs r3, r3, r2 1288 010c 1BB2 sxth r3, r3 1289 010e 7B81 strh r3, [r7, #10] @ movhi 226:Core/Src/ADBMS_LL_Driver.c **** newPEC |= (currentPEC & (0x01)) << 1; 1290 .loc 1 226 35 1291 0110 B7F90630 ldrsh r3, [r7, #6] 1292 0114 5B00 lsls r3, r3, #1 1293 0116 1BB2 sxth r3, r3 1294 0118 03F00203 and r3, r3, #2 1295 011c 1AB2 sxth r2, r3 1296 .loc 1 226 10 1297 011e B7F90A30 ldrsh r3, [r7, #10] 1298 0122 1343 orrs r3, r3, r2 1299 0124 1BB2 sxth r3, r3 1300 0126 7B81 strh r3, [r7, #10] @ movhi 227:Core/Src/ADBMS_LL_Driver.c **** newPEC |= in0; 1301 .loc 1 227 10 1302 0128 FB7B ldrb r3, [r7, #15] @ zero_extendqisi2 1303 012a 9AB2 uxth r2, r3 1304 012c 7B89 ldrh r3, [r7, #10] @ movhi 1305 012e 1343 orrs r3, r3, r2 1306 0130 7B81 strh r3, [r7, #10] @ movhi 228:Core/Src/ADBMS_LL_Driver.c **** 229:Core/Src/ADBMS_LL_Driver.c **** return newPEC; 1307 .loc 1 229 10 ARM GAS /tmp/cczsHaNw.s page 28 1308 0132 7B89 ldrh r3, [r7, #10] 230:Core/Src/ADBMS_LL_Driver.c **** } 1309 .loc 1 230 1 1310 0134 1846 mov r0, r3 1311 0136 1437 adds r7, r7, #20 1312 .cfi_def_cfa_offset 4 1313 0138 BD46 mov sp, r7 1314 .cfi_def_cfa_register 13 1315 @ sp needed 1316 013a 5DF8047B ldr r7, [sp], #4 1317 .cfi_restore 7 1318 .cfi_def_cfa_offset 0 1319 013e 7047 bx lr 1320 .cfi_endproc 1321 .LFE139: 1323 .section .text.writeCMD,"ax",%progbits 1324 .align 1 1325 .global writeCMD 1326 .syntax unified 1327 .thumb 1328 .thumb_func 1330 writeCMD: 1331 .LFB140: 231:Core/Src/ADBMS_LL_Driver.c **** 232:Core/Src/ADBMS_LL_Driver.c **** uint8 writeCMD(uint16 command, const uint8 * args, uint8 arglen) { 1332 .loc 1 232 66 1333 .cfi_startproc 1334 @ args = 0, pretend = 0, frame = 24 1335 @ frame_needed = 1, uses_anonymous_args = 0 1336 0000 2DE9F043 push {r4, r5, r6, r7, r8, r9, lr} 1337 .cfi_def_cfa_offset 28 1338 .cfi_offset 4, -28 1339 .cfi_offset 5, -24 1340 .cfi_offset 6, -20 1341 .cfi_offset 7, -16 1342 .cfi_offset 8, -12 1343 .cfi_offset 9, -8 1344 .cfi_offset 14, -4 1345 0004 87B0 sub sp, sp, #28 1346 .cfi_def_cfa_offset 56 1347 0006 00AF add r7, sp, #0 1348 .cfi_def_cfa_register 7 1349 0008 0346 mov r3, r0 1350 000a 3960 str r1, [r7] 1351 000c FB80 strh r3, [r7, #6] @ movhi 1352 000e 1346 mov r3, r2 1353 0010 7B71 strb r3, [r7, #5] 233:Core/Src/ADBMS_LL_Driver.c **** uint8 ret; 234:Core/Src/ADBMS_LL_Driver.c **** if (arglen > 0) { 1354 .loc 1 234 6 1355 0012 7B79 ldrb r3, [r7, #5] @ zero_extendqisi2 1356 0014 002B cmp r3, #0 1357 0016 60D0 beq .L54 1358 .LBB12: 1359 .loc 1 234 19 discriminator 1 1360 0018 6B46 mov r3, sp 1361 001a 1E46 mov r6, r3 ARM GAS /tmp/cczsHaNw.s page 29 235:Core/Src/ADBMS_LL_Driver.c **** uint8 buffer[6 + arglen]; //command + PEC (2 bytes) + data + DPEC (2 bytes) 1362 .loc 1 235 20 1363 001c 7B79 ldrb r3, [r7, #5] @ zero_extendqisi2 1364 001e 991D adds r1, r3, #6 1365 .loc 1 235 11 1366 0020 4B1E subs r3, r1, #1 1367 0022 3B61 str r3, [r7, #16] 1368 0024 0A46 mov r2, r1 1369 0026 0023 movs r3, #0 1370 0028 9046 mov r8, r2 1371 002a 9946 mov r9, r3 1372 002c 4FF00002 mov r2, #0 1373 0030 4FF00003 mov r3, #0 1374 0034 4FEAC903 lsl r3, r9, #3 1375 0038 43EA5873 orr r3, r3, r8, lsr #29 1376 003c 4FEAC802 lsl r2, r8, #3 1377 0040 0A46 mov r2, r1 1378 0042 0023 movs r3, #0 1379 0044 1446 mov r4, r2 1380 0046 1D46 mov r5, r3 1381 0048 4FF00002 mov r2, #0 1382 004c 4FF00003 mov r3, #0 1383 0050 EB00 lsls r3, r5, #3 1384 0052 43EA5473 orr r3, r3, r4, lsr #29 1385 0056 E200 lsls r2, r4, #3 1386 0058 0B46 mov r3, r1 1387 005a 0733 adds r3, r3, #7 1388 005c DB08 lsrs r3, r3, #3 1389 005e DB00 lsls r3, r3, #3 1390 0060 ADEB030D sub sp, sp, r3 1391 0064 6B46 mov r3, sp 1392 0066 0033 adds r3, r3, #0 1393 0068 FB60 str r3, [r7, #12] 236:Core/Src/ADBMS_LL_Driver.c **** buffer[0] = (command >> 8) & 0xFF; 1394 .loc 1 236 15 1395 006a FB88 ldrh r3, [r7, #6] 1396 006c 1B0A lsrs r3, r3, #8 1397 006e 9BB2 uxth r3, r3 1398 0070 DAB2 uxtb r2, r3 1399 0072 FB68 ldr r3, [r7, #12] 1400 0074 1A70 strb r2, [r3] 237:Core/Src/ADBMS_LL_Driver.c **** buffer[1] = (command) & 0xFF; 1401 .loc 1 237 15 1402 0076 FB88 ldrh r3, [r7, #6] @ movhi 1403 0078 DAB2 uxtb r2, r3 1404 007a FB68 ldr r3, [r7, #12] 1405 007c 5A70 strb r2, [r3, #1] 238:Core/Src/ADBMS_LL_Driver.c **** 239:Core/Src/ADBMS_LL_Driver.c **** calculateCommandPEC(buffer, 4); 1406 .loc 1 239 5 1407 007e 0421 movs r1, #4 1408 0080 F868 ldr r0, [r7, #12] 1409 0082 FFF7FEFF bl calculateCommandPEC 1410 .LBB13: 240:Core/Src/ADBMS_LL_Driver.c **** 241:Core/Src/ADBMS_LL_Driver.c **** for (uint8 i = 0; i < arglen; i++) { 1411 .loc 1 241 16 ARM GAS /tmp/cczsHaNw.s page 30 1412 0086 0023 movs r3, #0 1413 0088 BB75 strb r3, [r7, #22] 1414 .loc 1 241 5 1415 008a 0AE0 b .L55 1416 .L56: 242:Core/Src/ADBMS_LL_Driver.c **** buffer[4 + i] = args[i]; 1417 .loc 1 242 27 1418 008c BB7D ldrb r3, [r7, #22] @ zero_extendqisi2 1419 008e 3A68 ldr r2, [r7] 1420 0090 1A44 add r2, r2, r3 1421 .loc 1 242 16 1422 0092 BB7D ldrb r3, [r7, #22] @ zero_extendqisi2 1423 0094 0433 adds r3, r3, #4 1424 .loc 1 242 27 1425 0096 1178 ldrb r1, [r2] @ zero_extendqisi2 1426 .loc 1 242 21 1427 0098 FA68 ldr r2, [r7, #12] 1428 009a D154 strb r1, [r2, r3] 241:Core/Src/ADBMS_LL_Driver.c **** buffer[4 + i] = args[i]; 1429 .loc 1 241 36 discriminator 3 1430 009c BB7D ldrb r3, [r7, #22] @ zero_extendqisi2 1431 009e 0133 adds r3, r3, #1 1432 00a0 BB75 strb r3, [r7, #22] 1433 .L55: 241:Core/Src/ADBMS_LL_Driver.c **** buffer[4 + i] = args[i]; 1434 .loc 1 241 25 discriminator 1 1435 00a2 BA7D ldrb r2, [r7, #22] @ zero_extendqisi2 1436 00a4 7B79 ldrb r3, [r7, #5] @ zero_extendqisi2 1437 00a6 9A42 cmp r2, r3 1438 00a8 F0D3 bcc .L56 1439 .LBE13: 243:Core/Src/ADBMS_LL_Driver.c **** } 244:Core/Src/ADBMS_LL_Driver.c **** 245:Core/Src/ADBMS_LL_Driver.c **** calculateDataPEC(&buffer[4], arglen + 2); //DPEC is calculated over the data, not the command, 1440 .loc 1 245 5 1441 00aa FB68 ldr r3, [r7, #12] 1442 00ac 1A1D adds r2, r3, #4 1443 00ae 7B79 ldrb r3, [r7, #5] 1444 00b0 0233 adds r3, r3, #2 1445 00b2 DBB2 uxtb r3, r3 1446 00b4 1946 mov r1, r3 1447 00b6 1046 mov r0, r2 1448 00b8 FFF7FEFF bl calculateDataPEC 246:Core/Src/ADBMS_LL_Driver.c **** 247:Core/Src/ADBMS_LL_Driver.c **** mcuAdbmsCSLow(); 1449 .loc 1 247 5 1450 00bc FFF7FEFF bl mcuAdbmsCSLow 248:Core/Src/ADBMS_LL_Driver.c **** ret = mcuSPITransmit(buffer, 6 + arglen); 1451 .loc 1 248 11 1452 00c0 7B79 ldrb r3, [r7, #5] 1453 00c2 0633 adds r3, r3, #6 1454 00c4 DBB2 uxtb r3, r3 1455 00c6 1946 mov r1, r3 1456 00c8 F868 ldr r0, [r7, #12] 1457 00ca FFF7FEFF bl mcuSPITransmit 1458 00ce 0346 mov r3, r0 1459 00d0 FB75 strb r3, [r7, #23] ARM GAS /tmp/cczsHaNw.s page 31 249:Core/Src/ADBMS_LL_Driver.c **** mcuAdbmsCSHigh(); 1460 .loc 1 249 5 1461 00d2 FFF7FEFF bl mcuAdbmsCSHigh 1462 00d6 B546 mov sp, r6 1463 .LBE12: 1464 00d8 19E0 b .L57 1465 .L54: 1466 .LBB14: 250:Core/Src/ADBMS_LL_Driver.c **** } else { 251:Core/Src/ADBMS_LL_Driver.c **** uint8 buffer[4]; 252:Core/Src/ADBMS_LL_Driver.c **** buffer[0] = (command >> 8) & 0xFF; 1467 .loc 1 252 15 1468 00da FB88 ldrh r3, [r7, #6] 1469 00dc 1B0A lsrs r3, r3, #8 1470 00de 9BB2 uxth r3, r3 1471 00e0 DBB2 uxtb r3, r3 1472 00e2 3B72 strb r3, [r7, #8] 253:Core/Src/ADBMS_LL_Driver.c **** buffer[1] = (command) & 0xFF; 1473 .loc 1 253 15 1474 00e4 FB88 ldrh r3, [r7, #6] @ movhi 1475 00e6 DBB2 uxtb r3, r3 1476 00e8 7B72 strb r3, [r7, #9] 254:Core/Src/ADBMS_LL_Driver.c **** calculateCommandPEC(buffer, 4); 1477 .loc 1 254 5 1478 00ea 07F10803 add r3, r7, #8 1479 00ee 0421 movs r1, #4 1480 00f0 1846 mov r0, r3 1481 00f2 FFF7FEFF bl calculateCommandPEC 255:Core/Src/ADBMS_LL_Driver.c **** 256:Core/Src/ADBMS_LL_Driver.c **** mcuAdbmsCSLow(); 1482 .loc 1 256 5 1483 00f6 FFF7FEFF bl mcuAdbmsCSLow 257:Core/Src/ADBMS_LL_Driver.c **** 258:Core/Src/ADBMS_LL_Driver.c **** ret = mcuSPITransmit(buffer, 4); 1484 .loc 1 258 11 1485 00fa 07F10803 add r3, r7, #8 1486 00fe 0421 movs r1, #4 1487 0100 1846 mov r0, r3 1488 0102 FFF7FEFF bl mcuSPITransmit 1489 0106 0346 mov r3, r0 1490 0108 FB75 strb r3, [r7, #23] 259:Core/Src/ADBMS_LL_Driver.c **** 260:Core/Src/ADBMS_LL_Driver.c **** mcuAdbmsCSHigh(); 1491 .loc 1 260 5 1492 010a FFF7FEFF bl mcuAdbmsCSHigh 1493 .L57: 1494 .LBE14: 261:Core/Src/ADBMS_LL_Driver.c **** } 262:Core/Src/ADBMS_LL_Driver.c **** 263:Core/Src/ADBMS_LL_Driver.c **** return ret; 1495 .loc 1 263 10 1496 010e FB7D ldrb r3, [r7, #23] @ zero_extendqisi2 264:Core/Src/ADBMS_LL_Driver.c **** } 1497 .loc 1 264 1 1498 0110 1846 mov r0, r3 1499 0112 1C37 adds r7, r7, #28 1500 .cfi_def_cfa_offset 28 ARM GAS /tmp/cczsHaNw.s page 32 1501 0114 BD46 mov sp, r7 1502 .cfi_def_cfa_register 13 1503 @ sp needed 1504 0116 BDE8F083 pop {r4, r5, r6, r7, r8, r9, pc} 1505 .cfi_endproc 1506 .LFE140: 1508 .section .text.readCMD,"ax",%progbits 1509 .align 1 1510 .global readCMD 1511 .syntax unified 1512 .thumb 1513 .thumb_func 1515 readCMD: 1516 .LFB141: 265:Core/Src/ADBMS_LL_Driver.c **** 266:Core/Src/ADBMS_LL_Driver.c **** uint8 readCMD(uint16 command, uint8 * buffer, uint8 buflen) { 1517 .loc 1 266 61 1518 .cfi_startproc 1519 @ args = 0, pretend = 0, frame = 48 1520 @ frame_needed = 1, uses_anonymous_args = 0 1521 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, r10, fp, lr} 1522 .cfi_def_cfa_offset 36 1523 .cfi_offset 4, -36 1524 .cfi_offset 5, -32 1525 .cfi_offset 6, -28 1526 .cfi_offset 7, -24 1527 .cfi_offset 8, -20 1528 .cfi_offset 9, -16 1529 .cfi_offset 10, -12 1530 .cfi_offset 11, -8 1531 .cfi_offset 14, -4 1532 0004 8DB0 sub sp, sp, #52 1533 .cfi_def_cfa_offset 88 1534 0006 00AF add r7, sp, #0 1535 .cfi_def_cfa_register 7 1536 0008 0346 mov r3, r0 1537 000a 3961 str r1, [r7, #16] 1538 000c FB82 strh r3, [r7, #22] @ movhi 1539 000e 1346 mov r3, r2 1540 0010 7B75 strb r3, [r7, #21] 1541 .loc 1 266 61 1542 0012 6B46 mov r3, sp 1543 0014 7B60 str r3, [r7, #4] 267:Core/Src/ADBMS_LL_Driver.c **** uint8 txbuffer[6 + buflen]; 1544 .loc 1 267 20 1545 0016 7B7D ldrb r3, [r7, #21] @ zero_extendqisi2 1546 0018 991D adds r1, r3, #6 1547 .loc 1 267 9 1548 001a 4B1E subs r3, r1, #1 1549 001c BB62 str r3, [r7, #40] 1550 001e 0A46 mov r2, r1 1551 0020 0023 movs r3, #0 1552 0022 BA60 str r2, [r7, #8] 1553 0024 FB60 str r3, [r7, #12] 1554 0026 4FF00002 mov r2, #0 1555 002a 4FF00003 mov r3, #0 1556 002e F868 ldr r0, [r7, #12] ARM GAS /tmp/cczsHaNw.s page 33 1557 0030 C300 lsls r3, r0, #3 1558 0032 B868 ldr r0, [r7, #8] 1559 0034 43EA5073 orr r3, r3, r0, lsr #29 1560 0038 B868 ldr r0, [r7, #8] 1561 003a C200 lsls r2, r0, #3 1562 003c 0A46 mov r2, r1 1563 003e 0023 movs r3, #0 1564 0040 9246 mov r10, r2 1565 0042 9B46 mov fp, r3 1566 0044 4FF00002 mov r2, #0 1567 0048 4FF00003 mov r3, #0 1568 004c 4FEACB03 lsl r3, fp, #3 1569 0050 43EA5A73 orr r3, r3, r10, lsr #29 1570 0054 4FEACA02 lsl r2, r10, #3 1571 0058 0B46 mov r3, r1 1572 005a 0733 adds r3, r3, #7 1573 005c DB08 lsrs r3, r3, #3 1574 005e DB00 lsls r3, r3, #3 1575 0060 ADEB030D sub sp, sp, r3 1576 0064 6B46 mov r3, sp 1577 0066 0033 adds r3, r3, #0 1578 0068 7B62 str r3, [r7, #36] 268:Core/Src/ADBMS_LL_Driver.c **** uint8 rxbuffer[6 + buflen]; 1579 .loc 1 268 20 1580 006a 7B7D ldrb r3, [r7, #21] @ zero_extendqisi2 1581 006c 9E1D adds r6, r3, #6 1582 .loc 1 268 9 1583 006e 731E subs r3, r6, #1 1584 0070 3B62 str r3, [r7, #32] 1585 0072 3246 mov r2, r6 1586 0074 0023 movs r3, #0 1587 0076 9046 mov r8, r2 1588 0078 9946 mov r9, r3 1589 007a 4FF00002 mov r2, #0 1590 007e 4FF00003 mov r3, #0 1591 0082 4FEAC903 lsl r3, r9, #3 1592 0086 43EA5873 orr r3, r3, r8, lsr #29 1593 008a 4FEAC802 lsl r2, r8, #3 1594 008e 3246 mov r2, r6 1595 0090 0023 movs r3, #0 1596 0092 1446 mov r4, r2 1597 0094 1D46 mov r5, r3 1598 0096 4FF00002 mov r2, #0 1599 009a 4FF00003 mov r3, #0 1600 009e EB00 lsls r3, r5, #3 1601 00a0 43EA5473 orr r3, r3, r4, lsr #29 1602 00a4 E200 lsls r2, r4, #3 1603 00a6 3346 mov r3, r6 1604 00a8 0733 adds r3, r3, #7 1605 00aa DB08 lsrs r3, r3, #3 1606 00ac DB00 lsls r3, r3, #3 1607 00ae ADEB030D sub sp, sp, r3 1608 00b2 6B46 mov r3, sp 1609 00b4 0033 adds r3, r3, #0 1610 00b6 FB61 str r3, [r7, #28] 269:Core/Src/ADBMS_LL_Driver.c **** 270:Core/Src/ADBMS_LL_Driver.c **** txbuffer[0] = (command >> 8) & 0xFF; ARM GAS /tmp/cczsHaNw.s page 34 1611 .loc 1 270 15 1612 00b8 FB8A ldrh r3, [r7, #22] 1613 00ba 1B0A lsrs r3, r3, #8 1614 00bc 9BB2 uxth r3, r3 1615 00be DAB2 uxtb r2, r3 1616 00c0 7B6A ldr r3, [r7, #36] 1617 00c2 1A70 strb r2, [r3] 271:Core/Src/ADBMS_LL_Driver.c **** txbuffer[1] = (command)&0xFF; 1618 .loc 1 271 15 1619 00c4 FB8A ldrh r3, [r7, #22] @ movhi 1620 00c6 DAB2 uxtb r2, r3 1621 00c8 7B6A ldr r3, [r7, #36] 1622 00ca 5A70 strb r2, [r3, #1] 272:Core/Src/ADBMS_LL_Driver.c **** calculateCommandPEC(txbuffer, 4); 1623 .loc 1 272 3 1624 00cc 0421 movs r1, #4 1625 00ce 786A ldr r0, [r7, #36] 1626 00d0 FFF7FEFF bl calculateCommandPEC 273:Core/Src/ADBMS_LL_Driver.c **** 274:Core/Src/ADBMS_LL_Driver.c **** mcuAdbmsCSLow(); 1627 .loc 1 274 3 1628 00d4 FFF7FEFF bl mcuAdbmsCSLow 275:Core/Src/ADBMS_LL_Driver.c **** uint8 status = mcuSPITransmitReceive(rxbuffer, txbuffer, 6 + buflen); 1629 .loc 1 275 18 1630 00d8 7B7D ldrb r3, [r7, #21] 1631 00da 0633 adds r3, r3, #6 1632 00dc DBB2 uxtb r3, r3 1633 00de 1A46 mov r2, r3 1634 00e0 796A ldr r1, [r7, #36] 1635 00e2 F869 ldr r0, [r7, #28] 1636 00e4 FFF7FEFF bl mcuSPITransmitReceive 1637 00e8 0346 mov r3, r0 1638 00ea FB76 strb r3, [r7, #27] 276:Core/Src/ADBMS_LL_Driver.c **** mcuAdbmsCSHigh(); 1639 .loc 1 276 3 1640 00ec FFF7FEFF bl mcuAdbmsCSHigh 277:Core/Src/ADBMS_LL_Driver.c **** 278:Core/Src/ADBMS_LL_Driver.c **** if (status != 0) { 1641 .loc 1 278 6 1642 00f0 FB7E ldrb r3, [r7, #27] @ zero_extendqisi2 1643 00f2 002B cmp r3, #0 1644 00f4 01D0 beq .L60 279:Core/Src/ADBMS_LL_Driver.c **** return status; 1645 .loc 1 279 12 1646 00f6 FB7E ldrb r3, [r7, #27] @ zero_extendqisi2 1647 00f8 28E0 b .L61 1648 .L60: 1649 .LBB15: 280:Core/Src/ADBMS_LL_Driver.c **** } 281:Core/Src/ADBMS_LL_Driver.c **** 282:Core/Src/ADBMS_LL_Driver.c **** for (uint8 i = 0; i < buflen; i++) { 1650 .loc 1 282 14 1651 00fa 0023 movs r3, #0 1652 00fc 87F82F30 strb r3, [r7, #47] 1653 .loc 1 282 3 1654 0100 0EE0 b .L62 1655 .L63: ARM GAS /tmp/cczsHaNw.s page 35 283:Core/Src/ADBMS_LL_Driver.c **** buffer[i] = rxbuffer[i + 4]; 1656 .loc 1 283 28 1657 0102 97F82F30 ldrb r3, [r7, #47] @ zero_extendqisi2 1658 0106 1A1D adds r2, r3, #4 1659 .loc 1 283 11 1660 0108 97F82F30 ldrb r3, [r7, #47] @ zero_extendqisi2 1661 010c 3969 ldr r1, [r7, #16] 1662 010e 0B44 add r3, r3, r1 1663 .loc 1 283 25 1664 0110 F969 ldr r1, [r7, #28] 1665 0112 8A5C ldrb r2, [r1, r2] @ zero_extendqisi2 1666 .loc 1 283 15 1667 0114 1A70 strb r2, [r3] 282:Core/Src/ADBMS_LL_Driver.c **** buffer[i] = rxbuffer[i + 4]; 1668 .loc 1 282 34 discriminator 3 1669 0116 97F82F30 ldrb r3, [r7, #47] @ zero_extendqisi2 1670 011a 0133 adds r3, r3, #1 1671 011c 87F82F30 strb r3, [r7, #47] 1672 .L62: 282:Core/Src/ADBMS_LL_Driver.c **** buffer[i] = rxbuffer[i + 4]; 1673 .loc 1 282 23 discriminator 1 1674 0120 97F82F20 ldrb r2, [r7, #47] @ zero_extendqisi2 1675 0124 7B7D ldrb r3, [r7, #21] @ zero_extendqisi2 1676 0126 9A42 cmp r2, r3 1677 0128 EBD3 bcc .L63 1678 .LBE15: 284:Core/Src/ADBMS_LL_Driver.c **** } 285:Core/Src/ADBMS_LL_Driver.c **** 286:Core/Src/ADBMS_LL_Driver.c **** [[maybe_unused]] uint8 commandCounter = rxbuffer[sizeof(rxbuffer) - 2] & 0xFC; //command counter 1679 .loc 1 286 58 1680 012a 3346 mov r3, r6 1681 .loc 1 286 69 1682 012c 023B subs r3, r3, #2 1683 .loc 1 286 51 1684 012e FA69 ldr r2, [r7, #28] 1685 0130 D35C ldrb r3, [r2, r3] @ zero_extendqisi2 1686 .loc 1 286 26 1687 0132 23F00303 bic r3, r3, #3 1688 0136 BB76 strb r3, [r7, #26] 287:Core/Src/ADBMS_LL_Driver.c **** //TODO: check comm 288:Core/Src/ADBMS_LL_Driver.c **** 289:Core/Src/ADBMS_LL_Driver.c **** return checkDataPEC(&rxbuffer[4], buflen + 2); 1689 .loc 1 289 10 1690 0138 FB69 ldr r3, [r7, #28] 1691 013a 1A1D adds r2, r3, #4 1692 013c 7B7D ldrb r3, [r7, #21] 1693 013e 0233 adds r3, r3, #2 1694 0140 DBB2 uxtb r3, r3 1695 0142 1946 mov r1, r3 1696 0144 1046 mov r0, r2 1697 0146 FFF7FEFF bl checkDataPEC 1698 014a 0346 mov r3, r0 1699 .L61: 1700 014c D7F804D0 ldr sp, [r7, #4] 290:Core/Src/ADBMS_LL_Driver.c **** } 1701 .loc 1 290 1 1702 0150 1846 mov r0, r3 ARM GAS /tmp/cczsHaNw.s page 36 1703 0152 3437 adds r7, r7, #52 1704 .cfi_def_cfa_offset 36 1705 0154 BD46 mov sp, r7 1706 .cfi_def_cfa_register 13 1707 @ sp needed 1708 0156 BDE8F08F pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} 1709 .cfi_endproc 1710 .LFE141: 1712 .section .text.pollCMD,"ax",%progbits 1713 .align 1 1714 .global pollCMD 1715 .syntax unified 1716 .thumb 1717 .thumb_func 1719 pollCMD: 1720 .LFB142: 291:Core/Src/ADBMS_LL_Driver.c **** 292:Core/Src/ADBMS_LL_Driver.c **** //check poll command - no data PEC sent back 293:Core/Src/ADBMS_LL_Driver.c **** uint8 pollCMD(uint16 command) { 1721 .loc 1 293 31 1722 .cfi_startproc 1723 @ args = 0, pretend = 0, frame = 24 1724 @ frame_needed = 1, uses_anonymous_args = 0 1725 0000 80B5 push {r7, lr} 1726 .cfi_def_cfa_offset 8 1727 .cfi_offset 7, -8 1728 .cfi_offset 14, -4 1729 0002 86B0 sub sp, sp, #24 1730 .cfi_def_cfa_offset 32 1731 0004 00AF add r7, sp, #0 1732 .cfi_def_cfa_register 7 1733 0006 0346 mov r3, r0 1734 0008 FB80 strh r3, [r7, #6] @ movhi 294:Core/Src/ADBMS_LL_Driver.c **** uint8 txbuffer[5] = {}; 1735 .loc 1 294 9 1736 000a 07F11003 add r3, r7, #16 1737 000e 0022 movs r2, #0 1738 0010 1A60 str r2, [r3] 1739 0012 1A71 strb r2, [r3, #4] 295:Core/Src/ADBMS_LL_Driver.c **** uint8 rxbuffer[5] = {}; 1740 .loc 1 295 9 1741 0014 07F10803 add r3, r7, #8 1742 0018 0022 movs r2, #0 1743 001a 1A60 str r2, [r3] 1744 001c 1A71 strb r2, [r3, #4] 296:Core/Src/ADBMS_LL_Driver.c **** 297:Core/Src/ADBMS_LL_Driver.c **** txbuffer[0] = (command >> 8) & 0xFF; 1745 .loc 1 297 15 1746 001e FB88 ldrh r3, [r7, #6] 1747 0020 1B0A lsrs r3, r3, #8 1748 0022 9BB2 uxth r3, r3 1749 0024 DBB2 uxtb r3, r3 1750 0026 3B74 strb r3, [r7, #16] 298:Core/Src/ADBMS_LL_Driver.c **** txbuffer[1] = (command)&0xFF; 1751 .loc 1 298 15 1752 0028 FB88 ldrh r3, [r7, #6] @ movhi 1753 002a DBB2 uxtb r3, r3 ARM GAS /tmp/cczsHaNw.s page 37 1754 002c 7B74 strb r3, [r7, #17] 299:Core/Src/ADBMS_LL_Driver.c **** calculateCommandPEC(txbuffer, 4); 1755 .loc 1 299 3 1756 002e 07F11003 add r3, r7, #16 1757 0032 0421 movs r1, #4 1758 0034 1846 mov r0, r3 1759 0036 FFF7FEFF bl calculateCommandPEC 300:Core/Src/ADBMS_LL_Driver.c **** 301:Core/Src/ADBMS_LL_Driver.c **** mcuAdbmsCSLow(); 1760 .loc 1 301 3 1761 003a FFF7FEFF bl mcuAdbmsCSLow 302:Core/Src/ADBMS_LL_Driver.c **** uint8 status = mcuSPITransmitReceive(rxbuffer, txbuffer, 5); 1762 .loc 1 302 18 1763 003e 07F11001 add r1, r7, #16 1764 0042 07F10803 add r3, r7, #8 1765 0046 0522 movs r2, #5 1766 0048 1846 mov r0, r3 1767 004a FFF7FEFF bl mcuSPITransmitReceive 1768 004e 0346 mov r3, r0 1769 0050 FB75 strb r3, [r7, #23] 303:Core/Src/ADBMS_LL_Driver.c **** mcuAdbmsCSHigh(); 1770 .loc 1 303 3 1771 0052 FFF7FEFF bl mcuAdbmsCSHigh 304:Core/Src/ADBMS_LL_Driver.c **** 305:Core/Src/ADBMS_LL_Driver.c **** if (status != 0) { 1772 .loc 1 305 6 1773 0056 FB7D ldrb r3, [r7, #23] @ zero_extendqisi2 1774 0058 002B cmp r3, #0 1775 005a 01D0 beq .L66 306:Core/Src/ADBMS_LL_Driver.c **** return status; 1776 .loc 1 306 12 1777 005c FB7D ldrb r3, [r7, #23] @ zero_extendqisi2 1778 005e 00E0 b .L68 1779 .L66: 307:Core/Src/ADBMS_LL_Driver.c **** } 308:Core/Src/ADBMS_LL_Driver.c **** 309:Core/Src/ADBMS_LL_Driver.c **** return rxbuffer[4]; //last byte will be poll response 1780 .loc 1 309 18 1781 0060 3B7B ldrb r3, [r7, #12] @ zero_extendqisi2 1782 .L68: 310:Core/Src/ADBMS_LL_Driver.c **** } 1783 .loc 1 310 1 1784 0062 1846 mov r0, r3 1785 0064 1837 adds r7, r7, #24 1786 .cfi_def_cfa_offset 8 1787 0066 BD46 mov sp, r7 1788 .cfi_def_cfa_register 13 1789 @ sp needed 1790 0068 80BD pop {r7, pc} 1791 .cfi_endproc 1792 .LFE142: 1794 .section .text.mcuAdbmsCSLow,"ax",%progbits 1795 .align 1 1796 .global mcuAdbmsCSLow 1797 .syntax unified 1798 .thumb 1799 .thumb_func ARM GAS /tmp/cczsHaNw.s page 38 1801 mcuAdbmsCSLow: 1802 .LFB143: 311:Core/Src/ADBMS_LL_Driver.c **** 312:Core/Src/ADBMS_LL_Driver.c **** void mcuAdbmsCSLow() { 1803 .loc 1 312 22 1804 .cfi_startproc 1805 @ args = 0, pretend = 0, frame = 0 1806 @ frame_needed = 1, uses_anonymous_args = 0 1807 0000 80B5 push {r7, lr} 1808 .cfi_def_cfa_offset 8 1809 .cfi_offset 7, -8 1810 .cfi_offset 14, -4 1811 0002 00AF add r7, sp, #0 1812 .cfi_def_cfa_register 7 313:Core/Src/ADBMS_LL_Driver.c **** HAL_GPIO_WritePin(CSB_GPIO_Port, CSB_Pin, GPIO_PIN_RESET); 1813 .loc 1 313 3 1814 0004 0022 movs r2, #0 1815 0006 1021 movs r1, #16 1816 0008 4FF09040 mov r0, #1207959552 1817 000c FFF7FEFF bl HAL_GPIO_WritePin 314:Core/Src/ADBMS_LL_Driver.c **** } 1818 .loc 1 314 1 1819 0010 00BF nop 1820 0012 80BD pop {r7, pc} 1821 .cfi_endproc 1822 .LFE143: 1824 .section .text.mcuAdbmsCSHigh,"ax",%progbits 1825 .align 1 1826 .global mcuAdbmsCSHigh 1827 .syntax unified 1828 .thumb 1829 .thumb_func 1831 mcuAdbmsCSHigh: 1832 .LFB144: 315:Core/Src/ADBMS_LL_Driver.c **** 316:Core/Src/ADBMS_LL_Driver.c **** void mcuAdbmsCSHigh() { 1833 .loc 1 316 23 1834 .cfi_startproc 1835 @ args = 0, pretend = 0, frame = 0 1836 @ frame_needed = 1, uses_anonymous_args = 0 1837 0000 80B5 push {r7, lr} 1838 .cfi_def_cfa_offset 8 1839 .cfi_offset 7, -8 1840 .cfi_offset 14, -4 1841 0002 00AF add r7, sp, #0 1842 .cfi_def_cfa_register 7 317:Core/Src/ADBMS_LL_Driver.c **** HAL_GPIO_WritePin(CSB_GPIO_Port, CSB_Pin, GPIO_PIN_SET); 1843 .loc 1 317 3 1844 0004 0122 movs r2, #1 1845 0006 1021 movs r1, #16 1846 0008 4FF09040 mov r0, #1207959552 1847 000c FFF7FEFF bl HAL_GPIO_WritePin 318:Core/Src/ADBMS_LL_Driver.c **** } 1848 .loc 1 318 1 1849 0010 00BF nop 1850 0012 80BD pop {r7, pc} 1851 .cfi_endproc ARM GAS /tmp/cczsHaNw.s page 39 1852 .LFE144: 1854 .section .text.mcuSPITransmit,"ax",%progbits 1855 .align 1 1856 .global mcuSPITransmit 1857 .syntax unified 1858 .thumb 1859 .thumb_func 1861 mcuSPITransmit: 1862 .LFB145: 319:Core/Src/ADBMS_LL_Driver.c **** 320:Core/Src/ADBMS_LL_Driver.c **** uint8 mcuSPITransmit(uint8* buffer, uint8 buffersize) { 1863 .loc 1 320 55 1864 .cfi_startproc 1865 @ args = 0, pretend = 0, frame = 24 1866 @ frame_needed = 1, uses_anonymous_args = 0 1867 0000 2DE9F043 push {r4, r5, r6, r7, r8, r9, lr} 1868 .cfi_def_cfa_offset 28 1869 .cfi_offset 4, -28 1870 .cfi_offset 5, -24 1871 .cfi_offset 6, -20 1872 .cfi_offset 7, -16 1873 .cfi_offset 8, -12 1874 .cfi_offset 9, -8 1875 .cfi_offset 14, -4 1876 0004 89B0 sub sp, sp, #36 1877 .cfi_def_cfa_offset 64 1878 0006 02AF add r7, sp, #8 1879 .cfi_def_cfa 7, 56 1880 0008 7860 str r0, [r7, #4] 1881 000a 0B46 mov r3, r1 1882 000c FB70 strb r3, [r7, #3] 1883 .loc 1 320 55 1884 000e 6B46 mov r3, sp 1885 0010 1E46 mov r6, r3 321:Core/Src/ADBMS_LL_Driver.c **** uint8 rxbuf[buffersize]; 1886 .loc 1 321 5 1887 0012 F978 ldrb r1, [r7, #3] @ zero_extendqisi2 1888 .loc 1 321 11 1889 0014 0B46 mov r3, r1 1890 0016 013B subs r3, r3, #1 1891 0018 7B61 str r3, [r7, #20] 1892 001a CBB2 uxtb r3, r1 1893 001c 0022 movs r2, #0 1894 001e 9846 mov r8, r3 1895 0020 9146 mov r9, r2 1896 0022 4FF00002 mov r2, #0 1897 0026 4FF00003 mov r3, #0 1898 002a 4FEAC903 lsl r3, r9, #3 1899 002e 43EA5873 orr r3, r3, r8, lsr #29 1900 0032 4FEAC802 lsl r2, r8, #3 1901 0036 CBB2 uxtb r3, r1 1902 0038 0022 movs r2, #0 1903 003a 1C46 mov r4, r3 1904 003c 1546 mov r5, r2 1905 003e 4FF00002 mov r2, #0 1906 0042 4FF00003 mov r3, #0 1907 0046 EB00 lsls r3, r5, #3 ARM GAS /tmp/cczsHaNw.s page 40 1908 0048 43EA5473 orr r3, r3, r4, lsr #29 1909 004c E200 lsls r2, r4, #3 1910 004e 0B46 mov r3, r1 1911 0050 0733 adds r3, r3, #7 1912 0052 DB08 lsrs r3, r3, #3 1913 0054 DB00 lsls r3, r3, #3 1914 0056 ADEB030D sub sp, sp, r3 1915 005a 02AB add r3, sp, #8 1916 005c 0033 adds r3, r3, #0 1917 005e 3B61 str r3, [r7, #16] 322:Core/Src/ADBMS_LL_Driver.c **** const HAL_StatusTypeDef status = HAL_SPI_TransmitReceive(adbmsspi, buffer, rxbuf, buffersize, 1918 .loc 1 322 38 1919 0060 0F4B ldr r3, .L73 1920 0062 1868 ldr r0, [r3] 1921 0064 FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 1922 0066 9BB2 uxth r3, r3 1923 0068 6422 movs r2, #100 1924 006a 0092 str r2, [sp] 1925 006c 3A69 ldr r2, [r7, #16] 1926 006e 7968 ldr r1, [r7, #4] 1927 0070 FFF7FEFF bl HAL_SPI_TransmitReceive 1928 0074 0346 mov r3, r0 1929 0076 FB73 strb r3, [r7, #15] 1930 .LBB16: 323:Core/Src/ADBMS_LL_Driver.c **** ADBMS_SPI_TIMEOUT); 324:Core/Src/ADBMS_LL_Driver.c **** __HAL_SPI_CLEAR_OVRFLAG(adbmsspi); 1931 .loc 1 324 3 1932 0078 0023 movs r3, #0 1933 007a BB60 str r3, [r7, #8] 1934 007c 084B ldr r3, .L73 1935 007e 1B68 ldr r3, [r3] 1936 0080 1B68 ldr r3, [r3] 1937 0082 DB68 ldr r3, [r3, #12] 1938 0084 BB60 str r3, [r7, #8] 1939 0086 064B ldr r3, .L73 1940 0088 1B68 ldr r3, [r3] 1941 008a 1B68 ldr r3, [r3] 1942 008c 9B68 ldr r3, [r3, #8] 1943 008e BB60 str r3, [r7, #8] 1944 0090 BB68 ldr r3, [r7, #8] 1945 .LBE16: 325:Core/Src/ADBMS_LL_Driver.c **** return status; 1946 .loc 1 325 10 1947 0092 FB7B ldrb r3, [r7, #15] @ zero_extendqisi2 1948 0094 B546 mov sp, r6 326:Core/Src/ADBMS_LL_Driver.c **** } 1949 .loc 1 326 1 1950 0096 1846 mov r0, r3 1951 0098 1C37 adds r7, r7, #28 1952 .cfi_def_cfa_offset 28 1953 009a BD46 mov sp, r7 1954 .cfi_def_cfa_register 13 1955 @ sp needed 1956 009c BDE8F083 pop {r4, r5, r6, r7, r8, r9, pc} 1957 .L74: 1958 .align 2 1959 .L73: ARM GAS /tmp/cczsHaNw.s page 41 1960 00a0 00000000 .word adbmsspi 1961 .cfi_endproc 1962 .LFE145: 1964 .section .text.mcuSPIReceive,"ax",%progbits 1965 .align 1 1966 .global mcuSPIReceive 1967 .syntax unified 1968 .thumb 1969 .thumb_func 1971 mcuSPIReceive: 1972 .LFB146: 327:Core/Src/ADBMS_LL_Driver.c **** 328:Core/Src/ADBMS_LL_Driver.c **** uint8 mcuSPIReceive(uint8* buffer, uint8 buffersize) { 1973 .loc 1 328 54 1974 .cfi_startproc 1975 @ args = 0, pretend = 0, frame = 16 1976 @ frame_needed = 1, uses_anonymous_args = 0 1977 0000 80B5 push {r7, lr} 1978 .cfi_def_cfa_offset 8 1979 .cfi_offset 7, -8 1980 .cfi_offset 14, -4 1981 0002 84B0 sub sp, sp, #16 1982 .cfi_def_cfa_offset 24 1983 0004 00AF add r7, sp, #0 1984 .cfi_def_cfa_register 7 1985 0006 7860 str r0, [r7, #4] 1986 0008 0B46 mov r3, r1 1987 000a FB70 strb r3, [r7, #3] 329:Core/Src/ADBMS_LL_Driver.c **** const HAL_StatusTypeDef status = HAL_SPI_Receive(adbmsspi, buffer, buffersize, ADBMS_SPI_TIMEOU 1988 .loc 1 329 38 1989 000c 074B ldr r3, .L77 1990 000e 1868 ldr r0, [r3] 1991 0010 FB78 ldrb r3, [r7, #3] @ zero_extendqisi2 1992 0012 9AB2 uxth r2, r3 1993 0014 6423 movs r3, #100 1994 0016 7968 ldr r1, [r7, #4] 1995 0018 FFF7FEFF bl HAL_SPI_Receive 1996 001c 0346 mov r3, r0 1997 001e FB73 strb r3, [r7, #15] 330:Core/Src/ADBMS_LL_Driver.c **** return status; 1998 .loc 1 330 10 1999 0020 FB7B ldrb r3, [r7, #15] @ zero_extendqisi2 331:Core/Src/ADBMS_LL_Driver.c **** } 2000 .loc 1 331 1 2001 0022 1846 mov r0, r3 2002 0024 1037 adds r7, r7, #16 2003 .cfi_def_cfa_offset 8 2004 0026 BD46 mov sp, r7 2005 .cfi_def_cfa_register 13 2006 @ sp needed 2007 0028 80BD pop {r7, pc} 2008 .L78: 2009 002a 00BF .align 2 2010 .L77: 2011 002c 00000000 .word adbmsspi 2012 .cfi_endproc 2013 .LFE146: ARM GAS /tmp/cczsHaNw.s page 42 2015 .section .text.mcuSPITransmitReceive,"ax",%progbits 2016 .align 1 2017 .global mcuSPITransmitReceive 2018 .syntax unified 2019 .thumb 2020 .thumb_func 2022 mcuSPITransmitReceive: 2023 .LFB147: 332:Core/Src/ADBMS_LL_Driver.c **** 333:Core/Src/ADBMS_LL_Driver.c **** uint8 mcuSPITransmitReceive(uint8* rxbuffer, uint8* txbuffer, 334:Core/Src/ADBMS_LL_Driver.c **** uint8 buffersize) { 2024 .loc 1 334 47 2025 .cfi_startproc 2026 @ args = 0, pretend = 0, frame = 24 2027 @ frame_needed = 1, uses_anonymous_args = 0 2028 0000 80B5 push {r7, lr} 2029 .cfi_def_cfa_offset 8 2030 .cfi_offset 7, -8 2031 .cfi_offset 14, -4 2032 0002 88B0 sub sp, sp, #32 2033 .cfi_def_cfa_offset 40 2034 0004 02AF add r7, sp, #8 2035 .cfi_def_cfa 7, 32 2036 0006 F860 str r0, [r7, #12] 2037 0008 B960 str r1, [r7, #8] 2038 000a 1346 mov r3, r2 2039 000c FB71 strb r3, [r7, #7] 335:Core/Src/ADBMS_LL_Driver.c **** const HAL_StatusTypeDef status = HAL_SPI_TransmitReceive(adbmsspi, txbuffer, rxbuffer, buffersi 2040 .loc 1 335 38 2041 000e 084B ldr r3, .L81 2042 0010 1868 ldr r0, [r3] 2043 0012 FB79 ldrb r3, [r7, #7] @ zero_extendqisi2 2044 0014 9BB2 uxth r3, r3 2045 0016 6422 movs r2, #100 2046 0018 0092 str r2, [sp] 2047 001a FA68 ldr r2, [r7, #12] 2048 001c B968 ldr r1, [r7, #8] 2049 001e FFF7FEFF bl HAL_SPI_TransmitReceive 2050 0022 0346 mov r3, r0 2051 0024 FB75 strb r3, [r7, #23] 336:Core/Src/ADBMS_LL_Driver.c **** ADBMS_SPI_TIMEOUT); 337:Core/Src/ADBMS_LL_Driver.c **** return status; 2052 .loc 1 337 10 2053 0026 FB7D ldrb r3, [r7, #23] @ zero_extendqisi2 338:Core/Src/ADBMS_LL_Driver.c **** } 2054 .loc 1 338 1 2055 0028 1846 mov r0, r3 2056 002a 1837 adds r7, r7, #24 2057 .cfi_def_cfa_offset 8 2058 002c BD46 mov sp, r7 2059 .cfi_def_cfa_register 13 2060 @ sp needed 2061 002e 80BD pop {r7, pc} 2062 .L82: 2063 .align 2 2064 .L81: 2065 0030 00000000 .word adbmsspi ARM GAS /tmp/cczsHaNw.s page 43 2066 .cfi_endproc 2067 .LFE147: 2069 .section .text.mcuDelay,"ax",%progbits 2070 .align 1 2071 .global mcuDelay 2072 .syntax unified 2073 .thumb 2074 .thumb_func 2076 mcuDelay: 2077 .LFB148: 339:Core/Src/ADBMS_LL_Driver.c **** 340:Core/Src/ADBMS_LL_Driver.c **** inline void mcuDelay(uint16 delay) { HAL_Delay(delay); } 2078 .loc 1 340 36 2079 .cfi_startproc 2080 @ args = 0, pretend = 0, frame = 8 2081 @ frame_needed = 1, uses_anonymous_args = 0 2082 0000 80B5 push {r7, lr} 2083 .cfi_def_cfa_offset 8 2084 .cfi_offset 7, -8 2085 .cfi_offset 14, -4 2086 0002 82B0 sub sp, sp, #8 2087 .cfi_def_cfa_offset 16 2088 0004 00AF add r7, sp, #0 2089 .cfi_def_cfa_register 7 2090 0006 0346 mov r3, r0 2091 0008 FB80 strh r3, [r7, #6] @ movhi 2092 .loc 1 340 38 2093 000a FB88 ldrh r3, [r7, #6] 2094 000c 1846 mov r0, r3 2095 000e FFF7FEFF bl HAL_Delay 2096 .loc 1 340 56 2097 0012 00BF nop 2098 0014 0837 adds r7, r7, #8 2099 .cfi_def_cfa_offset 8 2100 0016 BD46 mov sp, r7 2101 .cfi_def_cfa_register 13 2102 @ sp needed 2103 0018 80BD pop {r7, pc} 2104 .cfi_endproc 2105 .LFE148: 2107 .text 2108 .Letext0: 2109 .file 2 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/arm-none-eabi/incl 2110 .file 3 "/nix/store/p8vkamc9b2vlibs9aw76vnasdbifhcbm-gcc-arm-embedded-13.2.rel1/arm-none-eabi/incl 2111 .file 4 "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f302xc.h" 2112 .file 5 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_def.h" 2113 .file 6 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_gpio.h" 2114 .file 7 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_dma.h" 2115 .file 8 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_spi.h" 2116 .file 9 "Core/Inc/ADBMS_LL_Driver.h" 2117 .file 10 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal.h" ARM GAS /tmp/cczsHaNw.s page 44 DEFINED SYMBOLS *ABS*:00000000 ADBMS_LL_Driver.c /tmp/cczsHaNw.s:25 .bss.adbmsspi:00000000 adbmsspi /tmp/cczsHaNw.s:22 .bss.adbmsspi:00000000 $d /tmp/cczsHaNw.s:28 .text.adbmsDriverInit:00000000 $t /tmp/cczsHaNw.s:34 .text.adbmsDriverInit:00000000 adbmsDriverInit /tmp/cczsHaNw.s:1801 .text.mcuAdbmsCSLow:00000000 mcuAdbmsCSLow /tmp/cczsHaNw.s:1831 .text.mcuAdbmsCSHigh:00000000 mcuAdbmsCSHigh /tmp/cczsHaNw.s:73 .text.adbmsDriverInit:00000028 $d /tmp/cczsHaNw.s:78 .text.calculateCommandPEC:00000000 $t /tmp/cczsHaNw.s:84 .text.calculateCommandPEC:00000000 calculateCommandPEC /tmp/cczsHaNw.s:356 .text.updateCommandPEC:00000000 updateCommandPEC /tmp/cczsHaNw.s:209 .text.checkCommandPEC:00000000 $t /tmp/cczsHaNw.s:215 .text.checkCommandPEC:00000000 checkCommandPEC /tmp/cczsHaNw.s:350 .text.updateCommandPEC:00000000 $t /tmp/cczsHaNw.s:638 .text.pec10_calc:00000000 $t /tmp/cczsHaNw.s:644 .text.pec10_calc:00000000 pec10_calc /tmp/cczsHaNw.s:817 .text.calculateDataPEC:00000000 $t /tmp/cczsHaNw.s:823 .text.calculateDataPEC:00000000 calculateDataPEC /tmp/cczsHaNw.s:897 .text.checkDataPEC:00000000 $t /tmp/cczsHaNw.s:903 .text.checkDataPEC:00000000 checkDataPEC /tmp/cczsHaNw.s:1048 .text.F_CRC_CalculaCheckSum:00000000 F_CRC_CalculaCheckSum /tmp/cczsHaNw.s:956 .text.F_CRC_ObtenValorDeTabla:00000000 $t /tmp/cczsHaNw.s:961 .text.F_CRC_ObtenValorDeTabla:00000000 F_CRC_ObtenValorDeTabla /tmp/cczsHaNw.s:1042 .text.F_CRC_CalculaCheckSum:00000000 $t /tmp/cczsHaNw.s:1135 .text.updateDataPEC:00000000 $t /tmp/cczsHaNw.s:1141 .text.updateDataPEC:00000000 updateDataPEC /tmp/cczsHaNw.s:1324 .text.writeCMD:00000000 $t /tmp/cczsHaNw.s:1330 .text.writeCMD:00000000 writeCMD /tmp/cczsHaNw.s:1861 .text.mcuSPITransmit:00000000 mcuSPITransmit /tmp/cczsHaNw.s:1509 .text.readCMD:00000000 $t /tmp/cczsHaNw.s:1515 .text.readCMD:00000000 readCMD /tmp/cczsHaNw.s:2022 .text.mcuSPITransmitReceive:00000000 mcuSPITransmitReceive /tmp/cczsHaNw.s:1713 .text.pollCMD:00000000 $t /tmp/cczsHaNw.s:1719 .text.pollCMD:00000000 pollCMD /tmp/cczsHaNw.s:1795 .text.mcuAdbmsCSLow:00000000 $t /tmp/cczsHaNw.s:1825 .text.mcuAdbmsCSHigh:00000000 $t /tmp/cczsHaNw.s:1855 .text.mcuSPITransmit:00000000 $t /tmp/cczsHaNw.s:1960 .text.mcuSPITransmit:000000a0 $d /tmp/cczsHaNw.s:1965 .text.mcuSPIReceive:00000000 $t /tmp/cczsHaNw.s:1971 .text.mcuSPIReceive:00000000 mcuSPIReceive /tmp/cczsHaNw.s:2011 .text.mcuSPIReceive:0000002c $d /tmp/cczsHaNw.s:2016 .text.mcuSPITransmitReceive:00000000 $t /tmp/cczsHaNw.s:2065 .text.mcuSPITransmitReceive:00000030 $d /tmp/cczsHaNw.s:2070 .text.mcuDelay:00000000 $t /tmp/cczsHaNw.s:2076 .text.mcuDelay:00000000 mcuDelay UNDEFINED SYMBOLS HAL_Delay HAL_GPIO_WritePin HAL_SPI_TransmitReceive HAL_SPI_Receive