http://blog.csdn.net/never_never_give_up/article/details/10525103
USB的单片机程序包括三部分:
1.初始化单片机和外围电路(包括USB芯片)
2、主循环部分,用来检测
3.中断服务程序,其任务是对时间敏感的,必须马上执行
根据USB 协议,任何传输都是由主机host 开始的,这样,单片机作它的前台工作,等待中断,主机首先要发令牌包给USB 设备(这里是PDIUSBD12),PDIUSBD12 接收到令牌包后就给单片机发中断,单片机进入中断服务程序,首先读PDIUSBD12 的中断寄存器,判断USB 令牌包的类型,然后执行相应的操作。
注意:因此,USB单片机程序主要就是中断服务程序的编写,在USB单片机程序中要完成对各种令牌包的响应,其中比较难处理的是SETUP包,主要是端口0的编程。
单片机与PDIUSBD12 的通信主要是靠单片机给PDIUSBD12发命令和数据来实现的。PDIUSBD12的命令字分为三种:初始化命令字、数据流命令字和通用命令字。PDIUSBD12给出了各种命令的代码和地址。单片机先给PDIUSBD12 的命令地址发命令,根据不同命令的要求再发送或读出不同的数据。因此可以将每种命令做成函数,用函数实现各个命令,以后直接调用函数即可
USB 初始化过程为
- Set Address Enable;
- Set Endpoint Enable(此时LED亮);
- Disconnect;
- delay (1~2 s);
- Connect(即用43h 参数调用Set Mode,此时LED灭);
- Read Interrupt Register。