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

📄 d12ci.c

📁 单片机控制飞利蒲PDIUSBD12芯片与PC机实现USB1.1通信。
💻 C
字号:
/*
   //*************************************************************************
   //
   //                  		ZLGMCU
   //				www.zlgmcu.com
   // File Name:	D12ci.C
   // Revision:		0.2(2002-04-08)
   // Author:		Liu Ying Bin
   // Use library:  	USB51S.LIB
   // Note:			USB51S.LIB不带DMA控制功能
   //*************************************************************************
   */
#include <reg51.h>                /* special function register declarations   */

#include "mainloop.h"
#include "isr.h"
#include "d12ci.h"
#include "absacc.h"

extern EPPFLAGS bEPPflags;

#define D12_COMMAND		XBYTE[0x7003]	//right
#define D12_DATA		XBYTE[0x7002]

//test for cpld
//#define D12_COMMAND		XBYTE[0x4001]
//#define D12_DATA		XBYTE[0x4000]


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

	D12_COMMAND = 0xD0;
	
	if(bEnable)
		bAddress |= 0x80;
	D12_DATA = bAddress;

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

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

	D12_COMMAND = 0xD8;
	if(bEnable)
		D12_DATA = 1;
	else
		D12_DATA = 0;

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

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

	D12_COMMAND = 0xF3;
	D12_DATA = bConfig;
	D12_DATA = bClkDiv;

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

void D12_SetDMA(unsigned char bMode)
{
	if(bEPPflags.bits.in_isr == 0)
		DISABLE;

	D12_COMMAND = 0xFB;
	D12_DATA = bMode;

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

unsigned short D12_ReadInterruptRegister(void)
{
	unsigned char b1;
	unsigned int j;

	D12_COMMAND = 0xF4;
	b1 = D12_DATA;
	j = D12_DATA;

	j <<= 8;
	j += b1;

	return j;
}

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

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

	D12_COMMAND = bEndp;
	c = D12_DATA;

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

	return c;
}

unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
{
	D12_COMMAND = 0x40 + bEndp;
	return D12_DATA;
}

/*
unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
{
	unsigned char c;

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

	D12_COMMAND = 0x40 + bEndp;
	c = D12_DATA;

	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;

	D12_COMMAND = 0x40 + bEndp;
	D12_DATA = bStalled;

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

void D12_SendResume(void)
{
	D12_COMMAND = 0xF6;
}

unsigned short D12_ReadCurrentFrameNumber(void)
{
	unsigned short i,j;

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

	D12_COMMAND = 0xF5;
	i = D12_DATA;
	j = D12_DATA;

	i += (j<<8);

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

	return i;
}

/*
unsigned short D12_ReadChipID(void)
{
	unsigned short i,j;

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

	outportb(portbase+D12_COMMAND, 0xFD);
	i=inportb(portbase+D12_DATA);
	j=inportb(portbase+D12_DATA);
	i += (j<<8);

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

	return i;
}
*/

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

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

	D12_COMMAND = endp;
	i=D12_DATA;
	if((i & D12_FULLEMPTY) == 0) {
		if(bEPPflags.bits.in_isr == 0)
			ENABLE;
		return 0;
	}

	D12_COMMAND = 0xF0;
	j = D12_DATA;
	j = D12_DATA;

	if(j > len)
		j = len;

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

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

	return j;
}

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

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

	D12_COMMAND = endp;
	D12_DATA;

	D12_COMMAND = 0xF0;
	D12_DATA = 0;
	D12_DATA = len;

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

	D12_COMMAND = 0xFA;

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

	return len;
}

void D12_AcknowledgeEndpoint(unsigned char endp)
{
	D12_COMMAND = endp;
	D12_COMMAND = 0xF1;
	if(endp == 0)
		D12_COMMAND = 0xF2;
}


⌨️ 快捷键说明

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