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

📄 usbdevci.c

📁 《USB开发指南——基于LPC2400》配套例程
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************Copyright (c)****************************************************
**                            Guangzhou ZHIYUAN electronics Co.,LTD.
**                                      
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:               usbDevCI.c
** Latest modified Date:    2008-05-10
** Latest Version:          1.1
** Descriptions:            usbDevLPC2400 固件程序命令接口层源文件
**
**--------------------------------------------------------------------------------------------------------
** Created by:              ZhengMingyuan
** Created date:            2005-08-08
** Version:                 1.0
** Descriptions:            The original version
**
**--------------------------------------------------------------------------------------------------------
** Modified by:   			LingGuilin          
** Modified date:    		2008-05-10       
** Version:          		1.1       
** Descriptions:      		修改部分代码以符合代码规范v1.2
**
*********************************************************************************************************/

#include 	"config.h"

/*********************************************************************************************************
  操作USB设备寄存器
*********************************************************************************************************/

/*********************************************************************************************************
** Function name:       __usbDevConfigMaxPaketSize
** Descriptions:        配置 USB Device 端点的最大包大小
** input parameters:    ucEpIndex		物理端点号
**						ulPacketSize	该端点的最大包大小						
** output parameters:	无
** Returned value:      无
*********************************************************************************************************/
void __usbDevConfigMaxPaketSize (INT8U ucEpIndex, INT32U ulPacketSize)
{
	
	USBReEp |= (INT32U)(0x01 << ucEpIndex);								/*  与原来存在的寄存器值做或操作*/
	
	USBEpInd = (INT32U)ucEpIndex;										/*  选择端点 					*/	
	
	USBMaxPSize = (INT32U)ulPacketSize;									/*  写入端点最大包长度值 		*/	
	
	while((USBDevIntSt & EP_RLZEDINT) == 0);							/*  等待处理完成 				*/
	
	USBDevIntClr = EP_RLZEDINT;											/*  清除中断标志位 				*/	
}

/*********************************************************************************************************
  协议引擎命令
*********************************************************************************************************/

/*********************************************************************************************************
** Function name:       __usbDevGetData
** Descriptions:        从USB命令数据寄存器中读取数据
** input parameters:    ulCmd		命令					
** output parameters:	无
** Returned value:      读到的一个字节
*********************************************************************************************************/
INT8U __usbDevGetData (INT32U ulCmd)
{
	
	USBCmdCode = ulCmd;												/*  写入命令字 						*/
	
	while((USBDevIntSt & CDFULL) == 0);								/* 	等待USBDevIntSt寄存器CDFULL位置1*/
	
	USBDevIntClr = CDFULL;											/*  清除CDFULL位 					*/

	return (INT8U)USBCmdData;										/*  读取数据 						*/
}

/*********************************************************************************************************
** Function name:       __usbDevSendCmd
** Descriptions:        向USB命令代码寄存器写入命令
** input parameters:    ulCmd	命令	
**						ulData	数据				
** output parameters:	无
** Returned value:      无
*********************************************************************************************************/
void __usbDevSendCmd (INT32U ulCmd, INT32U ulData)
{

	USBCmdCode = ulCmd;													/*  写入命令字 					*/
	
	while((USBDevIntSt & CCEMPTY) == 0);								/*  等待CCEMPTY 位置1 			*/
	
	USBDevIntClr = CCEMPTY;												/*  清除 CCEMPTY 位				*/
	
	if (ulData != 0) {													/*  如果还有数据阶段 			*/

		USBCmdCode = ulData;											/*  将数据编码写入命令代码寄存器*/
		
		while((USBDevIntSt & CCEMPTY) == 0);							/*  等待CCEMPTY 位置1 			*/
	
		USBDevIntClr = CCEMPTY;											/*  清除 CCEMPTY 位				*/
	}	
}

/*********************************************************************************************************
  LPC2400 USB设备控制器相关命令
*********************************************************************************************************/

