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

📄 usbecd.c

📁 USB通信测试软件 -- 与S3C44B0的下位机通信的软件. XP驱动------------ PDIUSBD12的PC机驱动程序.USB_Test---------S3C44B0X板的USB固件程
💻 C
📖 第 1 页 / 共 2 页
字号:

/*
*************************************************************************************************************
- 函数名称 : D12_SelectEndpoint(INT8U bEndp)
- 函数说明 : 读取PDIUSBD12端点状态
- 输入参数 : bEndp:端点号       
- 输出参数 : 缓冲区状态,端点状态
*************************************************************************************************************
*/
INT8U D12_ReadEndpointStatus(INT8U bEndp)
{
	INT8U endpointStatus;

	outportc(USB_COMMAND_SELECT_ENDPOINT+bEndp);			//输出读取端点状态命令
	endpointStatus=inportd();								//读取端点状态

	return endpointStatus;
}

/*
*************************************************************************************************************
- 函数名称 : D12_ReadLastTransactionStatus(INT8U bEndp)
- 函数说明 : 读取PDIUSBD12最后处理状态寄存器
- 输入参数 : bEndp:端点号
- 输出参数 : 返回最后处理状态寄存器
*************************************************************************************************************
*/
INT8U D12_ReadLastTransactionStatus(INT8U bEndp)
{
	INT8U tempStatus;

	outportc(USB_COMMAND_READ_LAST_XACTION_STATUS+bEndp);	//输出读取最后处理状态寄存器命令
	tempStatus=inportd();									//读取状态

	return tempStatus;
}

/*
*************************************************************************************************************
- 函数名称 : D12_ReadEndpoint(INT8U bendp,INT8U len,INT8U *buf)
- 函数说明 : 读取PDIUSBD12缓冲区中的数据
- 输入参数 : bEndp:端点号 len:读取数据的长度  buf:存放数据指针
- 输出参数 : 返回读到的字节数
*************************************************************************************************************
*/
INT8U D12_ReadEndpoint(INT8U bendp,INT8U len,INT8U *buf)
{
	INT8U i,j;

	outportc(USB_COMMAND_SELECT_ENDPOINT+bendp);		//输出选择端点命令
	if((inportd() & USB_ENDPOINT_STATUS_FULL_EMPTY)==0)	//如果缓冲区为空
	{
		return 0;
	}

	outportc(USB_COMMAND_READ_BUFFER);					//输出读缓冲区命令
	i=inportd();										//读取保留字节
	j=inportd();										//读取数据字节数目/长度

	if(j>len)											//如果大于要求读的字节数目/长度
		j=len;											//则只读要求的字节数目/长度

	for(i=0;i<j;i++)
		*(buf+i)=inportd();								//读取要求的字节数目/长度

	outportc(USB_COMMAND_CLEAR_BUFFER);				    //清缓冲区,新的信息包才可以重新被接收
	return j;
}
		
/*
*************************************************************************************************************
- 函数名称 : D12_WriteEndpoint(INT8U bendp,INT8U len,INT8U *buf)
- 函数说明 : 向PDIUSBD12缓冲区写中的数据
- 输入参数 : bEndp:端点号 len:要写入数据的长度  buf:数据存放指针
- 输出参数 : 返回写入的字节数                                 
*************************************************************************************************************
*/	
INT8U D12_WriteEndpoint(INT8U bendp,INT8U len,INT8U *buf)
{
	INT8U i;

	outportc(USB_COMMAND_SELECT_ENDPOINT+bendp);		//输出选择端点命令
	i=inportd();										//可选地读取1字节

	outportc(USB_COMMAND_WRITE_BUFFER);					//输出写缓冲区命令
	outportd(0x00);									//写入1个保留字节
	outportd(len);									//写入即将写入的字节数目
	
	for(i=0;i<len;i++)
		outportd(*(buf+i));								//写入要求的字节数目/长度

	outportc(USB_COMMAND_VALIDATE_BUFFER);				    //使缓冲区有效
	return len;
}

/*
*************************************************************************************************************
- 函数名称 : D12_SetEndpointStatus(INT8U bendp,INT8U bStalled) 
- 函数说明 : 设置PDIUSBD12端点状态                         
- 输入参数 : bEndp:端点号 bStalled:要设置的状态1:表示停止  
- 输出参数 : 无
*************************************************************************************************************
*/
void D12_SetEndpointStatus(INT8U bendp,INT8U bStalled) 
{
	outportc(USB_COMMAND_SET_ENDPOINT_STATUS+bendp);			//输出设置端点命令
	outportd(bStalled);											//设置端点状态
}

/*
*************************************************************************************************************
- 函数名称 : D12_AcknowledgeEndpoint(INT8U bendp)
- 函数说明 : PDIUSBD12应答SETUP
- 输入参数 : bEndp:端点号
- 输出参数 : 无
*************************************************************************************************************
*/
void D12_AcknowledgeEndpoint(INT8U bendp)
{
	outportc(USB_COMMAND_SELECT_ENDPOINT+bendp);		//输出选择端点命令
	outportc(USB_COMMAND_ACKNOWLEDGE_ENDPOINT);		//输出应答Setup命令
	if(bendp==0)
		outportc(USB_COMMAND_CLEAR_BUFFER);			//清空该端点缓冲区
}

/*
*************************************************************************************************************
- 函数名称 : D12_SendResume(void)
- 函数说明 : 发送恢复通常用于器件处于挂起状态
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void D12_SendResume(void)
{
	outportc(USB_COMMAND_SEND_RESUME);			//输出发送恢复命令    
}

/*
*************************************************************************************************************
- 函数名称 : D12_ReadCurrentFrameNumber(void)
- 函数说明 : 读当前帧数目
- 输入参数 : 无
- 输出参数 : 帧数
*************************************************************************************************************
*/
INT16U D12_ReadCurrentFrameNumber(void)
{
	INT8U i;
	INT16U j;

	outportc(USB_COMMAND_READ_CURRENT_FRAME_NUMBER);		//输出读取当前帧数目命令
	i=inportd();											//读取帧数目的低字节
	j=inportd();											//读取帧数目的高字节

	j=(j<<8)+i;												//组合为16位

	return j;
}

/*
*************************************************************************************************************
- 函数名称 : D12_init_Unconfig(void)
- 函数说明 : 禁止0 除外的所有端点    
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void D12_init_Unconfig(void)
{
	D12_SetEndpointEnable(0);	//禁止0 除外的所有端点    
}

/*
*************************************************************************************************************
- 函数名称 : D12_init_Config(void)
- 函数说明 : 使能普通/同步端点
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void D12_init_Config(void)
{
	D12_SetEndpointEnable(1);	//使能普通/同步端点
}

/*
*************************************************************************************************************
- 函数名称 : stall_ep0(void) 
- 函数说明 : 使控制端点处于停止状态 
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void stall_ep0(void) 
{ 
 	D12_SetEndpointStatus(USB_ENDPOINT_CONTROL_OUT, USB_SET_ENDPOINT_STALL);    //0,1
 	D12_SetEndpointStatus(USB_ENDPOINT_CONTROL_IN, USB_SET_ENDPOINT_STALL); 	// 1,1
} 

#endif

⌨️ 快捷键说明

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