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