⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d12ci.c

📁 基于usb开发板的hid键盘,使用者可根据此代码编写自己的HID设备
💻 C
字号:
//D12CI.c
#include "common.h"
#include "D12CI.h"
#include "mainloop.h"

extern EPPFLAGS bEPPflags;

void outportb(unsigned int Addr,unsigned char Data)
{
	*((unsigned char xdata *)Addr) = Data;
}

unsigned char inportb(unsigned int Addr)
{	
	return *((unsigned char xdata *)Addr);
}

void D12_SetAddressEnable(uchar bAddress,uchar bEnable)
{
	outportb(D12_COMMAND,0xd0);
	if(bEnable)
		bAddress |= 0x80;
	outportb(D12_DATA,bAddress);
}

void D12_SetEndpointEnable(uchar bEnable)
{
	outportb(D12_COMMAND,0xd8);
	if(bEnable)
		outportb(D12_DATA,1);
	else
		outportb(D12_DATA,0);
}

void D12_SetMode(uchar bConfig,uchar bClkDiv)
{
	outportb(D12_COMMAND,0xf3);
	outportb(D12_DATA,bConfig);
	outportb(D12_DATA,bClkDiv);
}

void D12_SetDMA(uchar bMode)
{
	outportb(D12_COMMAND,0xfb);
	outportb(D12_DATA,bMode);
}

ushort D12_ReadInterruptRegister(void)
{
	uchar b1;
	uint j;
	outportb(D12_COMMAND,0xf4);
	b1 = inportb(D12_DATA);
	j = inportb(D12_DATA);
	j <<= 8;
	j += b1;
	return j;
}

uchar D12_SelectEndpoint(uchar bEndp)
{
	uchar c;
	outportb(D12_COMMAND,bEndp);
	c = inportb(D12_DATA);
	return c;
}

uchar D12_ReadLastTransactionStatus(uchar bEndp)
{
	outportb(D12_COMMAND,0x40+bEndp);
	return inportb(D12_DATA);
}

void D12_SetEndpointStatus(uchar bEndp,uchar bStalled)
{
	outportb(D12_COMMAND,0x40+bEndp);
	outportb(D12_DATA,bStalled);
}

uchar D12_ReadEndpointStatus(uchar bEndp)
{
	outportb(D12_COMMAND,0x80+bEndp);
	return inportb(D12_DATA);
}

void D12_SendResume(void)
{
	outportb(D12_COMMAND,0xf6);
}

ushort D12_ReadCurrentFrameNumber(void)
{
	ushort i,j;
	outportb(D12_COMMAND,0xf5);
	i = inportb(D12_DATA);
	j = inportb(D12_DATA);
	i += (j<<8);
	return i;
}

uchar D12_ReadEndpoint(uchar endp,uchar len,uchar * buf)
{
	uchar i,j;
	outportb(D12_COMMAND,endp);
	if((inportb(D12_DATA)&0x01)==0)
		return 0;
	outportb(D12_COMMAND,0x80+endp);
	i = inportb(D12_DATA);
	i = 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);
	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);
	return j;
}

uchar D12_WriteEndpoint(uchar endp,uchar len ,uchar * buf)
{
	uchar i;
	outportb(D12_COMMAND,endp);
	inportb(D12_DATA);
	outportb(D12_COMMAND,0xf0);
	outportb(D12_DATA,0);
	outportb(D12_DATA,len);
	for(i = 0;i<len;i++)
		outportb(D12_DATA,*(buf+i));
	outportb(D12_COMMAND,0xfa);
	return len;
}

void D12_AcknowledgeEnppoint(uchar endp)
{
	outportb(D12_COMMAND,endp);
	outportb(D12_COMMAND,0xf1);
	if(endp == 0)
		outportb(D12_COMMAND,0xf2);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -