?? d12.c
字號:
{0x07,0x05,0x02,0x02,0x4000,0}
}
};
//D12底層硬件接口函數
void Write_Com(uchar idata A) //寫命令到D12
{D12_A0=1;D12_Data=A;D12_WR=0;D12_WR=1;}
void Write_Data(uchar idata B) //寫數據到D12
{D12_A0=0;D12_Data=B;D12_WR=0;D12_WR=1;}
uchar Read_Data() //從D12讀數據
{uchar idata C;D12_A0=0;D12_RD=0;C=D12_Data;D12_RD=1;return C;}
//D12底層硬件接口函數
void Enable_Enp()
{
Write_Com(enable_enp);
Write_Data(0x01);
}
void Set_Address(uchar idata add)
{
Write_Com(set_address);
Write_Data(add|0x80);
Enable_Enp();
}
void Set_Mode(uchar idata A,uchar idata B)
{
Write_Com(set_mode);
Write_Data(A);
Write_Data(B);
}
void D12_Init()
{
TMOD=0X20;
TH1=TL1=0XF3;
SCON=0X50;
TR1=1;
TI=1;
//設定波特率
Set_Mode(0x0e,0x47);//斷開D12連接
Set_Address(0x00);//設置默認地址,使能端點
Set_Mode(0x1e,0x47);//連接D12連接
printf("初始化D12完畢\n");
}
void Read_Interrupter_Register()
{
uchar temp;
Write_Com(read_interrupter_register);
temp=Read_Data();
Interrupter_register=temp;
Interrupter_register=Interrupter_register<<8;
temp=Read_Data();
Interrupter_register=Interrupter_register|temp;
}
uchar Read_Enp_Last_Status(uchar idata enp)
{
Write_Com(enp+0x40);
return Read_Data();
}
uchar Select_Enp(uchar idata enp)
{
Write_Com(enp);
return Read_Data();
}
uchar Read_Enp_Status(uchar idata enp)
{
Write_Com(enp+0x80);
return Read_Data();
}
void Validate(uchar idata enp)
{
Select_Enp(enp);
Write_Com(0xfa);
}
uchar Read_Enp_Buffer(uchar idata enp,uchar idata len,uchar *pData)
{
uchar length,i;
while(!(Select_Enp(enp)&Enp_Full_Empty));//端點接滿了數據
Write_Com(0xf0); //
Read_Data();
length=Read_Data();
if(length<len)
len=length;
//printf("輸入");
for(i=0;i<len;i++)
{
*(pData+i)=Read_Data();
// printf("%x ",(uint16)*(pData+i));
}
//printf("\n");
return len;
}
void Write_Enp_Buffer(uchar idata enp,uchar idata len,uchar * pData)
{
uchar i;
Select_Enp(enp);
Write_Com(0xf0);
Write_Data(len);
Write_Data(len);
//printf("輸出");
for(i=0;i<len;i++)
{
Write_Data(*(pData+i));
// printf("%x ",(uint16)*(pData+i));
}
//printf("\n");
Validate(enp);
}
void ACK(uchar idata enp)
{
Select_Enp(enp);
Write_Com(0xf1);
}
void Clean_Enp_Buffer(uchar idata enp)
{
Select_Enp(enp);
Write_Com(0xf2);
}
void Get_Device_Descriptor()
{
Device_Request_Buffer.pData=(uchar *)(&Device_Descriptor);
if(Device_Request_Buffer.wLength>sizeof(Device_Descriptor))
Device_Request_Buffer.wLength=sizeof(Device_Descriptor);
}
void Get_Construction_Descriptor()
{
Device_Request_Buffer.pData=(uchar *)(&Con_Inter_Endp_Descriptor);
if(Device_Request_Buffer.wLength>sizeof(Con_Inter_Endp_Descriptor))
Device_Request_Buffer.wLength=sizeof(Con_Inter_Endp_Descriptor);
}
void Set_D12_Address()
{
Set_Address(LSB(Device_Request_Buffer.Device_Request.wValue));
}
void Get_Max_Lun()
{
Device_Request_Buffer.wLength=1;
Device_Request_Buffer.pData=&Max_Lun;
}
void Fail()
{
csw.dCSWSignature=0x55534253;
csw.dCSWTag=cbw.dCBWTag;
csw.dCSWDataResidue=0;
csw.bCSWStatus=1;
Write_Enp_Buffer(5,sizeof(CSW),(uchar *)(&csw));
Soft_Flag.success=0;
Soft_Flag.Enp4=0;
Soft_Flag.Enp5=0;
Soft_Flag.Allow_Main_In=0;
Soft_Flag.Data=0;
}
void Success()
{
csw.dCSWSignature=0x55534253;
csw.dCSWTag=cbw.dCBWTag;
csw.dCSWDataResidue=0;
csw.bCSWStatus=0;
Write_Enp_Buffer(5,sizeof(CSW),(uchar *)(&csw));
Soft_Flag.success=0;
Soft_Flag.Enp4=0;
Soft_Flag.Enp5=0;
Soft_Flag.Allow_Main_In=0;
Soft_Flag.Data=0;
}
void Inquire1()
{
Write_Enp_Buffer(5,36,Inquire);
// wCount=36;
// printf("Inquire!\n");
}
void Read_Format_Cap()
{
Write_Enp_Buffer(5,20,Format_Cap);
// wCount=20;
// printf("Format_Cap\n");
}
void Request_Sense()
{
Write_Enp_Buffer(5,0x12,Sense);
}
void Read_Cap()
{
Write_Enp_Buffer(5,8,Cap);
// wCount=8;
// printf("Read Cap!\n");
}
void Read10()
{
if(cbw.cbwcb.LBA==0)
Device_Request_Buffer.pData=DBR;
Soft_Flag.Data=1;
}
//void Mode_Sence6()
//{
//}
void Enp0()
{
Device_Request_Buffer.wLength=0;
Device_Request_Buffer.wCount=0;
if(!(Read_Enp_Last_Status(0)&Setup_Pack))
{return;}//printf("PC return ACK!");
//接受到的是一個setup包
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -