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

📄 isp1301.c

📁 smartARM2400 USB host例程
💻 C
字号:
/*****************************Copyright(c)****************************************************************
**                    Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                           http://www.embedtools.com
**
**------File Info-----------------------------------------------------------------------------------------
** File Name:            ISP1301.c
** Latest modified Date: 2007-10-19        
** Latest Version:       V1.0    
** Description:          ISP1301.c, ISP1301的相关操作函数
**                       
**--------------------------------------------------------------------------------------------------------
** Created By:           吴隆穗  Longsui Wu
** Created date:         2007-10-19    
** Version:              V1.0    
** Descriptions:         初始版本
**
**--------------------------------------------------------------------------------------------------------
** Modified by:          
** Modified date:        
** Version:             
** Description:          
**                      
**
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
*********************************************************************************************************/
#include "USBHostConfig.h"

USB_INT16U __isp1301VendorIdRead (void);
USB_INT16U __isp1301ProductIdRead (void);

/*********************************************************************************************************
** Function name:       __isp1301Init
** Descriptions:        ISP1301初始化, 此初始化结合开发板而设计
** input parameters:    None
** output parameters:   None
** Returned value:      TRUE : 操作成功, FALSE : 操作失败
*********************************************************************************************************/
USB_BOOL __isp1301Init (void)
{
    if (__isp1301VendorIdRead() != 0x04CC) {
        return FALSE;
    }
    
    if (__isp1301ProductIdRead() != 0x1301) {
        return FALSE;
    }
    __isp1301DPPURRemove();
    __isp1301SetModeDAT_SE0();
    __isp1301SetSpdSuspCtrl();
    __isp1301SetFullSpeed();
    
    return TRUE;
}

/*********************************************************************************************************
** Function name:       __isp1301Init
** Descriptions:        ISP1301初始化, 此初始化结合开发板而设计
** input parameters:    None
** output parameters:   None
** Returned value:      TRUE : 操作成功, FALSE : 操作失败
*********************************************************************************************************/
USB_INT16U __isp1301VendorIdRead (void)
{
    USB_INT16U usId = 0;
    USB_INT8U  ucTmp;
    
    ucTmp = __isp1301Read(__ISP1301_VENDOR_ID + 1);
    usId  = (USB_INT16U)(ucTmp << 8);
    ucTmp = __isp1301Read(__ISP1301_VENDOR_ID);
    usId  = (USB_INT16U)(usId + ucTmp);
    
    return usId;
}

/*********************************************************************************************************
** Function name:       __isp1301Init
** Descriptions:        ISP1301初始化, 此初始化结合开发板而设计
** input parameters:    None
** output parameters:   None
** Returned value:      TRUE : 操作成功, FALSE : 操作失败
*********************************************************************************************************/
USB_INT16U __isp1301ProductIdRead (void)
{
    USB_INT16U usId = 0;
    USB_INT16U ucTmp;
    
    ucTmp = __isp1301Read(__ISP1301_PRODUCT_ID + 1);
    usId  = (USB_INT16U)(ucTmp << 8);
    ucTmp = __isp1301Read(__ISP1301_PRODUCT_ID);
    usId  = (USB_INT16U)(usId + ucTmp);
    
    return usId;
}

/*********************************************************************************************************
** Function name:       __usbI2cWrite
** Descriptions:        通过I2C向ISP1301发送数据
** input parameters:    pusData  待发送数据缓冲区
**                      ucLength 等发送数据长度,通常为3
** output parameters:   None
** Returned value:      TRUE : 操作成功, FALSE : 操作失败
*********************************************************************************************************/
USB_BOOL __usbI2cWrite (const USB_INT16U *pusData, USB_INT8U ucLength)
{
    USB_INT8U i;
    
    for (i = 0; i< ucLength; i++) {
        OTG_I2C_TX = *(pusData + i);
        while (OTG_I2C_STS & __ISP1301_TFF);                            /*  如果I2C发送 FIFO 满,则等待  */
    }
    
    while (!(OTG_I2C_STS & __USB_TDI));                                 /*  等待发送完毕                */
    
    OTG_I2C_STS = __USB_TDI;                                            /*  清除标志位                  */
    
    return TRUE;
}

/*********************************************************************************************************
** Function name:       __isp1301Write
** Descriptions:        通过I2C向ISP1301写数据
** input parameters:    ucReg    寄存器地址
**                      ucRegBit 寄存器中的位
** output parameters:   None
** Returned value:      TRUE : 操作成功, FALSE : 操作失败
*********************************************************************************************************/
USB_BOOL __isp1301Write (USB_INT8U ucReg, USB_INT8U ucRegBit)
{
    USB_INT16U usData[3];
   
    usData[0] = __ISP1301_ADDR_WRITE | __USB_I2C_START;
    usData[1] = ucReg;
    usData[2] = (USB_INT16U)(ucRegBit | __USB_I2C_STOP);
    
    return __usbI2cWrite(usData, 3);
}

/*********************************************************************************************************
** Function name:       __isp1301Read
** Descriptions:        通过I2C读取ISP1301单个寄存器数据
** input parameters:    ucReg    寄存器地址
** output parameters:   None
** Returned value:      读取到的寄存器值
*********************************************************************************************************/
USB_INT8U __isp1301Read (USB_INT8U ucReg)
{
    OTG_I2C_TX = __ISP1301_ADDR_WRITE | __USB_I2C_START;
    OTG_I2C_TX = ucReg;
    OTG_I2C_TX = __ISP1301_ADDR_READ | __USB_I2C_START;
    OTG_I2C_TX = __USB_I2C_STOP;
    
    while (!(OTG_I2C_STS & __USB_TDI));                                 /*  等待发送完毕                */
    OTG_I2C_STS = __USB_TDI;                                            /*  清除标志位                  */
    
    while (OTG_I2C_STS & __ISP1301_RFE);                                /*  等待FIFO不空                */
     
    return OTG_I2C_RX;
}


/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -