ARM GAS /tmp/cck6myrA.s page 1 1 .cpu cortex-m0 2 .eabi_attribute 20, 1 3 .eabi_attribute 21, 1 4 .eabi_attribute 23, 3 5 .eabi_attribute 24, 1 6 .eabi_attribute 25, 1 7 .eabi_attribute 26, 1 8 .eabi_attribute 30, 1 9 .eabi_attribute 34, 0 10 .eabi_attribute 18, 4 11 .file "usbd_desc.c" 12 .text 13 .Ltext0: 14 .cfi_sections .debug_frame 15 .section .text.USBD_VCP_DeviceDescriptor,"ax",%progbits 16 .align 1 17 .global USBD_VCP_DeviceDescriptor 18 .syntax unified 19 .code 16 20 .thumb_func 21 .fpu softvfp 23 USBD_VCP_DeviceDescriptor: 24 .LFB43: 25 .file 1 "Src/usbd_desc.c" 1:Src/usbd_desc.c **** /** 2:Src/usbd_desc.c **** ****************************************************************************** 3:Src/usbd_desc.c **** * @file USB_Device/CDC_Standalone/Src/usbd_desc.c 4:Src/usbd_desc.c **** * @author MCD Application Team 5:Src/usbd_desc.c **** * @brief This file provides the USBD descriptors and string formating method. 6:Src/usbd_desc.c **** ****************************************************************************** 7:Src/usbd_desc.c **** * @attention 8:Src/usbd_desc.c **** * 9:Src/usbd_desc.c **** *

© Copyright (c) 2016 STMicroelectronics International N.V. 10:Src/usbd_desc.c **** * All rights reserved.

11:Src/usbd_desc.c **** * 12:Src/usbd_desc.c **** * Redistribution and use in source and binary forms, with or without 13:Src/usbd_desc.c **** * modification, are permitted, provided that the following conditions are met: 14:Src/usbd_desc.c **** * 15:Src/usbd_desc.c **** * 1. Redistribution of source code must retain the above copyright notice, 16:Src/usbd_desc.c **** * this list of conditions and the following disclaimer. 17:Src/usbd_desc.c **** * 2. Redistributions in binary form must reproduce the above copyright notice, 18:Src/usbd_desc.c **** * this list of conditions and the following disclaimer in the documentation 19:Src/usbd_desc.c **** * and/or other materials provided with the distribution. 20:Src/usbd_desc.c **** * 3. Neither the name of STMicroelectronics nor the names of other 21:Src/usbd_desc.c **** * contributors to this software may be used to endorse or promote products 22:Src/usbd_desc.c **** * derived from this software without specific written permission. 23:Src/usbd_desc.c **** * 4. This software, including modifications and/or derivative works of this 24:Src/usbd_desc.c **** * software, must execute solely and exclusively on microcontroller or 25:Src/usbd_desc.c **** * microprocessor devices manufactured by or for STMicroelectronics. 26:Src/usbd_desc.c **** * 5. Redistribution and use of this software other than as permitted under 27:Src/usbd_desc.c **** * this license is void and will automatically terminate your rights under 28:Src/usbd_desc.c **** * this license. 29:Src/usbd_desc.c **** * 30:Src/usbd_desc.c **** * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS" 31:Src/usbd_desc.c **** * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT 32:Src/usbd_desc.c **** * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 33:Src/usbd_desc.c **** * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY ARM GAS /tmp/cck6myrA.s page 2 34:Src/usbd_desc.c **** * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT 35:Src/usbd_desc.c **** * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 36:Src/usbd_desc.c **** * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 37:Src/usbd_desc.c **** * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 38:Src/usbd_desc.c **** * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 39:Src/usbd_desc.c **** * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 40:Src/usbd_desc.c **** * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 41:Src/usbd_desc.c **** * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 42:Src/usbd_desc.c **** * 43:Src/usbd_desc.c **** ****************************************************************************** 44:Src/usbd_desc.c **** */ 45:Src/usbd_desc.c **** 46:Src/usbd_desc.c **** /* Includes ------------------------------------------------------------------*/ 47:Src/usbd_desc.c **** #include "usbd_core.h" 48:Src/usbd_desc.c **** #include "usbd_desc.h" 49:Src/usbd_desc.c **** #include "usbd_conf.h" 50:Src/usbd_desc.c **** 51:Src/usbd_desc.c **** /* Private typedef -----------------------------------------------------------*/ 52:Src/usbd_desc.c **** /* Private define ------------------------------------------------------------*/ 53:Src/usbd_desc.c **** #define USBD_VID 0x0483 54:Src/usbd_desc.c **** #define USBD_PID 0x5740 55:Src/usbd_desc.c **** #define USBD_LANGID_STRING 0x409 56:Src/usbd_desc.c **** #define USBD_MANUFACTURER_STRING "Otter-Iron" 57:Src/usbd_desc.c **** #define USBD_PRODUCT_FS_STRING "chirp :3" 58:Src/usbd_desc.c **** #define USBD_CONFIGURATION_FS_STRING "mau" 59:Src/usbd_desc.c **** #define USBD_INTERFACE_FS_STRING ":o" 60:Src/usbd_desc.c **** 61:Src/usbd_desc.c **** /* Private macro -------------------------------------------------------------*/ 62:Src/usbd_desc.c **** /* Private function prototypes -----------------------------------------------*/ 63:Src/usbd_desc.c **** uint8_t *USBD_VCP_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); 64:Src/usbd_desc.c **** uint8_t *USBD_VCP_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); 65:Src/usbd_desc.c **** uint8_t *USBD_VCP_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); 66:Src/usbd_desc.c **** uint8_t *USBD_VCP_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); 67:Src/usbd_desc.c **** uint8_t *USBD_VCP_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); 68:Src/usbd_desc.c **** uint8_t *USBD_VCP_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); 69:Src/usbd_desc.c **** uint8_t *USBD_VCP_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length); 70:Src/usbd_desc.c **** #ifdef USB_SUPPORT_USER_STRING_DESC 71:Src/usbd_desc.c **** uint8_t *USBD_VCP_USRStringDesc (USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length); 72:Src/usbd_desc.c **** #endif /* USB_SUPPORT_USER_STRING_DESC */ 73:Src/usbd_desc.c **** 74:Src/usbd_desc.c **** /* Private variables ---------------------------------------------------------*/ 75:Src/usbd_desc.c **** USBD_DescriptorsTypeDef VCP_Desc = { 76:Src/usbd_desc.c **** USBD_VCP_DeviceDescriptor, 77:Src/usbd_desc.c **** USBD_VCP_LangIDStrDescriptor, 78:Src/usbd_desc.c **** USBD_VCP_ManufacturerStrDescriptor, 79:Src/usbd_desc.c **** USBD_VCP_ProductStrDescriptor, 80:Src/usbd_desc.c **** USBD_VCP_SerialStrDescriptor, 81:Src/usbd_desc.c **** USBD_VCP_ConfigStrDescriptor, 82:Src/usbd_desc.c **** USBD_VCP_InterfaceStrDescriptor, 83:Src/usbd_desc.c **** }; 84:Src/usbd_desc.c **** 85:Src/usbd_desc.c **** /* USB Standard Device Descriptor */ 86:Src/usbd_desc.c **** const uint8_t hUSBDDeviceDesc[USB_LEN_DEV_DESC]= { 87:Src/usbd_desc.c **** 0x12, /* bLength */ 88:Src/usbd_desc.c **** USB_DESC_TYPE_DEVICE, /* bDescriptorType */ 89:Src/usbd_desc.c **** 0x00, /* bcdUSB */ 90:Src/usbd_desc.c **** 0x02, ARM GAS /tmp/cck6myrA.s page 3 91:Src/usbd_desc.c **** 0x00, /* bDeviceClass */ 92:Src/usbd_desc.c **** 0x00, /* bDeviceSubClass */ 93:Src/usbd_desc.c **** 0x00, /* bDeviceProtocol */ 94:Src/usbd_desc.c **** USB_MAX_EP0_SIZE, /* bMaxPacketSize */ 95:Src/usbd_desc.c **** LOBYTE(USBD_VID), /* idVendor */ 96:Src/usbd_desc.c **** HIBYTE(USBD_VID), /* idVendor */ 97:Src/usbd_desc.c **** LOBYTE(USBD_PID), /* idVendor */ 98:Src/usbd_desc.c **** HIBYTE(USBD_PID), /* idVendor */ 99:Src/usbd_desc.c **** 0x00, /* bcdDevice rel. 2.00 */ 100:Src/usbd_desc.c **** 0x02, 101:Src/usbd_desc.c **** USBD_IDX_MFC_STR, /* Index of manufacturer string */ 102:Src/usbd_desc.c **** USBD_IDX_PRODUCT_STR, /* Index of product string */ 103:Src/usbd_desc.c **** USBD_IDX_SERIAL_STR, /* Index of serial number string */ 104:Src/usbd_desc.c **** USBD_MAX_NUM_CONFIGURATION /* bNumConfigurations */ 105:Src/usbd_desc.c **** }; /* USB_DeviceDescriptor */ 106:Src/usbd_desc.c **** 107:Src/usbd_desc.c **** /* USB Standard Device Descriptor */ 108:Src/usbd_desc.c **** const uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC]= 109:Src/usbd_desc.c **** { 110:Src/usbd_desc.c **** USB_LEN_LANGID_STR_DESC, 111:Src/usbd_desc.c **** USB_DESC_TYPE_STRING, 112:Src/usbd_desc.c **** LOBYTE(USBD_LANGID_STRING), 113:Src/usbd_desc.c **** HIBYTE(USBD_LANGID_STRING), 114:Src/usbd_desc.c **** }; 115:Src/usbd_desc.c **** 116:Src/usbd_desc.c **** uint8_t USBD_StringSerial[USB_SIZ_STRING_SERIAL] = 117:Src/usbd_desc.c **** { 118:Src/usbd_desc.c **** USB_SIZ_STRING_SERIAL, 119:Src/usbd_desc.c **** USB_DESC_TYPE_STRING, 120:Src/usbd_desc.c **** }; 121:Src/usbd_desc.c **** 122:Src/usbd_desc.c **** uint8_t USBD_StrDesc[USBD_MAX_STR_DESC_SIZ]; 123:Src/usbd_desc.c **** 124:Src/usbd_desc.c **** /* Private functions ---------------------------------------------------------*/ 125:Src/usbd_desc.c **** static void IntToUnicode (uint32_t value , uint8_t *pbuf , uint8_t len); 126:Src/usbd_desc.c **** static void Get_SerialNum(void); 127:Src/usbd_desc.c **** /** 128:Src/usbd_desc.c **** * @brief Returns the device descriptor. 129:Src/usbd_desc.c **** * @param speed: Current device speed 130:Src/usbd_desc.c **** * @param length: Pointer to data length variable 131:Src/usbd_desc.c **** * @retval Pointer to descriptor buffer 132:Src/usbd_desc.c **** */ 133:Src/usbd_desc.c **** uint8_t *USBD_VCP_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) 134:Src/usbd_desc.c **** { 26 .loc 1 134 0 27 .cfi_startproc 28 @ args = 0, pretend = 0, frame = 0 29 @ frame_needed = 0, uses_anonymous_args = 0 30 @ link register save eliminated. 31 .LVL0: 135:Src/usbd_desc.c **** *length = sizeof(hUSBDDeviceDesc); 32 .loc 1 135 0 33 0000 1223 movs r3, #18 34 0002 0B80 strh r3, [r1] 136:Src/usbd_desc.c **** return (uint8_t*)hUSBDDeviceDesc; 137:Src/usbd_desc.c **** } 35 .loc 1 137 0 ARM GAS /tmp/cck6myrA.s page 4 36 0004 0048 ldr r0, .L2 37 .LVL1: 38 @ sp needed 39 0006 7047 bx lr 40 .L3: 41 .align 2 42 .L2: 43 0008 00000000 .word .LANCHOR0 44 .cfi_endproc 45 .LFE43: 47 .section .text.USBD_VCP_LangIDStrDescriptor,"ax",%progbits 48 .align 1 49 .global USBD_VCP_LangIDStrDescriptor 50 .syntax unified 51 .code 16 52 .thumb_func 53 .fpu softvfp 55 USBD_VCP_LangIDStrDescriptor: 56 .LFB44: 138:Src/usbd_desc.c **** 139:Src/usbd_desc.c **** /** 140:Src/usbd_desc.c **** * @brief Returns the LangID string descriptor. 141:Src/usbd_desc.c **** * @param speed: Current device speed 142:Src/usbd_desc.c **** * @param length: Pointer to data length variable 143:Src/usbd_desc.c **** * @retval Pointer to descriptor buffer 144:Src/usbd_desc.c **** */ 145:Src/usbd_desc.c **** uint8_t *USBD_VCP_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) 146:Src/usbd_desc.c **** { 57 .loc 1 146 0 58 .cfi_startproc 59 @ args = 0, pretend = 0, frame = 0 60 @ frame_needed = 0, uses_anonymous_args = 0 61 @ link register save eliminated. 62 .LVL2: 147:Src/usbd_desc.c **** *length = sizeof(USBD_LangIDDesc); 63 .loc 1 147 0 64 0000 0423 movs r3, #4 65 0002 0B80 strh r3, [r1] 148:Src/usbd_desc.c **** return (uint8_t*)USBD_LangIDDesc; 149:Src/usbd_desc.c **** } 66 .loc 1 149 0 67 0004 0048 ldr r0, .L5 68 .LVL3: 69 @ sp needed 70 0006 7047 bx lr 71 .L6: 72 .align 2 73 .L5: 74 0008 00000000 .word .LANCHOR1 75 .cfi_endproc 76 .LFE44: 78 .section .text.IntToUnicode,"ax",%progbits 79 .align 1 80 .syntax unified 81 .code 16 82 .thumb_func 83 .fpu softvfp ARM GAS /tmp/cck6myrA.s page 5 85 IntToUnicode: 86 .LFB51: 150:Src/usbd_desc.c **** 151:Src/usbd_desc.c **** /** 152:Src/usbd_desc.c **** * @brief Returns the product string descriptor. 153:Src/usbd_desc.c **** * @param speed: Current device speed 154:Src/usbd_desc.c **** * @param length: Pointer to data length variable 155:Src/usbd_desc.c **** * @retval Pointer to descriptor buffer 156:Src/usbd_desc.c **** */ 157:Src/usbd_desc.c **** uint8_t *USBD_VCP_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) 158:Src/usbd_desc.c **** { 159:Src/usbd_desc.c **** USBD_GetString((uint8_t *)USBD_PRODUCT_FS_STRING, USBD_StrDesc, length); 160:Src/usbd_desc.c **** return USBD_StrDesc; 161:Src/usbd_desc.c **** } 162:Src/usbd_desc.c **** 163:Src/usbd_desc.c **** /** 164:Src/usbd_desc.c **** * @brief Returns the manufacturer string descriptor. 165:Src/usbd_desc.c **** * @param speed: Current device speed 166:Src/usbd_desc.c **** * @param length: Pointer to data length variable 167:Src/usbd_desc.c **** * @retval Pointer to descriptor buffer 168:Src/usbd_desc.c **** */ 169:Src/usbd_desc.c **** uint8_t *USBD_VCP_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) 170:Src/usbd_desc.c **** { 171:Src/usbd_desc.c **** USBD_GetString((uint8_t *)USBD_MANUFACTURER_STRING, USBD_StrDesc, length); 172:Src/usbd_desc.c **** return USBD_StrDesc; 173:Src/usbd_desc.c **** } 174:Src/usbd_desc.c **** 175:Src/usbd_desc.c **** /** 176:Src/usbd_desc.c **** * @brief Returns the serial number string descriptor. 177:Src/usbd_desc.c **** * @param speed: Current device speed 178:Src/usbd_desc.c **** * @param length: Pointer to data length variable 179:Src/usbd_desc.c **** * @retval Pointer to descriptor buffer 180:Src/usbd_desc.c **** */ 181:Src/usbd_desc.c **** uint8_t *USBD_VCP_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) 182:Src/usbd_desc.c **** { 183:Src/usbd_desc.c **** *length = USB_SIZ_STRING_SERIAL; 184:Src/usbd_desc.c **** 185:Src/usbd_desc.c **** /* Update the serial number string descriptor with the data from the unique ID*/ 186:Src/usbd_desc.c **** Get_SerialNum(); 187:Src/usbd_desc.c **** 188:Src/usbd_desc.c **** return USBD_StringSerial; 189:Src/usbd_desc.c **** } 190:Src/usbd_desc.c **** 191:Src/usbd_desc.c **** /** 192:Src/usbd_desc.c **** * @brief Returns the configuration string descriptor. 193:Src/usbd_desc.c **** * @param speed: Current device speed 194:Src/usbd_desc.c **** * @param length: Pointer to data length variable 195:Src/usbd_desc.c **** * @retval Pointer to descriptor buffer 196:Src/usbd_desc.c **** */ 197:Src/usbd_desc.c **** uint8_t *USBD_VCP_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) 198:Src/usbd_desc.c **** { 199:Src/usbd_desc.c **** USBD_GetString((uint8_t *)USBD_CONFIGURATION_FS_STRING, USBD_StrDesc, length); 200:Src/usbd_desc.c **** return USBD_StrDesc; 201:Src/usbd_desc.c **** } 202:Src/usbd_desc.c **** 203:Src/usbd_desc.c **** /** 204:Src/usbd_desc.c **** * @brief Returns the interface string descriptor. ARM GAS /tmp/cck6myrA.s page 6 205:Src/usbd_desc.c **** * @param speed: Current device speed 206:Src/usbd_desc.c **** * @param length: Pointer to data length variable 207:Src/usbd_desc.c **** * @retval Pointer to descriptor buffer 208:Src/usbd_desc.c **** */ 209:Src/usbd_desc.c **** uint8_t *USBD_VCP_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) 210:Src/usbd_desc.c **** { 211:Src/usbd_desc.c **** USBD_GetString((uint8_t *)USBD_INTERFACE_FS_STRING, USBD_StrDesc, length); 212:Src/usbd_desc.c **** return USBD_StrDesc; 213:Src/usbd_desc.c **** } 214:Src/usbd_desc.c **** 215:Src/usbd_desc.c **** /** 216:Src/usbd_desc.c **** * @brief Create the serial number string descriptor 217:Src/usbd_desc.c **** * @param None 218:Src/usbd_desc.c **** * @retval None 219:Src/usbd_desc.c **** */ 220:Src/usbd_desc.c **** static void Get_SerialNum(void) 221:Src/usbd_desc.c **** { 222:Src/usbd_desc.c **** uint32_t deviceserial0, deviceserial1, deviceserial2; 223:Src/usbd_desc.c **** 224:Src/usbd_desc.c **** deviceserial0 = *(uint32_t*)DEVICE_ID1; 225:Src/usbd_desc.c **** deviceserial1 = *(uint32_t*)DEVICE_ID2; 226:Src/usbd_desc.c **** deviceserial2 = *(uint32_t*)DEVICE_ID3; 227:Src/usbd_desc.c **** 228:Src/usbd_desc.c **** deviceserial0 += deviceserial2; 229:Src/usbd_desc.c **** 230:Src/usbd_desc.c **** if (deviceserial0 != 0) 231:Src/usbd_desc.c **** { 232:Src/usbd_desc.c **** IntToUnicode (deviceserial0, &USBD_StringSerial[2] ,8); 233:Src/usbd_desc.c **** IntToUnicode (deviceserial1, &USBD_StringSerial[18] ,4); 234:Src/usbd_desc.c **** } 235:Src/usbd_desc.c **** } 236:Src/usbd_desc.c **** 237:Src/usbd_desc.c **** /** 238:Src/usbd_desc.c **** * @brief Convert Hex 32Bits value into char 239:Src/usbd_desc.c **** * @param value: value to convert 240:Src/usbd_desc.c **** * @param pbuf: pointer to the buffer 241:Src/usbd_desc.c **** * @param len: buffer length 242:Src/usbd_desc.c **** * @retval None 243:Src/usbd_desc.c **** */ 244:Src/usbd_desc.c **** static void IntToUnicode (uint32_t value , uint8_t *pbuf , uint8_t len) 245:Src/usbd_desc.c **** { 87 .loc 1 245 0 88 .cfi_startproc 89 @ args = 0, pretend = 0, frame = 0 90 @ frame_needed = 0, uses_anonymous_args = 0 91 .LVL4: 92 0000 30B5 push {r4, r5, lr} 93 .LCFI0: 94 .cfi_def_cfa_offset 12 95 .cfi_offset 4, -12 96 .cfi_offset 5, -8 97 .cfi_offset 14, -4 98 .LVL5: 246:Src/usbd_desc.c **** uint8_t idx = 0; 247:Src/usbd_desc.c **** 248:Src/usbd_desc.c **** for( idx = 0 ; idx < len ; idx ++) 99 .loc 1 248 0 ARM GAS /tmp/cck6myrA.s page 7 100 0002 0023 movs r3, #0 101 0004 0AE0 b .L8 102 .LVL6: 103 .L9: 249:Src/usbd_desc.c **** { 250:Src/usbd_desc.c **** if( ((value >> 28)) < 0xA ) 251:Src/usbd_desc.c **** { 252:Src/usbd_desc.c **** pbuf[ 2* idx] = (value >> 28) + '0'; 253:Src/usbd_desc.c **** } 254:Src/usbd_desc.c **** else 255:Src/usbd_desc.c **** { 256:Src/usbd_desc.c **** pbuf[2* idx] = (value >> 28) + 'A' - 10; 104 .loc 1 256 0 105 0006 5D00 lsls r5, r3, #1 106 0008 3734 adds r4, r4, #55 107 000a 4C55 strb r4, [r1, r5] 108 .L10: 257:Src/usbd_desc.c **** } 258:Src/usbd_desc.c **** 259:Src/usbd_desc.c **** value = value << 4; 109 .loc 1 259 0 discriminator 2 110 000c 0001 lsls r0, r0, #4 111 .LVL7: 260:Src/usbd_desc.c **** 261:Src/usbd_desc.c **** pbuf[ 2* idx + 1] = 0; 112 .loc 1 261 0 discriminator 2 113 000e 5C00 lsls r4, r3, #1 114 0010 0134 adds r4, r4, #1 115 0012 0C19 adds r4, r1, r4 116 0014 0025 movs r5, #0 117 0016 2570 strb r5, [r4] 248:Src/usbd_desc.c **** { 118 .loc 1 248 0 discriminator 2 119 0018 0133 adds r3, r3, #1 120 .LVL8: 121 001a DBB2 uxtb r3, r3 122 .LVL9: 123 .L8: 248:Src/usbd_desc.c **** { 124 .loc 1 248 0 is_stmt 0 discriminator 1 125 001c 9342 cmp r3, r2 126 001e 06D2 bcs .L12 250:Src/usbd_desc.c **** { 127 .loc 1 250 0 is_stmt 1 128 0020 040F lsrs r4, r0, #28 129 0022 092C cmp r4, #9 130 0024 EFD8 bhi .L9 252:Src/usbd_desc.c **** } 131 .loc 1 252 0 132 0026 5D00 lsls r5, r3, #1 133 0028 3034 adds r4, r4, #48 134 002a 4C55 strb r4, [r1, r5] 135 002c EEE7 b .L10 136 .L12: 262:Src/usbd_desc.c **** } 263:Src/usbd_desc.c **** } 137 .loc 1 263 0 ARM GAS /tmp/cck6myrA.s page 8 138 @ sp needed 139 002e 30BD pop {r4, r5, pc} 140 .cfi_endproc 141 .LFE51: 143 .section .text.Get_SerialNum,"ax",%progbits 144 .align 1 145 .syntax unified 146 .code 16 147 .thumb_func 148 .fpu softvfp 150 Get_SerialNum: 151 .LFB50: 221:Src/usbd_desc.c **** uint32_t deviceserial0, deviceserial1, deviceserial2; 152 .loc 1 221 0 153 .cfi_startproc 154 @ args = 0, pretend = 0, frame = 0 155 @ frame_needed = 0, uses_anonymous_args = 0 156 0000 70B5 push {r4, r5, r6, lr} 157 .LCFI1: 158 .cfi_def_cfa_offset 16 159 .cfi_offset 4, -16 160 .cfi_offset 5, -12 161 .cfi_offset 6, -8 162 .cfi_offset 14, -4 224:Src/usbd_desc.c **** deviceserial1 = *(uint32_t*)DEVICE_ID2; 163 .loc 1 224 0 164 0002 0B4B ldr r3, .L16 165 0004 1868 ldr r0, [r3] 166 .LVL10: 225:Src/usbd_desc.c **** deviceserial2 = *(uint32_t*)DEVICE_ID3; 167 .loc 1 225 0 168 0006 0B4B ldr r3, .L16+4 169 0008 1D68 ldr r5, [r3] 170 .LVL11: 226:Src/usbd_desc.c **** 171 .loc 1 226 0 172 000a 0B4B ldr r3, .L16+8 173 000c 1B68 ldr r3, [r3] 174 .LVL12: 228:Src/usbd_desc.c **** 175 .loc 1 228 0 176 000e C018 adds r0, r0, r3 177 .LVL13: 230:Src/usbd_desc.c **** { 178 .loc 1 230 0 179 0010 0028 cmp r0, #0 180 0012 00D1 bne .L15 181 .LVL14: 182 .L13: 235:Src/usbd_desc.c **** 183 .loc 1 235 0 184 @ sp needed 185 .LVL15: 186 0014 70BD pop {r4, r5, r6, pc} 187 .LVL16: 188 .L15: 232:Src/usbd_desc.c **** IntToUnicode (deviceserial1, &USBD_StringSerial[18] ,4); ARM GAS /tmp/cck6myrA.s page 9 189 .loc 1 232 0 190 0016 094C ldr r4, .L16+12 191 0018 A11C adds r1, r4, #2 192 001a 0822 movs r2, #8 193 001c FFF7FEFF bl IntToUnicode 194 .LVL17: 233:Src/usbd_desc.c **** } 195 .loc 1 233 0 196 0020 2100 movs r1, r4 197 0022 1231 adds r1, r1, #18 198 0024 0422 movs r2, #4 199 0026 2800 movs r0, r5 200 0028 FFF7FEFF bl IntToUnicode 201 .LVL18: 235:Src/usbd_desc.c **** 202 .loc 1 235 0 203 002c F2E7 b .L13 204 .L17: 205 002e C046 .align 2 206 .L16: 207 0030 ACF7FF1F .word 536868780 208 0034 B0F7FF1F .word 536868784 209 0038 B4F7FF1F .word 536868788 210 003c 00000000 .word .LANCHOR2 211 .cfi_endproc 212 .LFE50: 214 .section .text.USBD_VCP_SerialStrDescriptor,"ax",%progbits 215 .align 1 216 .global USBD_VCP_SerialStrDescriptor 217 .syntax unified 218 .code 16 219 .thumb_func 220 .fpu softvfp 222 USBD_VCP_SerialStrDescriptor: 223 .LFB47: 182:Src/usbd_desc.c **** *length = USB_SIZ_STRING_SERIAL; 224 .loc 1 182 0 225 .cfi_startproc 226 @ args = 0, pretend = 0, frame = 0 227 @ frame_needed = 0, uses_anonymous_args = 0 228 .LVL19: 229 0000 10B5 push {r4, lr} 230 .LCFI2: 231 .cfi_def_cfa_offset 8 232 .cfi_offset 4, -8 233 .cfi_offset 14, -4 183:Src/usbd_desc.c **** 234 .loc 1 183 0 235 0002 1A23 movs r3, #26 236 0004 0B80 strh r3, [r1] 186:Src/usbd_desc.c **** 237 .loc 1 186 0 238 0006 FFF7FEFF bl Get_SerialNum 239 .LVL20: 189:Src/usbd_desc.c **** 240 .loc 1 189 0 241 000a 0148 ldr r0, .L19 ARM GAS /tmp/cck6myrA.s page 10 242 @ sp needed 243 000c 10BD pop {r4, pc} 244 .L20: 245 000e C046 .align 2 246 .L19: 247 0010 00000000 .word .LANCHOR2 248 .cfi_endproc 249 .LFE47: 251 .section .text.USBD_VCP_ProductStrDescriptor,"ax",%progbits 252 .align 1 253 .global USBD_VCP_ProductStrDescriptor 254 .syntax unified 255 .code 16 256 .thumb_func 257 .fpu softvfp 259 USBD_VCP_ProductStrDescriptor: 260 .LFB45: 158:Src/usbd_desc.c **** USBD_GetString((uint8_t *)USBD_PRODUCT_FS_STRING, USBD_StrDesc, length); 261 .loc 1 158 0 262 .cfi_startproc 263 @ args = 0, pretend = 0, frame = 0 264 @ frame_needed = 0, uses_anonymous_args = 0 265 .LVL21: 266 0000 10B5 push {r4, lr} 267 .LCFI3: 268 .cfi_def_cfa_offset 8 269 .cfi_offset 4, -8 270 .cfi_offset 14, -4 271 0002 0A00 movs r2, r1 159:Src/usbd_desc.c **** return USBD_StrDesc; 272 .loc 1 159 0 273 0004 034C ldr r4, .L22 274 0006 2100 movs r1, r4 275 .LVL22: 276 0008 0348 ldr r0, .L22+4 277 .LVL23: 278 000a FFF7FEFF bl USBD_GetString 279 .LVL24: 161:Src/usbd_desc.c **** 280 .loc 1 161 0 281 000e 2000 movs r0, r4 282 @ sp needed 283 0010 10BD pop {r4, pc} 284 .L23: 285 0012 C046 .align 2 286 .L22: 287 0014 00000000 .word USBD_StrDesc 288 0018 00000000 .word .LC7 289 .cfi_endproc 290 .LFE45: 292 .section .text.USBD_VCP_ManufacturerStrDescriptor,"ax",%progbits 293 .align 1 294 .global USBD_VCP_ManufacturerStrDescriptor 295 .syntax unified 296 .code 16 297 .thumb_func 298 .fpu softvfp ARM GAS /tmp/cck6myrA.s page 11 300 USBD_VCP_ManufacturerStrDescriptor: 301 .LFB46: 170:Src/usbd_desc.c **** USBD_GetString((uint8_t *)USBD_MANUFACTURER_STRING, USBD_StrDesc, length); 302 .loc 1 170 0 303 .cfi_startproc 304 @ args = 0, pretend = 0, frame = 0 305 @ frame_needed = 0, uses_anonymous_args = 0 306 .LVL25: 307 0000 10B5 push {r4, lr} 308 .LCFI4: 309 .cfi_def_cfa_offset 8 310 .cfi_offset 4, -8 311 .cfi_offset 14, -4 312 0002 0A00 movs r2, r1 171:Src/usbd_desc.c **** return USBD_StrDesc; 313 .loc 1 171 0 314 0004 034C ldr r4, .L25 315 0006 2100 movs r1, r4 316 .LVL26: 317 0008 0348 ldr r0, .L25+4 318 .LVL27: 319 000a FFF7FEFF bl USBD_GetString 320 .LVL28: 173:Src/usbd_desc.c **** 321 .loc 1 173 0 322 000e 2000 movs r0, r4 323 @ sp needed 324 0010 10BD pop {r4, pc} 325 .L26: 326 0012 C046 .align 2 327 .L25: 328 0014 00000000 .word USBD_StrDesc 329 0018 00000000 .word .LC10 330 .cfi_endproc 331 .LFE46: 333 .section .text.USBD_VCP_ConfigStrDescriptor,"ax",%progbits 334 .align 1 335 .global USBD_VCP_ConfigStrDescriptor 336 .syntax unified 337 .code 16 338 .thumb_func 339 .fpu softvfp 341 USBD_VCP_ConfigStrDescriptor: 342 .LFB48: 198:Src/usbd_desc.c **** USBD_GetString((uint8_t *)USBD_CONFIGURATION_FS_STRING, USBD_StrDesc, length); 343 .loc 1 198 0 344 .cfi_startproc 345 @ args = 0, pretend = 0, frame = 0 346 @ frame_needed = 0, uses_anonymous_args = 0 347 .LVL29: 348 0000 10B5 push {r4, lr} 349 .LCFI5: 350 .cfi_def_cfa_offset 8 351 .cfi_offset 4, -8 352 .cfi_offset 14, -4 353 0002 0A00 movs r2, r1 199:Src/usbd_desc.c **** return USBD_StrDesc; ARM GAS /tmp/cck6myrA.s page 12 354 .loc 1 199 0 355 0004 034C ldr r4, .L28 356 0006 2100 movs r1, r4 357 .LVL30: 358 0008 0348 ldr r0, .L28+4 359 .LVL31: 360 000a FFF7FEFF bl USBD_GetString 361 .LVL32: 201:Src/usbd_desc.c **** 362 .loc 1 201 0 363 000e 2000 movs r0, r4 364 @ sp needed 365 0010 10BD pop {r4, pc} 366 .L29: 367 0012 C046 .align 2 368 .L28: 369 0014 00000000 .word USBD_StrDesc 370 0018 00000000 .word .LC13 371 .cfi_endproc 372 .LFE48: 374 .section .text.USBD_VCP_InterfaceStrDescriptor,"ax",%progbits 375 .align 1 376 .global USBD_VCP_InterfaceStrDescriptor 377 .syntax unified 378 .code 16 379 .thumb_func 380 .fpu softvfp 382 USBD_VCP_InterfaceStrDescriptor: 383 .LFB49: 210:Src/usbd_desc.c **** USBD_GetString((uint8_t *)USBD_INTERFACE_FS_STRING, USBD_StrDesc, length); 384 .loc 1 210 0 385 .cfi_startproc 386 @ args = 0, pretend = 0, frame = 0 387 @ frame_needed = 0, uses_anonymous_args = 0 388 .LVL33: 389 0000 10B5 push {r4, lr} 390 .LCFI6: 391 .cfi_def_cfa_offset 8 392 .cfi_offset 4, -8 393 .cfi_offset 14, -4 394 0002 0A00 movs r2, r1 211:Src/usbd_desc.c **** return USBD_StrDesc; 395 .loc 1 211 0 396 0004 034C ldr r4, .L31 397 0006 2100 movs r1, r4 398 .LVL34: 399 0008 0348 ldr r0, .L31+4 400 .LVL35: 401 000a FFF7FEFF bl USBD_GetString 402 .LVL36: 213:Src/usbd_desc.c **** 403 .loc 1 213 0 404 000e 2000 movs r0, r4 405 @ sp needed 406 0010 10BD pop {r4, pc} 407 .L32: 408 0012 C046 .align 2 ARM GAS /tmp/cck6myrA.s page 13 409 .L31: 410 0014 00000000 .word USBD_StrDesc 411 0018 00000000 .word .LC16 412 .cfi_endproc 413 .LFE49: 415 .comm USBD_StrDesc,256,4 416 .global USBD_StringSerial 417 .global USBD_LangIDDesc 418 .global hUSBDDeviceDesc 419 .global VCP_Desc 420 .section .data.USBD_StringSerial,"aw",%progbits 421 .align 2 422 .set .LANCHOR2,. + 0 425 USBD_StringSerial: 426 0000 1A .byte 26 427 0001 03 .byte 3 428 0002 00000000 .space 24 428 00000000 428 00000000 428 00000000 428 00000000 429 .section .data.VCP_Desc,"aw",%progbits 430 .align 2 433 VCP_Desc: 434 0000 00000000 .word USBD_VCP_DeviceDescriptor 435 0004 00000000 .word USBD_VCP_LangIDStrDescriptor 436 0008 00000000 .word USBD_VCP_ManufacturerStrDescriptor 437 000c 00000000 .word USBD_VCP_ProductStrDescriptor 438 0010 00000000 .word USBD_VCP_SerialStrDescriptor 439 0014 00000000 .word USBD_VCP_ConfigStrDescriptor 440 0018 00000000 .word USBD_VCP_InterfaceStrDescriptor 441 .section .rodata.USBD_LangIDDesc,"a",%progbits 442 .align 2 443 .set .LANCHOR1,. + 0 446 USBD_LangIDDesc: 447 0000 04 .byte 4 448 0001 03 .byte 3 449 0002 09 .byte 9 450 0003 04 .byte 4 451 .section .rodata.USBD_VCP_ConfigStrDescriptor.str1.4,"aMS",%progbits,1 452 .align 2 453 .LC13: 454 0000 6D617500 .ascii "mau\000" 455 .section .rodata.USBD_VCP_InterfaceStrDescriptor.str1.4,"aMS",%progbits,1 456 .align 2 457 .LC16: 458 0000 3A6F00 .ascii ":o\000" 459 .section .rodata.USBD_VCP_ManufacturerStrDescriptor.str1.4,"aMS",%progbits,1 460 .align 2 461 .LC10: 462 0000 4F747465 .ascii "Otter-Iron\000" 462 722D4972 462 6F6E00 463 .section .rodata.USBD_VCP_ProductStrDescriptor.str1.4,"aMS",%progbits,1 464 .align 2 465 .LC7: 466 0000 63686972 .ascii "chirp :3\000" ARM GAS /tmp/cck6myrA.s page 14 466 70203A33 466 00 467 .section .rodata.hUSBDDeviceDesc,"a",%progbits 468 .align 2 469 .set .LANCHOR0,. + 0 472 hUSBDDeviceDesc: 473 0000 12 .byte 18 474 0001 01 .byte 1 475 0002 00 .byte 0 476 0003 02 .byte 2 477 0004 00 .byte 0 478 0005 00 .byte 0 479 0006 00 .byte 0 480 0007 40 .byte 64 481 0008 83 .byte -125 482 0009 04 .byte 4 483 000a 40 .byte 64 484 000b 57 .byte 87 485 000c 00 .byte 0 486 000d 02 .byte 2 487 000e 01 .byte 1 488 000f 02 .byte 2 489 0010 03 .byte 3 490 0011 01 .byte 1 491 .text 492 .Letext0: 493 .file 2 "/home/janhenrik/programme/gcc-arm-none-eabi-7-2018-q2-update/arm-none-eabi/include/machin 494 .file 3 "/home/janhenrik/programme/gcc-arm-none-eabi-7-2018-q2-update/arm-none-eabi/include/sys/_s 495 .file 4 "Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h" 496 .file 5 "Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h" 497 .file 6 "/home/janhenrik/programme/gcc-arm-none-eabi-7-2018-q2-update/arm-none-eabi/include/sys/lo 498 .file 7 "/home/janhenrik/programme/gcc-arm-none-eabi-7-2018-q2-update/arm-none-eabi/include/sys/_t 499 .file 8 "/home/janhenrik/programme/gcc-arm-none-eabi-7-2018-q2-update/lib/gcc/arm-none-eabi/7.3.1/ 500 .file 9 "/home/janhenrik/programme/gcc-arm-none-eabi-7-2018-q2-update/arm-none-eabi/include/sys/re 501 .file 10 "/home/janhenrik/programme/gcc-arm-none-eabi-7-2018-q2-update/arm-none-eabi/include/stdli 502 .file 11 "Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h" 503 .file 12 "Inc/usbd_desc.h" 504 .file 13 "Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h" ARM GAS /tmp/cck6myrA.s page 15 DEFINED SYMBOLS *ABS*:0000000000000000 usbd_desc.c /tmp/cck6myrA.s:16 .text.USBD_VCP_DeviceDescriptor:0000000000000000 $t /tmp/cck6myrA.s:23 .text.USBD_VCP_DeviceDescriptor:0000000000000000 USBD_VCP_DeviceDescriptor /tmp/cck6myrA.s:43 .text.USBD_VCP_DeviceDescriptor:0000000000000008 $d /tmp/cck6myrA.s:48 .text.USBD_VCP_LangIDStrDescriptor:0000000000000000 $t /tmp/cck6myrA.s:55 .text.USBD_VCP_LangIDStrDescriptor:0000000000000000 USBD_VCP_LangIDStrDescriptor /tmp/cck6myrA.s:74 .text.USBD_VCP_LangIDStrDescriptor:0000000000000008 $d /tmp/cck6myrA.s:79 .text.IntToUnicode:0000000000000000 $t /tmp/cck6myrA.s:85 .text.IntToUnicode:0000000000000000 IntToUnicode /tmp/cck6myrA.s:144 .text.Get_SerialNum:0000000000000000 $t /tmp/cck6myrA.s:150 .text.Get_SerialNum:0000000000000000 Get_SerialNum /tmp/cck6myrA.s:207 .text.Get_SerialNum:0000000000000030 $d /tmp/cck6myrA.s:215 .text.USBD_VCP_SerialStrDescriptor:0000000000000000 $t /tmp/cck6myrA.s:222 .text.USBD_VCP_SerialStrDescriptor:0000000000000000 USBD_VCP_SerialStrDescriptor /tmp/cck6myrA.s:247 .text.USBD_VCP_SerialStrDescriptor:0000000000000010 $d /tmp/cck6myrA.s:252 .text.USBD_VCP_ProductStrDescriptor:0000000000000000 $t /tmp/cck6myrA.s:259 .text.USBD_VCP_ProductStrDescriptor:0000000000000000 USBD_VCP_ProductStrDescriptor /tmp/cck6myrA.s:287 .text.USBD_VCP_ProductStrDescriptor:0000000000000014 $d *COM*:0000000000000100 USBD_StrDesc /tmp/cck6myrA.s:293 .text.USBD_VCP_ManufacturerStrDescriptor:0000000000000000 $t /tmp/cck6myrA.s:300 .text.USBD_VCP_ManufacturerStrDescriptor:0000000000000000 USBD_VCP_ManufacturerStrDescriptor /tmp/cck6myrA.s:328 .text.USBD_VCP_ManufacturerStrDescriptor:0000000000000014 $d /tmp/cck6myrA.s:334 .text.USBD_VCP_ConfigStrDescriptor:0000000000000000 $t /tmp/cck6myrA.s:341 .text.USBD_VCP_ConfigStrDescriptor:0000000000000000 USBD_VCP_ConfigStrDescriptor /tmp/cck6myrA.s:369 .text.USBD_VCP_ConfigStrDescriptor:0000000000000014 $d /tmp/cck6myrA.s:375 .text.USBD_VCP_InterfaceStrDescriptor:0000000000000000 $t /tmp/cck6myrA.s:382 .text.USBD_VCP_InterfaceStrDescriptor:0000000000000000 USBD_VCP_InterfaceStrDescriptor /tmp/cck6myrA.s:410 .text.USBD_VCP_InterfaceStrDescriptor:0000000000000014 $d /tmp/cck6myrA.s:425 .data.USBD_StringSerial:0000000000000000 USBD_StringSerial /tmp/cck6myrA.s:446 .rodata.USBD_LangIDDesc:0000000000000000 USBD_LangIDDesc /tmp/cck6myrA.s:472 .rodata.hUSBDDeviceDesc:0000000000000000 hUSBDDeviceDesc /tmp/cck6myrA.s:433 .data.VCP_Desc:0000000000000000 VCP_Desc /tmp/cck6myrA.s:421 .data.USBD_StringSerial:0000000000000000 $d /tmp/cck6myrA.s:430 .data.VCP_Desc:0000000000000000 $d /tmp/cck6myrA.s:442 .rodata.USBD_LangIDDesc:0000000000000000 $d /tmp/cck6myrA.s:452 .rodata.USBD_VCP_ConfigStrDescriptor.str1.4:0000000000000000 $d /tmp/cck6myrA.s:456 .rodata.USBD_VCP_InterfaceStrDescriptor.str1.4:0000000000000000 $d /tmp/cck6myrA.s:460 .rodata.USBD_VCP_ManufacturerStrDescriptor.str1.4:0000000000000000 $d /tmp/cck6myrA.s:464 .rodata.USBD_VCP_ProductStrDescriptor.str1.4:0000000000000000 $d /tmp/cck6myrA.s:468 .rodata.hUSBDDeviceDesc:0000000000000000 $d UNDEFINED SYMBOLS USBD_GetString