保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

采用PDIUSBD12的USB系统固件程序设计


单片机发中断。单片机进入中断服务程序,首先读PDIUSBD12的中断寄存器,判断USB令牌包的类型,然后执行相应的操作。在USB单片机程序中,要完成对各种令牌包的响应,其中比较难处理的是SETUP包,主要是端口0的编程。

单片机与PDIUSBD12的通信主要是靠单片机给PDIUSBD12发命令和数据来实现的。PDIUSBD12的命令字分为三种:初始化命令字、数据流命令字和通用命令字。PDIUSBD12数据手册给出了各种命令的代码和地址。单片机先给PDIUSBD12的命令地址发命令,根据不同命令的要求再发送或读出不同的数据。因此,可以将每种命令做成函数,用函数实现各个命令,以后直接调用函数即可。

下面的程序是处理主机的标准控制请求的一个模板:

unsigned char ENDPOINT_A0_FIFO[8];

//判断输入的是SETUP请求,并将其读入缓冲区ENDPOINT_A0_FIFO

if((ENDPOINT_A0_FIFO[0] & 0b011000000)==0x00)

{

if(ENDPOINT_A0_FIFO[1]<=0C)

{

(*StandardFunctionTable[ENDPOINT_A0_FIFO[1]])();

return;

}

}

const void (*StandardFunctionTable[])(void)=

{

GetSatus,ClearFeature,USB_Reserved,SetFeature,

USB_Reserved,SetAddress,GetDescriptor,SetDescriptor,

GetConfiguration,SetConfiguration,GetInterface,

SetInterface,SynchFrame

};

USB设备在正常使用以前,必须由主机配置设备。主机一般会从USB设备获取配置信息后再确定此设备有哪些功能。

作为配置操作的一部分,主机会设备设备的配置值,如果必要的话会选择合适的接口备选设备。其初始化函数为:

void D12_int()

{ XmtBuff.pNum=16;

D12_COMMAND=0xf4;//读中断寄存器

ist=D12_DATA;

ist=D12_DATA;

if(ist & 0x01) //ENDP0_OUT

{XmtBuff.out=0;

XmtBuff.in=1;

D12_COMMAND=0x40; //读OUT最后状态

ist=D12_DATA;

if(ist & 0x20)//收到SETUP包

《采用PDIUSBD12的USB系统固件程序设计(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/164072.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。