?? usbhost.c
字號:
/****************************************Copyright (c)**************************************************
** CH374做主機操作U盤讀寫程序
** USB主機協(xié)議棧
** 接口函數(shù)
**
** VBeat 0.1
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: USBhost.C
**創(chuàng) 建 人: 徐亦朱
**最后修改日期: 2007年9月24日
**描 述: 原始版本
**
**--------------歷史版本信息----------------------------------------------------------------------------
** 創(chuàng)建人: 徐亦朱
** 版 本: 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"
/*********************************************************************************************************
** 函數(shù)名稱: 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總線空閑
}
/*********************************************************************************************************
** 函數(shù)名稱: 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
}
/*********************************************************************************************************
** 函數(shù)名稱: 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 ); // 清中斷標志
}
/*********************************************************************************************************
** 函數(shù)名稱: HostSetFullSpeed
** 功能描述: 設定全速USB設備運行環(huán)境
**
** 輸 入:
** 輸 出:
**
** 全局變量: 無
** 調用模塊: 無
** 調試碼: 無
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月24日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void HostSetFullSpeed( void )
{
//全速且發(fā)SOF
Write374Byte( REG_USB_SETUP, Read374Byte( REG_USB_SETUP ) & ~ BIT_SETP_USB_SPEED | BIT_SETP_AUTO_SOF );
mDelaymS( 1 );
}
/*********************************************************************************************************
** 函數(shù)名稱: HostSetLowSpeed
** 功能描述: 設定低速USB設備運行環(huán)境
**
** 輸 入:
** 輸 出:
**
** 全局變量: 無
** 調用模塊: 無
** 調試碼: 無
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月24日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void HostSetLowSpeed( void )
{
//低速且發(fā)SOF
Write374Byte( REG_USB_SETUP, Read374Byte( REG_USB_SETUP ) | BIT_SETP_USB_SPEED | BIT_SETP_AUTO_SOF );
mDelaymS( 1 );
}
/*********************************************************************************************************
** 函數(shù)名稱: SetHostUsbAddr
** 功能描述: 設置USB主機當前操作的USB設備地址
**
** 輸 入: 要設置的設備地址
** 輸 出:
**
** 全局變量: 無
** 調用模塊: 無
** 調試碼: 無
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月24日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void SetHostUsbAddr( UINT8 addr )
{
Write374Byte( REG_USB_ADDR, addr );
}
/*********************************************************************************************************
** 函數(shù)名稱: 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設備的當前連接狀態(tài):1 = 已經(jīng)連接/插入
{
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設備斷開事件
}
}
/*********************************************************************************************************
** 函數(shù)名稱: mSetControlSetup
** 功能描述: 設置默認控制數(shù)據(jù)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 + -