?? d12ci.c
字號(hào):
#include "mainloop.h"
#include "epphal.h"
#include "d12ci.h"
void D12_SetAddressEnable(unsigned char bAddress,
unsigned char bEnable)
{
outportb(D12_COMMAND, 0XD0);
if(bEnable)
bAddress |= 0X80;
outportb(D12_DATA, bAddress);
}
void D12_SetEndpointEnable(unsigned char bEnable)
{
outportb(D12_COMMAND, 0XD8);
if(bEnable)
outportb(D12_DATA, 1);
else
outportb(D12_DATA, 0);
}
void D12_SetMode(unsigned char bConfig,
unsigned char bClkDiv)
{
outportb(D12_COMMAND, 0XF3);
outportb(D12_DATA, bConfig);
outportb(D12_DATA, bClkDiv);
}
void D12_SetDMA(unsigned char bMode)
{
outportb(D12_COMMAND, 0XFB);
outportb(D12_DATA, bMode);
}
unsigned int D12_ReadInterruptRegister(void)
{
unsigned char tmp;
unsigned int IntReg;
outportb(D12_COMMAND, 0XF4);
tmp = inportb(D12_DATA);
IntReg = (unsigned int)inportb(D12_DATA);
IntReg <<= 8;
IntReg |= tmp;
return IntReg;
}
unsigned int D12_ReadChipID(void)
{
unsigned char tmp;
unsigned int ID;
outportb(D12_COMMAND, 0XFD);
tmp = inportb(D12_DATA);
ID = (unsigned int)inportb(D12_DATA);
ID <<= 8;
ID += tmp;
return ID;
}
unsigned char D12_SelectEndpoint(unsigned char bEndp)
{
outportb(D12_COMMAND, bEndp);
return inportb(D12_DATA);
}
unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
{
outportb(D12_COMMAND, 0X40 | bEndp);
return inportb(D12_DATA);
}
unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
{
outportb(D12_COMMAND, 0X80 | bEndp);
return inportb(D12_DATA);
}
void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled)
{
outportb(D12_COMMAND,0X40 | bEndp);
outportb(D12_DATA, bStalled);
}
void D12_SendResume(void)
{
outportb(D12_COMMAND, 0XF6);
}
unsigned short D12_ReadCurrentFrameNumber(void)
{
unsigned int r;
outportb(D12_COMMAND, 0XF5);
r = inportb(D12_DATA);
r <<= 8;
r |= inportb(D12_DATA);
return r;
}
unsigned char D12_ReadEndpoint(unsigned char endp,
unsigned char len,
unsigned char * buf)
{
unsigned char i,j;
outportb(D12_COMMAND, endp); //Select Endpoint
if((inportb(D12_DATA) & D12_FULLEMPTY) == 0) //Get Buffer Status:empty or full
return 0;
outportb(D12_COMMAND, 0X80 | endp); //Get Endpoint Status
i = inportb(D12_DATA);
i &= 0X60;
if(endp == 2)
{
if(i == 0X60)
bEPPflags.bits.ep1buf_full = 1;
else
bEPPflags.bits.ep1buf_full = 0;
}
if(endp == 4)
{
if(i == 0X60)
bEPPflags.bits.ep2buf_full = 1;
else
bEPPflags.bits.ep2buf_full = 0;
}
outportb(D12_COMMAND, 0XF0); //Read Endpoint
j = inportb(D12_DATA);
j = inportb(D12_DATA);
if(j > len)
j = len;
for(i = 0; i < j; i++)
*(buf + i) = inportb(D12_DATA);
outportb(D12_COMMAND, 0XF2); //Clear Buffer
return j;
}
unsigned char D12_WriteEndpoint(unsigned char endp,
unsigned char len,
unsigned char * buf)
{
unsigned char i;
outportb(D12_COMMAND, endp); //Select Endpoint
inportb(D12_DATA);
outportb(D12_COMMAND, 0XF0); //Write Endpoint
outportb(D12_DATA, 0);
outportb(D12_DATA, len);
for(i = 0; i < len; i++)
outportb(D12_DATA, *(buf + i));
outportb(D12_COMMAND, 0XFA); //Enable Buffer
return len;
}
void D12_AcknowledgeEndpoint(unsigned char endp)
{
outportb(D12_COMMAND, endp); //Select Endpoint
outportb(D12_COMMAND, 0XF1); //set ACK
if(endp == 0)
outportb(D12_COMMAND, 0XF2); //Clear Buffer
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -