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

📄 d12ci.c

📁 该软件为在sunplus的61单片机上实现的mp3播放器.里面有完整的源代码.
💻 C
字号:
//============================================================================//
// 文件名:    D12CI.c
// 描  述:   PDIUSBD12命令接口
// 日  期:   2003/04/03
//=============================================================================//
#include "D12CI.h"
#include "..\\usb\\chap9.h"  
#define D12_FULLEMPTY			0x01
extern EPPFLAGS bEPPflags;
extern CONTROL_TRANSFERS ControlData;
extern void F_InitWriteD12(void);
extern void F_InitReadD12(void);
extern void F_WriteCmdToD12(unsigned int Command);
extern void F_WriteDataToD12(unsigned int Data);
extern unsigned int F_ReadD12(void);
void F_Disconnect_USB(void);
void F_Connect_USB(void);
void F_Reconnect_USB(void);

//void F_D12_SendResume(void);
void F_D12_SetAddressEnable(unsigned int bAddress, unsigned int bEnable)
{
	F_InitWriteD12();
	F_WriteCmdToD12(0x00D0);
	if(bEnable)
		bAddress |= 0x80;
    F_WriteDataToD12(bAddress);
}

void F_D12_SetEndpointEnable(unsigned int bEnable)
{
 	F_InitWriteD12();
	F_WriteCmdToD12(0x00D8);
	if(bEnable)
		F_WriteDataToD12(0x0001);
	else
	    F_WriteDataToD12(0x0001);
}
void F_D12_SetMode(unsigned int bConfig, unsigned int bClkDiv)
{
 	F_InitWriteD12();
	F_WriteCmdToD12(0x00F3);
 	F_WriteDataToD12(bConfig);
 	F_WriteDataToD12(bClkDiv);
}
void F_D12_SetDMA(unsigned int bMode)
{
	F_InitWriteD12();
	F_WriteCmdToD12(0x00FB);
 	F_WriteDataToD12(bMode);
}
void F_D12_SetEndpointStatus(unsigned int bEndp, unsigned int bStalled)
{
	F_InitWriteD12();
	F_WriteCmdToD12(0x40 + bEndp);
    F_WriteDataToD12(bStalled);

}
unsigned int F_D12_WriteEndpoint(unsigned int endp, unsigned int len, unsigned int * buf)
{
	unsigned int i;
	F_InitWriteD12();
	F_WriteCmdToD12(endp);
    F_InitReadD12();
	F_ReadD12();
	F_InitWriteD12();
	F_WriteCmdToD12(0x00F0);
	F_WriteDataToD12(0x0000);
	F_WriteDataToD12(len);
	for(i=0; i<len; i++)
	{
		F_WriteDataToD12(*(buf+i));
	}
	F_WriteCmdToD12(0x00FA);
	return len;
}
void F_D12_AcknowledgeEndpoint(unsigned int endp)
{
	F_InitWriteD12();
	F_WriteCmdToD12(endp);
	F_WriteCmdToD12(0x00F1);
	if(endp == 0)
		F_WriteCmdToD12(0x00F2);
}
unsigned int F_D12_ReadInterruptRegister(void)
{
	unsigned int b1,j;
	F_InitWriteD12();
	F_WriteCmdToD12(0x00F4);
	F_InitReadD12();
	b1 = F_ReadD12();
    j = F_ReadD12();
	j <<= 8;
	j += b1;
	return j;
}
unsigned int F_D12_ReadLastTransactionStatus(unsigned int bEndp)
{
	F_InitWriteD12();
	F_WriteCmdToD12(0x40 + bEndp);
	F_InitReadD12();
	return F_ReadD12();
}
unsigned int F_D12_ReadEndpoint(unsigned int endp, unsigned int len, unsigned int * buf)
{
	unsigned int i, j;
	F_InitWriteD12();
	F_WriteCmdToD12(endp);
	F_InitReadD12();
	if((F_ReadD12() & D12_FULLEMPTY) == 0)
	{	
		return 0;
	}
	F_InitWriteD12();
	F_WriteCmdToD12(0x00F0);
	F_InitReadD12();
	j = F_ReadD12();
	j = F_ReadD12();
	if(j > len)
		j = len;
	for(i=0; i<j; i++)
		*(buf+i) = F_ReadD12();
	F_InitWriteD12();
	F_WriteCmdToD12(0x00F2);
	return j;
}
unsigned int F_D12_SelectEndpoint(unsigned int bEndp)
{
	unsigned int c;
	F_InitWriteD12();
	F_WriteCmdToD12(bEndp);
	F_InitReadD12();
	c = F_ReadD12();
	return c;
}
void F_Disconnect_USB(void)
{
	F_D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_4M);
}
void F_Connect_USB(void)
{          
	F_D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE); 
	F_D12_SetMode(D12_NOLAZYCLOCK | D12_SOFTCONNECT,D12_SETTOONE | D12_CLOCK_4M );
}
void F_Reconnect_USB(void)
{
	int i,j;
	F_Disconnect_USB();
 	for(i=0;i<=500;i++)
    {
		for(j=0;j<1000;j++)
		{
         
		};
	};
	F_Connect_USB();
}

unsigned int F_D12_ReadEndpointAndClrD12Int(unsigned int endp, unsigned int len, unsigned int * buf)
{
	unsigned int I_DataLength=0,i=0;
	F_InitWriteD12();
	F_WriteCmdToD12(endp);
	F_InitReadD12();
	if((F_ReadD12() & D12_FULLEMPTY) == 0)
	{	
		return 0;
	}
	F_InitWriteD12();
	F_WriteCmdToD12(0x00F0);
	F_InitReadD12();
	I_DataLength = F_ReadD12();
	I_DataLength = F_ReadD12();
	if(I_DataLength > len)
		I_DataLength = len;
//	UartSendData(0x22);	
	for(i=0; i<I_DataLength; i++)
		{
		*(buf+i) = F_ReadD12();
//		UartSendData(*(buf+i));
		}
	F_InitWriteD12();
	F_WriteCmdToD12(0x00F2);
	//clear d12 interrupt
	F_D12_ReadLastTransactionStatus(endp);
	return I_DataLength;
}
unsigned int F_D12_WriteEndpointAndClrD12Int(unsigned int endp, unsigned int len, unsigned int * buf)
{
	unsigned int i;
	F_InitWriteD12();
	F_WriteCmdToD12(endp);
    F_InitReadD12();
	F_ReadD12();
	F_InitWriteD12();
	F_WriteCmdToD12(0x00F0);
	F_WriteDataToD12(0x0000);
	F_WriteDataToD12(len);
	for(i=0; i<len; i++)
	{
		F_WriteDataToD12(*(buf+i));
	}
	F_WriteCmdToD12(0x00FA);
	//clear d12 interrupt
	F_D12_ReadLastTransactionStatus(endp);	
	return len;
}

⌨️ 快捷键说明

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