📄 chap9.lst
字号:
728 022e 0895 ret
729 /* epilogue end (size=1) */
730 /* function set_address size 12 (11) */
732 .Lscope8:
734 .global get_descriptor
736 get_descriptor:
168:chap9.c **** }
169:chap9.c **** //获取描述符
170:chap9.c **** void get_descriptor(void)
171:chap9.c **** {
738 .LM74:
739 /* prologue: frame size=0 */
740 /* prologue end (size=0) */
172:chap9.c **** //读取请求的描述符类型
173:chap9.c **** unsigned char bDescriptor = ControlData.DeviceRequest.wValue;
742 .LM75:
743 0230 8091 0000 lds r24,ControlData+2
174:chap9.c **** if(bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE)
745 .LM76:
746 0234 8130 cpi r24,lo8(1)
747 0236 29F4 brne .L45
175:chap9.c **** {
176:chap9.c **** //获取设备描述符
177:chap9.c **** code_transmit((unsigned char *) & DeviceDescr,sizeof(USB_DEVICE_DESCRIPTOR));
749 .LM77:
750 0238 62E1 ldi r22,lo8(18)
751 023a 70E0 ldi r23,hi8(18)
752 023c 80E0 ldi r24,lo8(DeviceDescr)
753 023e 90E0 ldi r25,hi8(DeviceDescr)
754 0240 14C0 rjmp .L50
755 .L45:
178:chap9.c **** }
179:chap9.c **** else
180:chap9.c **** if(bDescriptor == USB_CONFIGURATION_DESCRIPTOR_TYPE)
757 .LM78:
758 0242 8230 cpi r24,lo8(2)
759 0244 A9F4 brne .L47
181:chap9.c **** {
182:chap9.c **** if(ControlData.DeviceRequest.wLength>CONFIG_DESCRIPTOR_LENGTH)
761 .LM79:
762 0246 8091 0000 lds r24,ControlData+6
763 024a 9091 0000 lds r25,(ControlData+6)+1
764 024e 8F97 sbiw r24,47
765 0250 30F0 brlo .L48
183:chap9.c **** ControlData.DeviceRequest.wLength=CONFIG_DESCRIPTOR_LENGTH;
767 .LM80:
768 0252 8EE2 ldi r24,lo8(46)
769 0254 90E0 ldi r25,hi8(46)
770 0256 9093 0000 sts (ControlData+6)+1,r25
771 025a 8093 0000 sts ControlData+6,r24
772 .L48:
184:chap9.c **** //获取配置描述符+配置描述符+接口描述符+端点描述符
185:chap9.c **** code_transmit((unsigned char *) & ConfigDescr,ControlData.DeviceRequest.wLength);
774 .LM81:
775 025e 6091 0000 lds r22,ControlData+6
776 0262 7091 0000 lds r23,(ControlData+6)+1
777 0266 80E0 ldi r24,lo8(ConfigDescr)
778 0268 90E0 ldi r25,hi8(ConfigDescr)
779 .L50:
780 026a 0E94 0000 call code_transmit
781 026e 0895 ret
782 .L47:
186:chap9.c **** }
187:chap9.c **** else
188:chap9.c **** stall_ep0(); //没有该请求,返回STALL
784 .LM82:
785 0270 0E94 0000 call stall_ep0
786 0274 0895 ret
787 /* epilogue: frame size=0 */
788 /* epilogue: noreturn */
789 /* epilogue end (size=0) */
790 /* function get_descriptor size 36 (36) */
795 .Lscope9:
797 .global get_configuration
799 get_configuration:
189:chap9.c **** }
190:chap9.c **** //获取配置
191:chap9.c **** void get_configuration(void)
192:chap9.c **** {
801 .LM83:
802 /* prologue: frame size=1 */
803 0276 CF93 push r28
804 0278 DF93 push r29
805 027a CDB7 in r28,__SP_L__
806 027c DEB7 in r29,__SP_H__
807 027e 2197 sbiw r28,1
808 0280 0FB6 in __tmp_reg__,__SREG__
809 0282 F894 cli
810 0284 DEBF out __SP_H__,r29
811 0286 0FBE out __SREG__,__tmp_reg__
812 0288 CDBF out __SP_L__,r28
813 /* prologue end (size=10) */
193:chap9.c **** unsigned char c=bEPPflags.bits.configuration;
815 .LM84:
816 028a 8091 0000 lds r24,bEPPflags+1
817 028e 8170 andi r24,lo8(1)
818 0290 8983 std Y+1,r24
194:chap9.c **** single_transmit(&c,1);
820 .LM85:
821 0292 61E0 ldi r22,lo8(1)
822 0294 CE01 movw r24,r28
823 0296 0196 adiw r24,1
824 0298 0E94 0000 call single_transmit
825 /* epilogue: frame size=1 */
826 029c 2196 adiw r28,1
827 029e 0FB6 in __tmp_reg__,__SREG__
828 02a0 F894 cli
829 02a2 DEBF out __SP_H__,r29
830 02a4 0FBE out __SREG__,__tmp_reg__
831 02a6 CDBF out __SP_L__,r28
832 02a8 DF91 pop r29
833 02aa CF91 pop r28
834 02ac 0895 ret
835 /* epilogue end (size=9) */
836 /* function get_configuration size 28 (9) */
841 .Lscope10:
843 .global set_configuration
845 set_configuration:
195:chap9.c **** }
196:chap9.c **** //设置配置
197:chap9.c **** void set_configuration(void)
198:chap9.c **** {
847 .LM86:
848 /* prologue: frame size=0 */
849 /* prologue end (size=0) */
199:chap9.c **** if(ControlData.DeviceRequest.wValue==0)
851 .LM87:
852 02ae 8091 0000 lds r24,ControlData+2
853 02b2 9091 0000 lds r25,(ControlData+2)+1
854 02b6 0097 sbiw r24,0
855 02b8 69F4 brne .L53
200:chap9.c **** {
201:chap9.c **** //配置值不对,设备进入未配置状态
202:chap9.c **** single_transmit(0,0); //发送响应
857 .LM88:
858 02ba 60E0 ldi r22,lo8(0)
859 02bc 0E94 0000 call single_transmit
203:chap9.c **** DISABLE;
861 .LM89:
862 /* #APP */
863 02c0 F894 cli
204:chap9.c **** bEPPflags.bits.configuration=0; //标记未配置
865 .LM90:
866 /* #NOAPP */
867 02c2 8091 0000 lds r24,bEPPflags+1
868 02c6 8E7F andi r24,lo8(-2)
869 02c8 8093 0000 sts bEPPflags+1,r24
205:chap9.c **** ENABLE;
871 .LM91:
872 /* #APP */
873 02cc 7894 sei
206:chap9.c **** init_unconfig(); //进入地址状态,禁止0除外的所有端点
875 .LM92:
876 /* #NOAPP */
877 02ce 0E94 0000 call init_unconfig
878 02d2 0895 ret
879 .L53:
207:chap9.c **** }
208:chap9.c **** else
209:chap9.c **** if(ControlData.DeviceRequest.wValue==1)
881 .LM93:
882 02d4 0197 sbiw r24,1
883 02d6 89F4 brne .L55
210:chap9.c **** {
211:chap9.c **** //
212:chap9.c **** single_transmit(0,0); //发送响应
885 .LM94:
886 02d8 60E0 ldi r22,lo8(0)
887 02da 80E0 ldi r24,lo8(0)
888 02dc 90E0 ldi r25,hi8(0)
889 02de 0E94 0000 call single_transmit
213:chap9.c **** init_unconfig(); //进入地址状态,禁止0除外的所有端点
891 .LM95:
892 02e2 0E94 0000 call init_unconfig
214:chap9.c **** init_config(); //配置处理,允许端点收发
894 .LM96:
895 02e6 0E94 0000 call init_config
215:chap9.c **** DISABLE;
897 .LM97:
898 /* #APP */
899 02ea F894 cli
216:chap9.c **** bEPPflags.bits.configuration=1; //标记配置
901 .LM98:
902 /* #NOAPP */
903 02ec 8091 0000 lds r24,bEPPflags+1
904 02f0 8160 ori r24,lo8(1)
905 02f2 8093 0000 sts bEPPflags+1,r24
217:chap9.c **** ENABLE;
907 .LM99:
908 /* #APP */
909 02f6 7894 sei
910 /* #NOAPP */
911 02f8 0895 ret
912 .L55:
218:chap9.c **** }
219:chap9.c **** else
220:chap9.c **** stall_ep0(); //没有该请求,返回STALL
914 .LM100:
915 02fa 0E94 0000 call stall_ep0
916 02fe 0895 ret
917 /* epilogue: frame size=0 */
918 /* epilogue: noreturn */
919 /* epilogue end (size=0) */
920 /* function set_configuration size 46 (46) */
922 .Lscope11:
924 .global get_interface
926 get_interface:
221:chap9.c **** }
222:chap9.c **** //获取接口信息
223:chap9.c **** void get_interface(void)
224:chap9.c **** {
928 .LM101:
929 /* prologue: frame size=1 */
930 0300 CF93 push r28
931 0302 DF93 push r29
932 0304 CDB7 in r28,__SP_L__
933 0306 DEB7 in r29,__SP_H__
934 0308 2197 sbiw r28,1
935 030a 0FB6 in __tmp_reg__,__SREG__
936 030c F894 cli
937 030e DEBF out __SP_H__,r29
938 0310 0FBE out __SREG__,__tmp_reg__
939 0312 CDBF out __SP_L__,r28
940 /* prologue end (size=10) */
225:chap9.c **** unsigned char txdat =0; //本设备只有一个接口
942 .LM102:
943 0314 1982 std Y+1,__zero_reg__
226:chap9.c **** single_transmit(&txdat,1);
945 .LM103:
946 0316 61E0 ldi r22,lo8(1)
947 0318 CE01 movw r24,r28
948 031a 0196 adiw r24,1
949 031c 0E94 0000 call single_transmit
950 /* epilogue: frame size=1 */
951 0320 2196 adiw r28,1
952 0322 0FB6 in __tmp_reg__,__SREG__
953 0324 F894 cli
954 0326 DEBF out __SP_H__,r29
955 0328 0FBE out __SREG__,__tmp_reg__
956 032a CDBF out __SP_L__,r28
957 032c DF91 pop r29
958 032e CF91 pop r28
959 0330 0895 ret
960 /* epilogue end (size=9) */
961 /* function get_interface size 25 (6) */
966 .Lscope12:
968 .global set_interface
970 set_interface:
227:chap9.c **** }
228:chap9.c **** //设置接口
229:chap9.c **** void set_interface(void)
230:chap9.c **** {
972 .LM104:
973 /* prologue: frame size=0 */
974 /* prologue end (size=0) */
231:chap9.c **** if(ControlData.DeviceRequest.wValue==0 && ControlData.DeviceRequest.wIndex==0 )
976 .LM105:
977 0332 8091 0000 lds r24,ControlData+2
978 0336 9091 0000 lds r25,(ControlData+2)+1
979 033a 892B or r24,r25
980 033c 51F4 brne .L59
982 .LM106:
983 033e 8091 0000 lds r24,ControlData+4
984 0342 9091 0000 lds r25,(ControlData+4)+1
985 0346 0097 sbiw r24,0
986 0348 21F4 brne .L59
232:chap9.c **** single_transmit(0,0); //发送响应
988 .LM107:
989 034a 60E0 ldi r22,lo8(0)
990 034c 0E94 0000 call single_transmit
991 0350 0895 ret
992 .L59:
233:chap9.c **** else
234:chap9.c **** stall_ep0(); //没有该请求,返回STALL
994 .LM108:
995 0352 0E94 0000 call stall_ep0
996 0356 0895 ret
997 /* epilogue: frame size=0 */
998 /* epilogue: noreturn */
999 /* epilogue end (size=0) */
1000 /* function set_interface size 19 (19) */
1002 .Lscope13:
1003 .comm EpBuf,2,1
1004 .comm GenEpBuf,64,1
1005 .comm bEPPflags,2,1
1006 .comm ControlData,22,1
1019 .text
1021 Letext:
1022 /* File "chap9.c": code 448 = 0x01c0 ( 387), prologues 30, epilogues 31 */
DEFINED SYMBOLS
*ABS*:00000000 chap9.c
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:3 *ABS*:0000003f __SREG__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:4 *ABS*:0000003e __SP_H__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:5 *ABS*:0000003d __SP_L__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:6 *ABS*:00000000 __tmp_reg__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:7 *ABS*:00000001 __zero_reg__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:110 .data:00000000 EP2_RXDescr
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:120 .data:00000007 EP2_TXDescr
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:130 .data:0000000e EP1_RXDescr
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:140 .data:00000015 EP1_TXDescr
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:150 .data:0000001c InterfaceDescr
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:163 .data:00000025 ConfigDescr
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:175 .data:0000002e DeviceDescr
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:193 .data:00000040 StandardDeviceRequest
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:398 .text:000000ba get_status
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:518 .text:0000013e clear_feature
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:214 .text:00000000 reserved
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:610 .text:000001a4 set_feature
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:710 .text:00000218 set_address
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:736 .text:00000230 get_descriptor
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:799 .text:00000276 get_configuration
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:845 .text:000002ae set_configuration
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:926 .text:00000300 get_interface
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:970 .text:00000332 set_interface
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:231 .text:00000006 init_unconfig
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:249 .text:0000000e init_config
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:269 .text:00000016 single_transmit
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:296 .text:00000024 code_transmit
*COM*:00000016 ControlData
*COM*:00000002 bEPPflags
*COM*:00000002 EpBuf
*COM*:00000040 GenEpBuf
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGQaaaa.s:1021 .text:00000358 Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
stall_ep0
D12_SetEndpointEnable
D12_WriteEndpoint
D12_SelectEndpoint
D12_SetEndpointStatus
D12_SetAddressEnable
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -