📄 d12_setup.lis
字号:
00B6 ; D12_DATA = 0x01;
00B6 81E0 ldi R24,1
00B8 8093007F sts 32512,R24
00BC .dbline 64
00BC ; cwait;
00BC 0000 nop
00BE .dbline 65
00BE ; D12_COMMAND = 0xf1;// 应答SETUP包,使能(清 OUT 缓冲区、使能 IN 缓冲区)命令
00BE 81EF ldi R24,241
00C0 8093017F sts 32513,R24
00C4 .dbline 66
00C4 ; csram;
00C4 609301FC sts 0xfc01,R22
00C8 .dbline 66
00C8 .dbline -2
00C8 .dbline 67
00C8 ; }
00C8 L17:
00C8 .dbline 0 ; func end
00C8 0895 ret
00CA .dbend
00CA .dbfunc e get_status _get_status fV
.even
00CA _get_status::
00CA 00D0 rcall push_gset1
00CC .dbline -1
00CC .dbline 70
00CC ;
00CC ; void get_status(void)
00CC ; {
00CC .dbline 71
00CC ; XmtBuff.b[1] = 0x00;
00CC 2224 clr R2
00CE 20920100 sts _XmtBuff+1,R2
00D2 .dbline 72
00D2 ; switch (XmtBuff.b[0])
00D2 40910000 lds R20,_XmtBuff
00D6 5527 clr R21
00D8 4038 cpi R20,128
00DA E0E0 ldi R30,0
00DC 5E07 cpc R21,R30
00DE 49F0 breq L23
00E0 4138 cpi R20,129
00E2 E0E0 ldi R30,0
00E4 5E07 cpc R21,R30
00E6 49F0 breq L24
00E8 4238 cpi R20,130
00EA E0E0 ldi R30,0
00EC 5E07 cpc R21,R30
00EE 49F0 breq L25
00F0 0BC0 rjmp L20
00F2 X0:
00F2 .dbline 73
00F2 ; {
00F2 L23:
00F2 .dbline 76
00F2 ; case 0x80://返回设备状态
00F2 ; //发送两个字节数据:第一字节D1为1支持远程唤醒,D0为0是总线供电,其它位为0;第二字节为0。
00F2 ; XmtBuff.b[0] = 0x03;
00F2 83E0 ldi R24,3
00F4 80930000 sts _XmtBuff,R24
00F8 .dbline 77
00F8 ; break;
00F8 07C0 rjmp L21
00FA L24:
00FA .dbline 81
00FA ; case 0x81://返回接口状态
00FA ; //发送两个字节数据:第一字节为0;第二字节为0。
00FA ; //XmtBuff.b[5] 为接口号
00FA ; XmtBuff.b[0] = 0x00;
00FA 2224 clr R2
00FC 20920000 sts _XmtBuff,R2
0100 .dbline 82
0100 ; break;
0100 03C0 rjmp L21
0102 L25:
0102 .dbline 86
0102 ; case 0x82://返回端点状态
0102 ; //发送两个字节数据:第一字节D0为1端点处于暂停,否则D0为0,其它位为0;第二字节为0。
0102 ; //XmtBuff.b[5] D7为方向,D3~0为端点号
0102 ; XmtBuff.b[0] = 0x00;
0102 2224 clr R2
0104 20920000 sts _XmtBuff,R2
0108 .dbline 87
0108 ; break;
0108 L20:
0108 L21:
0108 .dbline 89
0108 ; }
0108 ; XmtBuff.p_p=0;
0108 2224 clr R2
010A 20922700 sts _XmtBuff+39,R2
010E .dbline 90
010E ; XmtBuff.wrLength = 2;
010E 82E0 ldi R24,2
0110 80932200 sts _XmtBuff+34,R24
0114 .dbline 91
0114 ; XmtBuff.p = XmtBuff.b;
0114 80E0 ldi R24,<_XmtBuff
0116 90E0 ldi R25,>_XmtBuff
0118 90932600 sts _XmtBuff+37+1,R25
011C 80932500 sts _XmtBuff+37,R24
0120 .dbline 92
0120 ; USB_submit();
0120 23D1 rcall _USB_submit
0122 .dbline -2
0122 .dbline 93
0122 ; }
0122 L18:
0122 00D0 rcall pop_gset1
0124 .dbline 0 ; func end
0124 0895 ret
0126 .dbend
0126 .dbfunc e clear_feature _clear_feature fV
0126 ; j -> R20
.even
0126 _clear_feature::
0126 00D0 rcall push_gset1
0128 .dbline -1
0128 .dbline 96
0128 ;
0128 ; void clear_feature(void)
0128 ; {
0128 .dbline 98
0128 ; char j;
0128 ; switch (XmtBuff.b[0])
0128 40910000 lds R20,_XmtBuff
012C 5527 clr R21
012E 4030 cpi R20,0
0130 4507 cpc R20,R21
0132 29F1 breq L31
0134 X1:
0134 4130 cpi R20,1
0136 E0E0 ldi R30,0
0138 5E07 cpc R21,R30
013A 09F1 breq L31
013C 4230 cpi R20,2
013E E0E0 ldi R30,0
0140 5E07 cpc R21,R30
0142 09F0 breq L35
0144 1CC0 rjmp L30
0146 X2:
0146 .dbline 99
0146 ; {
0146 .dbline 101
0146 ; case 0x00://清设备唤醒功能
0146 ; break;
0146 .dbline 103
0146 ; case 0x01://清接口状态
0146 ; break;
0146 L35:
0146 .dbline 106
0146 ; case 0x02://启用端点
0146 ; //XmtBuff.b[5] D7为方向,D3~0为端点号
0146 ; j = XmtBuff.b[5];
0146 40910500 lds R20,_XmtBuff+5
014A .dbline 107
014A ; if(j<0x80)
014A 4038 cpi R20,128
014C 60F4 brsh L37
014E .dbline 108
014E ; {
014E .dbline 109
014E ; j = 0x40+j*2;
014E 82E0 ldi R24,2
0150 849F mul R24,R20
0152 402D mov R20,R0
0154 405C subi R20,192 ; addi 64
0156 .dbline 110
0156 ; D12_COMMAND = j;// 启用OUT端点
0156 4093017F sts 32513,R20
015A .dbline 111
015A ; D12_DATA = 0x00;
015A 2224 clr R2
015C 2092007F sts 32512,R2
0160 .dbline 112
0160 ; csram;
0160 609301FC sts 0xfc01,R22
0164 .dbline 112
0164 .dbline 113
0164 ; }
0164 0CC0 rjmp L31
0166 L37:
0166 .dbline 115
0166 ; else
0166 ; {
0166 .dbline 116
0166 ; j = (j & 0x0f);
0166 4F70 andi R20,15
0168 .dbline 117
0168 ; D12_COMMAND = 0x41+j*2;// 启用IN端点
0168 82E0 ldi R24,2
016A 849F mul R24,R20
016C 802D mov R24,R0
016E 8F5B subi R24,191 ; addi 65
0170 8093017F sts 32513,R24
0174 .dbline 118
0174 ; D12_DATA = 0x00;
0174 2224 clr R2
0176 2092007F sts 32512,R2
017A .dbline 119
017A ; csram;
017A 609301FC sts 0xfc01,R22
017E .dbline 119
017E .dbline 120
017E ; }
017E .dbline 121
017E ; break;
017E L30:
017E L31:
017E .dbline 123
017E ; }
017E ; XmtBuff.wrLength = 0;
017E 2224 clr R2
0180 20922200 sts _XmtBuff+34,R2
0184 .dbline 124
0184 ; USB_submit();
0184 F1D0 rcall _USB_submit
0186 .dbline -2
0186 .dbline 125
0186 ; }
0186 L29:
0186 00D0 rcall pop_gset1
0188 .dbline 0 ; func end
0188 0895 ret
018A .dbsym r j 20 c
018A .dbend
018A .dbfunc e set_feature _set_feature fV
018A ; j -> R20
.even
018A _set_feature::
018A 00D0 rcall push_gset1
018C .dbline -1
018C .dbline 128
018C ;
018C ; void set_feature(void)
018C ; {
018C .dbline 130
018C ; char j;
018C ; switch (XmtBuff.b[0])
018C 40910000 lds R20,_XmtBuff
0190 5527 clr R21
0192 4030 cpi R20,0
0194 4507 cpc R20,R21
0196 39F1 breq L42
0198 X3:
0198 4130 cpi R20,1
019A E0E0 ldi R30,0
019C 5E07 cpc R21,R30
019E 19F1 breq L42
01A0 4230 cpi R20,2
01A2 E0E0 ldi R30,0
01A4 5E07 cpc R21,R30
01A6 09F0 breq L46
01A8 1EC0 rjmp L41
01AA X4:
01AA .dbline 131
01AA ; {
01AA .dbline 133
01AA ; case 0x00://设置设备唤醒功能
01AA ; break;
01AA .dbline 135
01AA ; case 0x01://设置接口状态
01AA ; break;
01AA L46:
01AA .dbline 138
01AA ; case 0x02://停止端点
01AA ; //XmtBuff.b[5] D7为方向,D3~0为端点号
01AA ; j = XmtBuff.b[5];
01AA 40910500 lds R20,_XmtBuff+5
01AE .dbline 139
01AE ; if(j<0x80)
01AE 4038 cpi R20,128
01B0 68F4 brsh L48
01B2 .dbline 140
01B2 ; {
01B2 .dbline 141
01B2 ; j = 0x40+j * 2;
01B2 82E0 ldi R24,2
01B4 849F mul R24,R20
01B6 402D mov R20,R0
01B8 405C subi R20,192 ; addi 64
01BA .dbline 142
01BA ; D12_COMMAND = j;// 停止OUT端点
01BA 4093017F sts 32513,R20
01BE .dbline 143
01BE ; cwait;
01BE 0000 nop
01C0 .dbline 144
01C0 ; D12_DATA = 0x01;
01C0 81E0 ldi R24,1
01C2 8093007F sts 32512,R24
01C6 .dbline 145
01C6 ; csram;
01C6 609301FC sts 0xfc01,R22
01CA .dbline 145
01CA .dbline 146
01CA ; }
01CA 0DC0 rjmp L42
01CC L48:
01CC .dbline 148
01CC ; else
01CC ; {
01CC .dbline 149
01CC ; j = j & 0x0f;
01CC 4F70 andi R20,15
01CE .dbline 150
01CE ; j = 0x41+j*2;
01CE 82E0 ldi R24,2
01D0 849F mul R24,R20
01D2 402D mov R20,R0
01D4 4F5B subi R20,191 ; addi 65
01D6 .dbline 151
01D6 ; D12_COMMAND = j;// 停止IN端点
01D6 4093017F sts 32513,R20
01DA .dbline 152
01DA ; cwait;
01DA 0000 nop
01DC .dbline 153
01DC ; D12_DATA = 0x01;
01DC 81E0 ldi R24,1
01DE 8093007F sts 32512,R24
01E2 .dbline 154
01E2 ; csram;
01E2 609301FC sts 0xfc01,R22
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -