📄 usbdevci.c
字号:
/****************************************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 + -