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

📄 d12ci.c

📁 固件源代码 C52驱动编程源码学习中
💻 C
字号:
#include "d12ci.h"
#include "mainloop.h"
#include "Epphal.h"

extern EPPFLAGS bEPPflags;

//---------------------------------

//--------------------------
void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
{
	if(bEPPflags.bits.in_isr == 0)
		DISABLE;

	outportcmd(0xD0);
	if(bEnable)
		bAddress |= 0x80;
	outportdata(bAddress);

	if(bEPPflags.bits.in_isr == 0)
		ENABLE;
}

void D12_SetEndpointEnable(unsigned char bEnable)
{
	if(bEPPflags.bits.in_isr == 0)
		DISABLE;

	outportcmd(0xD8);
	if(bEnable)
		outportdata(1);
	else
		outportdata(0);

	if(bEPPflags.bits.in_isr == 0)
		ENABLE;
}

void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv)
{
 	if(bEPPflags.bits.in_isr == 0)
		DISABLE;
 	outportcmd(0xF3);
 	outportdata(bConfig);
 	outportdata(bClkDiv);
 	if(bEPPflags.bits.in_isr == 0)
 		ENABLE;

}

void D12_SetDMA(unsigned char bMode)
{

 	if(bEPPflags.bits.in_isr == 0)
 	 	DISABLE;
 	outportcmd(0xFB);
 	outportdata(bMode);
	if(bEPPflags.bits.in_isr == 0)
		ENABLE;

}
/*
unsigned char D12_GetDMA(void)
{
 outportcmd(0xFB);
 return(inportb());
}
*/
/*
unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
{
	unsigned char c;

	if(bEPPflags.bits.in_isr == 0)
		DISABLE;

	outportcmd(0x80 + bEndp);
	c = inportb();

	if(bEPPflags.bits.in_isr == 0)
		ENABLE;

	return c;
}
*/
void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled)
{
	if(bEPPflags.bits.in_isr == 0)
		DISABLE;

	outportcmd(0x40 + bEndp);
	outportdata(bStalled);

	if(bEPPflags.bits.in_isr == 0)
		ENABLE;
}


/*
void D12_SendResume(void)
{
 outportcmd(0xF6);
}
*/

unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)
{
	unsigned char i;

	if(bEPPflags.bits.in_isr == 0)
		DISABLE;
	//---------------------
	outportcmd(endp);	//选择端点
	inportb();		//读入满/空状态

	outportcmd(0xF0);	//写缓冲区命令
	outportdata(0);
	outportdata(len);

	for(i=0; i<len; i++)
		outportdata(*(buf+i));

	outportcmd(0xFA);	//驶购冲区有效
	
	//--------------------------------
	if(bEPPflags.bits.in_isr == 0)
		ENABLE;

	return len;
}
void D12_AcknowledgeEndpoint(unsigned char endp)
{
	outportcmd(endp);	//选择端点
	outportcmd(0xF1);	//应答设置
	if(endp == 0)
		outportcmd(0xF2);	//缓冲区清零
}
unsigned short D12_ReadInterruptRegister(void)
{
	unsigned char b1;
	unsigned int j;
	//outportb(D12_COMMAND, 0xF4);
	outportcmd(0xF4);
	b1 = inportb();
	j = inportb();
	j <<= 8;
	j += b1;
	return j;
}

unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
{
	//outportb(D12_COMMAND, 0x40 + bEndp);
	outportcmd(0x40 + bEndp);
	return inportb();
}
unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)
{
	unsigned char i, j;

	if(bEPPflags.bits.in_isr == 0)
		DISABLE;
	//--------------------------------
	outportcmd(endp);			//选择端点
	if((inportb() & D12_FULLEMPTY) == 0) {	//如果缓冲区为空,则返回
		if(bEPPflags.bits.in_isr == 0)
			ENABLE;
		return 0;
	}

	outportcmd(0xF0);			//读缓冲区
	j = inportb();
	j = inportb();

	if(j > len)
		j = len;

	for(i=0; i<j; i++)
		*(buf+i) = inportb();

	outportcmd(0xF2);				//缓冲区清空
	//-------------------------------
	if(bEPPflags.bits.in_isr == 0)
		ENABLE;

	return j;
}

unsigned char D12_SelectEndpoint(unsigned char bEndp)
{
	unsigned char c;

	if(bEPPflags.bits.in_isr == 0)
		DISABLE;

	outportcmd(bEndp);
	c = inportb();

	if(bEPPflags.bits.in_isr == 0)
		ENABLE;

	return c;
}

⌨️ 快捷键说明

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