USB通信协议源代码文档格式.docx
- 文档编号:14411510
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:25
- 大小:201.89KB
USB通信协议源代码文档格式.docx
《USB通信协议源代码文档格式.docx》由会员分享,可在线阅读,更多相关《USB通信协议源代码文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
UCC|=num;
//选择Endpoint,0,1,2,3,4,
MISC&
=0xf8;
//低3位置0
MISC|=0X00;
//TX位置0;
DeIay_3us();
MlSC|=0X01;
//SetRequest
DeIay_28us();
if(MlSC&
0X40匸0)FlF0_FLAG=0x0f;
/
/READY
0x80!
=0)FlF0_FLAG&
=0xf0;
//LenODetected
=Oxfe;
//clearREQ
returnFIFO_FLAG;
BYTEFIFO_WR_CHECK(BYTEnum)
BYTEFIFO_FLAG=O;
//后4位表示Ready位,
前四位表示LenO位的状态是否有被设置
=0xf8;
MISC|=0X02;
if(MISC&
0X40!
=0)
FIFO_FLAG=OxOf;
FIFO_FLAG&
=Oxf0;
//LenO
Detected
二Oxfe;
//cIear
REQ
}
returnFIFOFLAG;
Fifo_Size,BYTE*buffer)
inti二0;
MlSC|=0x01;
for(i二0;
i<
Fifo_Size;
i++)
buffer[i]=Fifo_Addr[0];
//从FIFO
地址取值
0x40=0)break;
//N
otReady
MlSC工0X02;
//改变TX位状态
^OXFE;
//CIearRequest
voidWrite_FIF0(BYTE*Fifo_Addr,BYTE
SendLenth,BYTE*buffer)
inti=0;
for(i二0;
i<
SendLenth;
Fifo_Addr[O]=buffer[i];
//将要发送的数据放至相应的Fifo中
//ClearRequest
BOOLCheck_Real_Cmd()
BYTEbFlag_Real_Cmd二FALSE;
0X20!
=0)bFIag_ReaI_Cmd=T
RUE;
if(MlSC&
0X80!
二0)bFIag_ReaI_Cmd二T
returnbFlag_Real_Cmd;
voidSendhand()
BOOLIsReaICmd,Status_FIag;
while
(1)
IsReaICmd=Check_Real_Cmd();
if(IsReaICmd二二TRUE)
return;
eIse
Status_FIag二FIFO_WR_CHECK
(0);
if(Status_FIag&
OxOf!
二0)//Fifo_Ready
break;
continue;
//SetRequset
=OXFE;
}voidcontrol_read(WORD*rom_dataptr,BYTE*buffer)//从中读取数据,
//rom_dataptr是全局的在其
他函数中赋值改变
BYTEtemp,i=0;
if(buffer[7]!
=0)//FIFO_WLENGTHH
if(buffer[6]==0)//FIFO_WLENGTHL
if(buffer[6]>
data_start[0])//请求的数据
超出ROM数据
data_count二buffer[6];
0x40匸0)//是控制指令
if(datacount=0)
Send_Hand_Shake();
//开始真正的control_read
while
(1)
if(bFIag_RD_HTabIe==0)//ReadLow
Byte
bFlag_RD_HTable=1;
buffer[i]=(BYTE)*rom_dat
aptr;
//取其低位
i++;
data_count--;
//全局变量,
要发送的总长度
if(data_count<
=1)
if(i+1=8)//FIF0_size二8
eIse//ReadHightByte
bFlag_RD_HTable=O;
buffer[i]=(BYTE)(*rom_dataptr)»
8;
//取其高位
rom_dataptr++;
//将ROM指针前移
if(buffer[i]==0x3f)continue;
=1)break;
if(i+1==8)
}//填充完毕,结束循环,开始向FIFO发送数据
if(CheckRealCmd()二二TRUE)
if(FlFO_WR_CHECK(0)&
0xff==0)continue;
//NotReady
Write_FIF0(Fifo_0_Addr,0x02,buffer);
//wT^T^^T^p、T^T^T^T^^TT1^T^T^T^T^T^^T
定Endpoint地址函数
//^p、^p、^p、^T^p、^f、T^^p、g^^T^p、T^T^^p、g^^T
voidSetAddress(BYTE*buffer)
BYTEDev_Addr;
Dev_Addr=buffer[2]//FIF0_0UT3,FIF0_WVAL
UEL
SIES|=0x01;
//主机从设备读操作后
将更新在AWR中的地址,否则为0则立即更新
Dev_Addr&
=OXFE;
USB_AWR=Dev_Addr;
Send_Hand_Shake();
//^TT1^T^^p、j1^T1^j1^^p、T^j1^T1^T^^p、
SetConfiguration():
设置配置函数
//^|wT^T^j^^T^p、^f、T^T^T^T^^TT1^T^T^T^T^T^^T
voidSetConfiguration(BYTE*buffer,BYTE
*USB_Configuration)
USVCl二0x80;
PGA_CTRL|二0x80;
*USB_Configuration=buffer[2];
//FIF0_WVA
LUEL
STALL&
=0x00;
//设置好以上的寄存器
//^Tj^j^j^j^*Tj^j^j^*T^T^j^*TT^
voidCIearFeature(BYTE*buffer)
BYTEtemp;
temp=buffer[2];
//FIF0_wVaIueL
if(temp二0x01)
STALLO|=0x01;
//SendStaI10();
voidCIearFeature_Endpoint(BYTE*buffer)
BYTEtemp;
temp=buffer[4];
//FIFO_wIndexL
if(bFIag_SetConfiguration_Ready二二TRUE);
//表明已经配置过了
temp=GetPipeBit(temp);
//获取对应位
temp=emp;
//取反
STALL二temp&
STALL;
//与STALL寄存器相与,
将需要的位置0
置Feature函数
分
SetFeature():
设
包括Endpoint部
ff
//^TT^T^^T^Tj1^T^T^T^^TT^T^T^T^
voidSetFeature(BYTE*buffer)
BYTEFIF0_wVaIueL=buffer[2];
BYTEFIF0_wVaIueH=buffer[3];
if(FIFOwVaIueH==0x00)
if(FIF0_wValueL==0x01)
//SendStaI100;
elseif(FlF0_wVaIueH>二0X81〈二0X84)
if(FIF0_wValueL==0x00)
STALLO|二0x01;
//SendStaI10
voidSetFeature_Endpoint(BYTE*buffer)
//FIF0_wIndexL
if(bFIag_SetConfiguration_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- USB 通信协议 源代码