📄 usbci.lst
字号:
446 void reconnect_USB(void)
447 {
448 1 INT32U clk_cnt;
449 1
450 1 disconnect_USB(); /* disconnect USB bus */
451 1 for (clk_cnt = 0;clk_cnt<= 0x1FFFF;clk_cnt++); /* delay */
452 1
453 1 connect_USB(); /* connect USB bus */
454 1 }
455
456
457 /*******************************************************************************************************
458 ** End Of File
459 ********************************************************************************************************/
ARM COMPILER V2.53, USBCI 28/06/07 09:54:12 PAGE 9
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE16 (?C?SDIV?T)
*** PUBLICS:
PUBLIC USB_ConfigMaxPaketSize?T
PUBLIC USB_ReadTestRegister?T
PUBLIC USB_SetAddressEnable?T
PUBLIC USB_SetEndpointEnable?T
PUBLIC USB_SetMode?T
PUBLIC USB_SetDevStatus?T
PUBLIC USB_GetDevStatus?T
PUBLIC USB_SelectEndpoint?T
PUBLIC USB_SelectClrIntEndpoint?T
PUBLIC USB_SetEndpointStatus?T
PUBLIC USB_ClearBuffer?T
PUBLIC USB_ValidBuffer?T
PUBLIC USB_ReadEndpoint?T
PUBLIC USB_WriteEndpoint?T
PUBLIC reconnect_USB?T
PUBLIC USB_GetData?T
PUBLIC USB_SendCmd?T
PUBLIC disconnect_USB?T
PUBLIC connect_USB?T
*** CODE SEGMENT '?PR?USB_ConfigMaxPaketSize?T?USBCI':
50: void USB_ConfigMaxPaketSize(INT8U endp, INT32U packetsize)
00000000 B403 PUSH {R0-R1}
53: USBReEp |= (INT32U)(0x01 << endp); /* 与原来存在的寄存器值做或操作 */
00000002 A800 ADD R0,R13,#0x0
00000004 7800 LDRB R0,[R0,#0x0] ; endp
00000006 2201 MOV R2,#0x1
00000008 4082 LSL R2,R0
0000000A 4800 LDR R0,=0xE0090044
0000000C 6801 LDR R1,[R0,#0x0]
0000000E 4311 ORR R1,R2
00000010 6001 STR R1,[R0,#0x0]
56: USBEpInd = (INT32U)endp; /* 选择端点 */
00000012 A800 ADD R0,R13,#0x0
00000014 7800 LDRB R0,[R0,#0x0] ; endp
00000016 1C01 MOV R1,R0
00000018 4800 LDR R0,=0xE0090048
0000001A 6001 STR R1,[R0,#0x0]
59: USBMaxPSize = (INT32U)packetsize; /* 写入端点最大包长度值 */
0000001C A801 ADD R0,R13,#0x4
0000001E 6801 LDR R1,[R0,#0x0] ; packetsize
00000020 4800 LDR R0,=0xE009004C
00000022 6001 STR R1,[R0,#0x0]
62: while((USBDevIntSt & EP_RLZEDINT) == 0); /* 等待处理完成 */
00000024 L_1:
00000024 4800 LDR R0,=0xE0090000
00000026 6800 LDR R0,[R0,#0x0]
00000028 4940 LDR R1,=0x100
0000002A 4208 TST R0,R1
0000002C D0FA BEQ L_1 ; T=0x00000024
65: USBDevIntClr = EP_RLZEDINT; /* 清除中断标志位 */
0000002E 4940 LDR R1,=0x100
00000030 4800 LDR R0,=0xE0090008
00000032 6001 STR R1,[R0,#0x0]
66: }
00000034 B002 ADD R13,#0x8
00000036 4770 BX R14
00000038 ENDP ; 'USB_ConfigMaxPaketSize?T'
*** CODE SEGMENT '?PR?USB_GetData?T?USBCI':
ARM COMPILER V2.53, USBCI 28/06/07 09:54:12 PAGE 10
81: INT8U USB_GetData(INT32U cmd)
00000000 B401 PUSH {R0}
84: USBCmdCode = cmd; /* 写入命令字 */
00000002 A800 ADD R0,R13,#0x0
00000004 6801 LDR R1,[R0,#0x0] ; cmd
00000006 4800 LDR R0,=0xE0090010
00000008 6001 STR R1,[R0,#0x0]
87: while((USBDevIntSt & CDFULL) == 0); /* 等待USBDevIntSt寄存器的CDFULL位置1*/
0000000A L_5:
0000000A 4800 LDR R0,=0xE0090000
0000000C 6800 LDR R0,[R0,#0x0]
0000000E 2120 MOV R1,#0x20
00000010 4208 TST R0,R1
00000012 D0FA BEQ L_5 ; T=0x0000000A
90: USBDevIntClr = CDFULL; /* 清除CDFULL位 */
00000014 2120 MOV R1,#0x20
00000016 4800 LDR R0,=0xE0090008
00000018 6001 STR R1,[R0,#0x0]
93: return USBCmdData; /* 读取数据 */
0000001A 4800 LDR R0,=0xE0090014
0000001C 6800 LDR R0,[R0,#0x0]
94: }
0000001E B001 ADD R13,#0x4
00000020 4770 BX R14
00000022 ENDP ; 'USB_GetData?T'
*** CODE SEGMENT '?PR?USB_SendCmd?T?USBCI':
104: void USB_SendCmd(INT32U cmd, INT32U data)
00000000 B403 PUSH {R0-R1}
107: USBCmdCode = cmd; /* 写入命令字 */
00000002 A800 ADD R0,R13,#0x0
00000004 6801 LDR R1,[R0,#0x0] ; cmd
00000006 4800 LDR R0,=0xE0090010
00000008 6001 STR R1,[R0,#0x0]
110: while((USBDevIntSt & CCEMPTY) == 0); /* 等待 USBDevIntSt 寄存器的 CCEMPTY 位置1 */
0000000A L_10:
0000000A 4800 LDR R0,=0xE0090000
0000000C 6800 LDR R0,[R0,#0x0]
0000000E 2110 MOV R1,#0x10
00000010 4208 TST R0,R1
00000012 D0FA BEQ L_10 ; T=0x0000000A
113: USBDevIntClr = CCEMPTY; /* 清除 CCEMPTY 位*/
00000014 2110 MOV R1,#0x10
00000016 4800 LDR R0,=0xE0090008
00000018 6001 STR R1,[R0,#0x0]
115: if (data != 0) /* 如果还有数据阶段 */
0000001A A801 ADD R0,R13,#0x4
0000001C 6800 LDR R0,[R0,#0x0] ; data
0000001E 2800 CMP R0,#0x0
00000020 D00B BEQ L_14 ; T=0x0000003A
118: USBCmdCode = data; /* 将数据编码写入命令代码寄存器 */
00000022 A801 ADD R0,R13,#0x4
00000024 6801 LDR R1,[R0,#0x0] ; data
00000026 4800 LDR R0,=0xE0090010
00000028 6001 STR R1,[R0,#0x0]
121: while((USBDevIntSt & CCEMPTY) == 0); /* 等待 USBDevIntSt 寄存器的 CCEMPTY 位置1 */
0000002A L_15:
0000002A 4800 LDR R0,=0xE0090000
0000002C 6800 LDR R0,[R0,#0x0]
0000002E 2110 MOV R1,#0x10
00000030 4208 TST R0,R1
00000032 D0FA BEQ L_15 ; T=0x0000002A
124: USBDevIntClr = CCEMPTY; /* 清除 CCEMPTY 位*/
00000034 2110 MOV R1,#0x10
00000036 4800 LDR R0,=0xE0090008
00000038 6001 STR R1,[R0,#0x0]
125: }
ARM COMPILER V2.53, USBCI 28/06/07 09:54:12 PAGE 11
0000003A L_14:
126: }
0000003A B002 ADD R13,#0x8
0000003C 4770 BX R14
0000003E ENDP ; 'USB_SendCmd?T'
*** CODE SEGMENT '?PR?USB_ReadTestRegister?T?USBCI':
139: INT16U USB_ReadTestRegister(void)
00000000 B500 PUSH {LR}
00000002 B081 SUB R13,#0x4
140: {
00000004 ; SCOPE-START
143: USB_SendCmd(USBCMD_RDTEST_REG, 0);
00000004 4800 LDR R0,=0xFD0500
00000006 2100 MOV R1,#0x0
00000008 F7FF BL USB_SendCmd?T ; T=0x0001 (1)
0000000A FFFA BL USB_SendCmd?T ; T=0x0001 (2)
145: temp = USB_GetData(USBDAT_RDTEST_REG); /* read LSB byte */
0000000C 4800 LDR R0,=0xFD0200
0000000E F7FF BL USB_GetData?T ; T=0x0001 (1)
00000010 FFF7 BL USB_GetData?T ; T=0x0001 (2)
00000012 0601 LSL R1,R0,#0x18 ; USB_GetData?T
00000014 0E09 LSR R1,R1,#0x18
00000016 A800 ADD R0,R13,#0x0
00000018 8001 STRH R1,[R0,#0x0] ; temp
146: temp += (INT16U)USB_GetData(USBDAT_RDTEST_REG) << 8; /* read MSB byte */
0000001A 4800 LDR R0,=0xFD0200
0000001C F7FF BL USB_GetData?T ; T=0x0001 (1)
0000001E FFF0 BL USB_GetData?T ; T=0x0001 (2)
00000020 0600 LSL R0,R0,#0x18 ; USB_GetData?T
00000022 0E00 LSR R0,R0,#0x18
00000024 0402 LSL R2,R0,#0x10
00000026 0C12 LSR R2,R2,#0x10
00000028 0212 LSL R2,R2,#0x8
0000002A 0412 LSL R2,R2,#0x10
0000002C 0C12 LSR R2,R2,#0x10
0000002E A800 ADD R0,R13,#0x0
00000030 8801 LDRH R1,[R0,#0x0] ; temp
00000032 1889 ADD R1,R2
00000034 8001 STRH R1,[R0,#0x0] ; temp
148: return temp;
00000036 A800 ADD R0,R13,#0x0
00000038 8800 LDRH R0,[R0,#0x0] ; temp
0000003A ; SCOPE-END
149: }
0000003A B001 ADD R13,#0x4
0000003C BC08 POP {R3}
0000003E 4718 BX R3
00000040 ENDP ; 'USB_ReadTestRegister?T'
*** CODE SEGMENT '?PR?USB_SetAddressEnable?T?USBCI':
160: void USB_SetAddressEnable(INT8U bAddress, INT8U bEnable)
00000000 B503 PUSH {R0-R1,LR}
162: if (bEnable)
00000002 A801 ADD R0,R13,#0x4
00000004 7800 LDRB R0,[R0,#0x0] ; bEnable
00000006 2800 CMP R0,#0x0
00000008 D005 BEQ L_20 ; T=0x00000016
163: bAddress |= 0x80;
0000000A A800 ADD R0,R13,#0x0
0000000C 7801 LDRB R1,[R0,#0x0] ; bAddress
0000000E 2080 MOV R0,#0x80
00000010 4301 ORR R1,R0
00000012 A800 ADD R0,R13,#0x0
00000014 7001 STRB R1,[R0,#0x0] ; bAddress
00000016 L_20:
165: USB_SendCmd(USBCMD_SET_ADDRESS, ((INT32U)(bAddress << 16)) | USBDAT_SET_ADDRESS);
00000016 A800 ADD R0,R13,#0x0
ARM COMPILER V2.53, USBCI 28/06/07 09:54:12 PAGE 12
00000018 7800 LDRB R0,[R0,#0x0] ; bAddress
0000001A 1C01 MOV R1,R0
0000001C 0409 LSL R1,R1,#0x10
0000001E 4840 LDR R0,=0x100
00000020 4301 ORR R1,R0
00000022 4800 LDR R0,=0xD00500
00000024 F7FF BL USB_SendCmd?T ; T=0x0001 (1)
00000026 FFEC BL USB_SendCmd?T ; T=0x0001 (2)
166: }
00000028 B002 ADD R13,#0x8
0000002A BC08 POP {R3}
0000002C 4718 BX R3
0000002E ENDP ; 'USB_SetAddressEnable?T'
*** CODE SEGMENT '?PR?USB_SetEndpointEnable?T?USBCI':
176: void USB_SetEndpointEnable(INT8U bEnble)
00000000 B501 PUSH {R0,LR}
178: USB_SendCmd(USBCMD_CONFIG_DEV, ((INT32U)(bEnble << 16)) | USBDAT_CONFIG_DEV);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -