📄 usbhost.c
字号:
/****************************************Copyright (c)**************************************************
** CH374做主机操作U盘读写程序
** USB主机协议栈
** 接口函数
**
** VBeat 0.1
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: USBhost.C
**创 建 人: 徐亦朱
**最后修改日期: 2007年9月24日
**描 述: 原始版本
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 徐亦朱
** 版 本: VBeat 0.1
** 日 期: 2007年9月24日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007年9月24日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include <stdio.h>
#include <string.h>
#include "HAL.H"
#include "HAL_BASE2.C"
#include "PARA_HW2.C"
#include "USBhost.H"
/*********************************************************************************************************
** 函数名称: Init374Host
** 功能描述: 初始化USB主机
**
** 输 入:
** 输 出:
**
** 全局变量: 无
** 调用模块: 无
** 调试码: 无
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月24日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Init374Host( void )
{
Write374Byte( REG_USB_SETUP, 0x00 );
SetHostUsbAddr( 0x00 );
Write374Byte( REG_USB_H_CTRL, 0x00 );
Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_INTER_FLAG ); // 清所有中断标志
Write374Byte( REG_INTER_EN, BIT_IE_TRANSFER | BIT_IE_DEV_DETECT ); // 允许传输完成中断和USB设备检测中断
Write374Byte( REG_SYS_CTRL, BIT_CTRL_OE_POLAR ); //对于CH374T或者UEN引脚悬空的CH374S必须置BIT_CTRL_OE_POLAR为1
HostSetBusFree( ); // USB总线空闲
}
/*********************************************************************************************************
** 函数名称: HostSetBusFree
** 功能描述: USB总线空闲
**
** 输 入:
** 输 出:
**
** 全局变量: 无
** 调用模块: 无
** 调试码: 无
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月24日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void HostSetBusFree( void )
{
Write374Byte( REG_USB_SETUP, BIT_SETP_HOST_MODE ); //USB总线复位
Write374Byte( REG_USB_SETUP, BIT_SETP_HOST_MODE | BIT_SETP_AUTO_SOF );//USB总线复位,允许SOF
}
/*********************************************************************************************************
** 函数名称: HostSetBusReset
** 功能描述: USB总线复位
**
** 输 入:
** 输 出:
**
** 全局变量: 无
** 调用模块: 无
** 调试码: 无
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月24日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void HostSetBusReset( )
{
SetHostUsbAddr( 0x00 );
Write374Byte( REG_USB_H_CTRL, 0x00 );
Write374Byte( REG_USB_SETUP, M_SET_USB_BUS_RESET( BIT_SETP_HOST_MODE ) ); // USB总线复位
mDelaymS( 20 ); //USB总线复位期间
HostSetBusFree( ); //USB总线空闲
mDelaymS( 1 );
Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_DEV_DETECT | BIT_IF_USB_SUSPEND ); // 清中断标志
}
/*********************************************************************************************************
** 函数名称: HostSetFullSpeed
** 功能描述: 设定全速USB设备运行环境
**
** 输 入:
** 输 出:
**
** 全局变量: 无
** 调用模块: 无
** 调试码: 无
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月24日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void HostSetFullSpeed( void )
{
//全速且发SOF
Write374Byte( REG_USB_SETUP, Read374Byte( REG_USB_SETUP ) & ~ BIT_SETP_USB_SPEED | BIT_SETP_AUTO_SOF );
mDelaymS( 1 );
}
/*********************************************************************************************************
** 函数名称: HostSetLowSpeed
** 功能描述: 设定低速USB设备运行环境
**
** 输 入:
** 输 出:
**
** 全局变量: 无
** 调用模块: 无
** 调试码: 无
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月24日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void HostSetLowSpeed( void )
{
//低速且发SOF
Write374Byte( REG_USB_SETUP, Read374Byte( REG_USB_SETUP ) | BIT_SETP_USB_SPEED | BIT_SETP_AUTO_SOF );
mDelaymS( 1 );
}
/*********************************************************************************************************
** 函数名称: SetHostUsbAddr
** 功能描述: 设置USB主机当前操作的USB设备地址
**
** 输 入: 要设置的设备地址
** 输 出:
**
** 全局变量: 无
** 调用模块: 无
** 调试码: 无
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月24日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void SetHostUsbAddr( UINT8 addr )
{
Write374Byte( REG_USB_ADDR, addr );
}
/*********************************************************************************************************
** 函数名称: HostDetectInterrupt
** 功能描述: 处理USB插拔事件中断
**
** 输 入:
** 输 出:
**
** 全局变量: 无
** 调用模块: 无
** 调试码: 无
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月24日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void HostDetectInterrupt( void )
{
UINT8 s,u;
s = Read374Byte( REG_INTER_FLAG );
if ( s & BIT_IF_DEV_DETECT ) //USB设备插拔事件
{
Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_DEV_DETECT ); // 清中断标志
if( s & BIT_IF_DEV_ATTACH ) //USB设备的当前连接状态:1 = 已经连接/插入
{
u = Read374Byte( REG_USB_SETUP );
if( s & BIT_IF_USB_DX_IN ) //速度匹配,不需要切换速度
{
if ( u & BIT_SETP_USB_SPEED ) //低速USB设备
FlagDeviceStatus = USB_INT_CONNECT_LS;
FlagDeviceStatus = USB_INT_CONNECT; // 全速USB设备
}
else //速度失配,需要切换速度
{
if( u & BIT_SETP_USB_SPEED )
FlagDeviceStatus = USB_INT_CONNECT; // 全速USB设备
FlagDeviceStatus = USB_INT_CONNECT_LS; // 低速USB设备
}
}
else
FlagDeviceStatus = USB_INT_DISCONNECT; //USB设备断开事件
}
}
/*********************************************************************************************************
** 函数名称: mSetControlSetup
** 功能描述: 设置默认控制数据SETUP
**
** 输 入:
** 输 出:
**
** 全局变量: 无
** 调用模块: 无
** 调试码: 无
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月24日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void mSetControlSetup( void )
{
mSaveUsbPid = DEF_USB_PID_SETUP ;
Write374Byte( REG_USB_H_PID, M_MK_HOST_PID_ENDP( DEF_USB_PID_SETUP, mDiskDefaultEndp ) );
Write374Byte( REG_USB_H_CTRL, mSaveDevEndpTog | BIT_HOST_START );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -