📄 usbecd.c
字号:
/*
*************************************************************************************************************
- 函数名称 : 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 + -