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

📄 usbhost.c

📁 单片机读写U盘源码 基于51单片机和国产USB芯片CH374
💻 C
📖 第 1 页 / 共 3 页
字号:
/****************************************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 + -