📄 usbd12.lis
字号:
01F4 ; EP2_PACKET_SIZE,0x00, //端点最大包的大小,= 0040H
01F4 ; 10 //批量传输时该设备无效
01F4 ; },
01F4 ; //端点2输出
01F4 ; {
01F4 ; sizeof(USB_ENDPOINT_DESCRIPTOR), //端点描述符长度,= 07H
01F4 ; USB_ENDPOINT_DESCRIPTOR_TYPE, //端点描述符类型,= 05H
01F4 ; 0x2, //端点2 IN
01F4 ; USB_ENDPOINT_TYPE_BULK, //批量传输,= 02H
01F4 ; EP2_PACKET_SIZE,0x00, //端点最大包的大小,= 0040H
01F4 ; 10 //批量传输时该设备无效
01F4 ; }
01F4 ; };
01F4 ; //#pragma data:data
01F4 ; //#pragma data:code
01F4 ; void (*StandardDeviceRequest[])(void)=
01F4 ; {
01F4 ; Get_status,
01F4 ; Clr_feature,
01F4 ; Reserved,
01F4 ; Set_feature,
01F4 ; Reserved,
01F4 ; Set_addr,
01F4 ; Get_descriptor,
01F4 ; Reserved,
01F4 ; Get_config,
01F4 ; Set_config,
01F4 ; Get_interface,
01F4 ; Set_interface,
01F4 ; Reserved,
01F4 ; Reserved,
01F4 ; Reserved,
01F4 ; Reserved
01F4 ; };
01F4 ; //#pragma data:data
01F4 ; /*******************************************
01F4 ; 函数名称: D12_init
01F4 ; 功 能: 初始化D12接口(包括数据接口和控制接口)
01F4 ; 参 数: 无
01F4 ; 返回值 : 无
01F4 ; /********************************************/
01F4 ; void D12_init(void)
01F4 ; {
01F4 .dbline 228
01F4 ; DDRA|=BIT(CSUSB); //USB的573锁存端设置为输出
01F4 D79A sbi 0x1a,7
01F6 .dbline 229
01F6 ; PORTA&=~BIT(CSUSB); //573锁存端关闭
01F6 DF98 cbi 0x1b,7
01F8 .dbline 230
01F8 ; USBDAT_DDR|=0xFF; //数据端口设置为输出
01F8 87B3 in R24,0x17
01FA 8F6F ori R24,255
01FC 87BB out 0x17,R24
01FE .dbline 231
01FE ; USBCTL_DDR|=BIT(WR_N)|BIT(RD_N)|BIT(C_D)|BIT(D12_CS);//控制引脚设置为输出
01FE 81B3 in R24,0x11
0200 806F ori R24,240
0202 81BB out 0x11,R24
0204 .dbline 232
0204 ; USBCTL_DDR&=~BIT(D12_INT); //中断引脚设置为输入
0204 8B98 cbi 0x11,3
0206 .dbline 233
0206 ; USBCTL_PORT|=BIT(D12_INT); //上拉使能
0206 939A sbi 0x12,3
0208 .dbline 234
0208 ; USBCTL_PORT|=BIT(WR_N)|BIT(RD_N)|BIT(D12_CS); //控制引脚无效
0208 82B3 in R24,0x12
020A 806B ori R24,176
020C 82BB out 0x12,R24
020E .dbline 235
020E ; PORTA|=BIT(CSUSB); //送出控制信号
020E DF9A sbi 0x1b,7
0210 .dbline 237
0210 ;
0210 ; SREG|=BIT(GLOBAL); //使能全局中断
0210 7894 bset 7
0212 .dbline 238
0212 ; MCUCR&=0xF3; //外部中断1采用低电平触发
0212 85B7 in R24,0x35
0214 837F andi R24,243
0216 85BF out 0x35,R24
0218 .dbline 239
0218 ; GICR|=BIT(EXTINT1); //使能外部中断0和1
0218 8BB7 in R24,0x3b
021A 8068 ori R24,128
021C 8BBF out 0x3b,R24
021E .dbline 241
021E ;
021E ; USBCTL_PORT&=~BIT(D12_CS);
021E 9798 cbi 0x12,7
0220 .dbline -2
0220 .dbline 242
0220 ; }
0220 L44:
0220 .dbline 0 ; func end
0220 0895 ret
0222 .dbend
0222 .dbfunc e OutB _OutB fV
0222 ; dat -> R20
0222 ; cmd -> R22
.even
0222 _OutB::
0222 0E940000 xcall push_gset2
0226 422F mov R20,R18
0228 602F mov R22,R16
022A .dbline -1
022A .dbline 251
022A ; /*******************************************
022A ; 函数名称: OutB
022A ; 功 能: 向D12写入一个字节数据或者命令
022A ; 参 数: cmd--命令标识(为CMD是命令,为DAT是数据)
022A ; dat--要写入的字节数据
022A ; 返回值 : 无
022A ; /********************************************/
022A ; void OutB(uchar cmd,uchar dat)
022A ; {
022A .dbline 252
022A ; if(cmd==CMD)
022A 6130 cpi R22,1
022C 71F4 brne L46
022E .dbline 253
022E ; {
022E .dbline 254
022E ; USBCTL_PORT|=BIT(C_D);
022E 969A sbi 0x12,6
0230 .dbline 255
0230 ; Delayus(5);
0230 05E0 ldi R16,5
0232 10E0 ldi R17,0
0234 E5DE xcall _Delayus
0236 .dbline 256
0236 ; USBCTL_PORT&=~BIT(WR_N);
0236 9498 cbi 0x12,4
0238 .dbline 257
0238 ; Delayus(5);
0238 05E0 ldi R16,5
023A 10E0 ldi R17,0
023C E1DE xcall _Delayus
023E .dbline 258
023E ; USBDAT_PORT=dat;
023E 48BB out 0x18,R20
0240 .dbline 259
0240 ; Delayus(5);
0240 05E0 ldi R16,5
0242 10E0 ldi R17,0
0244 DDDE xcall _Delayus
0246 .dbline 260
0246 ; USBCTL_PORT|=BIT(WR_N);
0246 949A sbi 0x12,4
0248 .dbline 261
0248 ; }
0248 0DC0 xjmp L47
024A L46:
024A .dbline 263
024A .dbline 264
024A 9698 cbi 0x12,6
024C .dbline 265
024C 01E0 ldi R16,1
024E 10E0 ldi R17,0
0250 D7DE xcall _Delayus
0252 .dbline 266
0252 9498 cbi 0x12,4
0254 .dbline 267
0254 01E0 ldi R16,1
0256 10E0 ldi R17,0
0258 D3DE xcall _Delayus
025A .dbline 268
025A 48BB out 0x18,R20
025C .dbline 269
025C 01E0 ldi R16,1
025E 10E0 ldi R17,0
0260 CFDE xcall _Delayus
0262 .dbline 270
0262 949A sbi 0x12,4
0264 .dbline 271
0264 L47:
0264 .dbline -2
0264 .dbline 272
0264 ; else
0264 ; {
0264 ; USBCTL_PORT&=~BIT(C_D);
0264 ; Delayus(1);
0264 ; USBCTL_PORT&=~BIT(WR_N);
0264 ; Delayus(1);
0264 ; USBDAT_PORT=dat;
0264 ; Delayus(1);
0264 ; USBCTL_PORT|=BIT(WR_N);
0264 ; }
0264 ; }
0264 L45:
0264 0E940000 xcall pop_gset2
0268 .dbline 0 ; func end
0268 0895 ret
026A .dbsym r dat 20 c
026A .dbsym r cmd 22 c
026A .dbend
026A .dbfunc e InB _InB fc
026A ; dat -> R20
.even
026A _InB::
026A 0E940000 xcall push_gset1
026E .dbline -1
026E .dbline 280
026E ; /*******************************************
026E ; 函数名称: InB
026E ; 功 能: 从D12读出一个字节数据
026E ; 参 数: 无
026E ; 返回值 : dat--读出的字节数据
026E ; /********************************************/
026E ; uchar InB(void)
026E ; {
026E .dbline 282
026E ; uchar dat;
026E ; USBDAT_DDR=0x00;
026E 2224 clr R2
0270 27BA out 0x17,R2
0272 .dbline 283
0272 ; USBDAT_PORT=0xFF;
0272 8FEF ldi R24,255
0274 88BB out 0x18,R24
0276 .dbline 284
0276 ; USBCTL_PORT&=~BIT(C_D);
0276 9698 cbi 0x12,6
0278 .dbline 285
0278 ; Delayus(1);
0278 01E0 ldi R16,1
027A 10E0 ldi R17,0
027C C1DE xcall _Delayus
027E .dbline 286
027E ; USBCTL_PORT&=~BIT(RD_N);
027E 9598 cbi 0x12,5
0280 .dbline 287
0280 ; Delayus(1);
0280 01E0 ldi R16,1
0282 10E0 ldi R17,0
0284 BDDE xcall _Delayus
0286 .dbline 288
0286 ; dat=USBDAT_PIN;
0286 46B3 in R20,0x16
0288 .dbline 289
0288 ; Delayus(1);
0288 01E0 ldi R16,1
028A 10E0 ldi R17,0
028C B9DE xcall _Delayus
028E .dbline 290
028E ; USBCTL_PORT|=BIT(RD_N);
028E 959A sbi 0x12,5
0290 .dbline 291
0290 ; USBDAT_DDR=0xFF;
0290 8FEF ldi R24,255
0292 87BB out 0x17,R24
0294 .dbline 292
0294 ; return dat;
0294 042F mov R16,R20
0296 .dbline -2
0296 L48:
0296 0E940000 xcall pop_gset1
029A .dbline 0 ; func end
029A 0895 ret
029C .dbsym r dat 20 c
029C .dbend
029C .dbfunc e Set_addren _Set_addren fV
029C ; enable -> R22
029C ; addr -> R20
.even
029C _Set_addren::
029C 0E940000 xcall push_gset2
02A0 622F mov R22,R18
02A2 402F mov R20,R16
02A4 .dbline -1
02A4 .dbline 302
02A4 ; }
02A4 ; /*******************************************
02A4 ; 函数名称: Set_addren
02A4 ; 功 能: 设置地址/使能----------------------------
02A4 ; 参 数: addr--设置的地址
02A4 ; enable--使能标志(为1使能,为0禁止)
02A4 ; 返回值 : 无
02A4 ; /********************************************/
02A4 ; void Set_addren(uchar addr, uchar enable)
02A4 ; {
02A4 .dbline 303
02A4 ; if(USB_FLAG.in
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -