采用PDIUSBD12的USB系统固件程序设计
{ Setup_read();
Setup_control();
}
else
{ Setup_read();
}
}
else if(ist & 0x02)//ENDP0_IN
{ XmtBuff.in=1;
D12_COMMAND=0x41;//读in最后状态
ist=D12_DATA;
USB_submit();
}
else if(ist & 0x04)//ENDP1_OUT
{ XmtBuff.out=2;
XmtBuff.in=3;
D12_COMMAND=0x42;//读out最后状态
ist=D12_DATA;
read_out();
}
else if(ist & 0x08)//ENDP1_IN
{ XmtBuff.in=3;
D12_COMMAND=0x43;//读in最后状态
ist=D12_DATA;
XmtBuff.b[0]=5;
XmtBuff.wrLength=1;
XmtBuff.p=XmtBuff.b;
USB_submit();
}
……
在发出连接USB命令后,主机先读取设备描述符,然后发出设置USB地址SETUP包,设置USB地址后,进行主机客户驱动与设备初始化。其余端点(ENDPOINT)依此类推。
在其头文件里需定义USB规范中的各种描述符格式,包括设备描述表、配置描述表、接口描述表、端点描述表、字符串描述表以及描述表类型。这样,在发送配置[,接口(1),端点(1),接口(2),端点(2),…,类,厂商等]联合描述表时,主机USBD可以根据描述类型标识区分各种分描述表。
下面是固件程序的主循环部分:
#include<reg51.h>
//指向外部D12访问地址
#define D12_COMMAND(*(unsigned char xdata *)0xff01)
#define D12_DATA (*(unsigned char xdata *)0x7f02)
extern void D12_int();
sbit D12_suspend=P1^0;
《采用PDIUSBD12的USB系统固件程序设计(第3页)》