/*********************************************************************************************************
** Function name:       __usbDevReadTestRegister
** Descriptions:        读测试寄存器
** input parameters:    无					
** output parameters:	无
** Returned value:      测试寄存器的值
*********************************************************************************************************/
INT16U __usbDevReadTestRegister (void)
{
	INT16U usTmp = 0;

	__usbDevSendCmd(USBCMD_RDTEST_REG,0);	

	usTmp = __usbDevGetData(USBDAT_RDTEST_REG);							/*  读取低字节		 			*/
	usTmp =(INT16U)(usTmp+(INT16U)(__usbDevGetData(USBDAT_RDTEST_REG) << 8));		
	
	return usTmp;
}	

/*********************************************************************************************************
** Function name:       __usbDevSetAddressEnable
** Descriptions:        设置 USB 设备地址
** input parameters:    ucAddress	主机分配的地址值
**						ucEnable	USB设备使能位				
** output parameters:	无
** Returned value:      无
*********************************************************************************************************/
void __usbDevSetAddressEnable (INT8U ucAddress, INT8U ucEnable)
{
	if (ucEnable) {
		ucAddress |= 0x80;	
	}

	__usbDevSendCmd(USBCMD_SET_ADDRESS,((INT32U)(ucAddress << 16)) | USBDAT_SET_ADDRESS);
}	

/*********************************************************************************************************
** Function name:       __usbDevSetEndpointEnable
** Descriptions:        设置 USB 设备
** input parameters:    ucEnable		USB端点使能位									
** output parameters:	无
** Returned value:      无
*********************************************************************************************************/
void __usbDevSetEndpointEnable (INT8U ucEnable)
{
	__usbDevSendCmd(USBCMD_CONFIG_DEV, ((INT32U)(ucEnable << 16)) | USBDAT_CONFIG_DEV);
}

/*********************************************************************************************************
** Function name:       __usbDevSetMode
** Descriptions:        设置模式
** input parameters:    ucSetVal	模式值									
** output parameters:	无
** Returned value:      无
*********************************************************************************************************/
void __usbDevSetMode (INT8U ucSetVal)
{
	__usbDevSendCmd(USBCMD_SET_MODE, ((INT32U)(ucSetVal << 16)) | USBDAT_SET_MODE);
}

/*********************************************************************************************************
** Function name:       __usbDevSetDevStatus
** Descriptions:        设置设备状态
** input parameters:    ucSetvalue	模式值									
** output parameters:	无
** Returned value:      无
*********************************************************************************************************/
void __usbDevSetDevStatus (INT8U ucSetVal)
{
	__usbDevSendCmd(USBCMD_SET_DEVSTATUS, ((INT32U)(ucSetVal << 16)) | USBDAT_SET_DEVSTATUS);
}

/*********************************************************************************************************
** Function name:       __usbDevGetDevStatus
** Descriptions:        获取设备状态
** input parameters:    无									
** output parameters:	无
** Returned value:      无
*********************************************************************************************************/
INT8U __usbDevGetDevStatus (void)
{
	__usbDevSendCmd(USBCMD_GET_DEVSTATUS, 0);
	
	return __usbDevGetData(USBDAT_GET_DEVSTATUS);
}

/*********************************************************************************************************
** Function name:       __usbDevSelectEndpoint
** Descriptions:        选择端点,并获取端点信息
** input parameters:    ucEpIndex	物理端点索引									
** output parameters:	无
** Returned value:      对应端点的信息
*********************************************************************************************************/
INT8U __usbDevSelectEndpoint (INT8U ucEpIndex)
{
	INT32U ulTmp = (INT32U)(ucEpIndex << 16);

	__usbDevSendCmd(ulTmp | USBCMD_SEL_ENDP, 0);

	return __usbDevGetData(ulTmp | USBDAT_SEL_ENDP);
}

/*********************************************************************************************************
** Function name:       __usbDevSelectClrIntEndpoint
** Descriptions:        选择端点,并获取端点信息和清除对应端点的中断
** input parameters:    ucEpIndex	物理端点号									
** output parameters:	无
** Returned value:      对应端点的信息
*********************************************************************************************************/
INT8U __usbDevSelectClrIntEndpoint (INT8U ucEpIndex)
{
	INT8U  i = 0;
	INT32U ulTmp = (INT32U)((ucEpIndex + 0x40) << 16);

⌨️ 快捷键说明

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