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

📄 kd12ci.c

📁 usb 的固件编程序源码
💻 C
字号:
#include "kd12ci.h"
#include "kmain.h"
#include "khal.h"

extern EPPFLAGS bEPPflags;

//---------------------------------
void outportcmd(unsigned char value)
{
/*
 //     	 unsigned char xdata *ext_address;
//	     ext_address=D12_command;
//	     *ext_address = val;              //   write cycle
  *((INT8 xdata *)D12_command) = val;
*/
	*((unsigned char xdata *)D12_COMMAND)=value;	
}
void outportdata(unsigned char value)
{
   *((unsigned char xdata *)D12_DATA)=value;	
}

unsigned char inportb(void)
{
/*
 //  	     unsigned char c;
//         unsigned char xdata *ext_address;
//         ext_address=(D12_data&0xff00);
//         c = *ext_address ;              //   read cycle
//       	 return c;
 return *((INT8 xdata *)D12_data);
 */
 return *((unsigned xdata *)D12_DATA);
}
//--------------------------
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 + -