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

📄 isp1301.c

📁 SmartARM2400系列开发板全套资料
💻 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 "config.h"

INT16U __isp1301VendorIdRead (void);
INT16U __isp1301ProductIdRead (void);

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

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

/*********************************************************************************************************
** Function name:       __usbI2cWrite
** Descriptions:        通过I2C向ISP1301发送数据
** input parameters:    pusData  待发送数据缓冲区
**                      ucLength 等发送数据长度,通常为3
** output parameters:   None
** Returned value:      TRUE : 操作成功, FALSE : 操作失败
*********************************************************************************************************/
BOOLEAN __usbI2cWrite (const INT16U *pusData, INT8U ucLength)
{
    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 : 操作失败
*********************************************************************************************************/
BOOLEAN __isp1301Write (INT8U ucReg, INT8U ucRegBit)
{
    INT16U usData[3];
   
    usData[0] = __ISP1301_ADDR_WRITE | __USB_I2C_START;
    usData[1] = ucReg;
    usData[2] = (INT16U)(ucRegBit | __USB_I2C_STOP);
    
    return __usbI2cWrite(usData, 3);
}

/*********************************************************************************************************
** Function name:       __isp1301Read
** Descriptions:        通过I2C读取ISP1301单个寄存器数据
** input parameters:    ucReg    寄存器地址
** output parameters:   None
** Returned value:      读取到的寄存器值
*********************************************************************************************************/
INT8U __isp1301Read (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;
}

/*********************************************************************************************************
** Function name:       __isp1301MultiRead
** Descriptions:        通过I2C读取ISP1301多个寄存器数据
** input parameters:    ucReg     寄存器地址
**                      ucLen     要读取的寄存器个数
** output parameters:   pucRegDat 读取到的寄存器值
** Returned value:      TRUE : 操作成功, FALSE : 操作失败
*********************************************************************************************************/
BOOLEAN __isp1301MultiRead (INT8U ucReg, INT8U *pucRegDat, INT8U ucLen)
{
    INT8S i = (INT8S)ucLen;
    
    OTG_I2C_TX = __ISP1301_ADDR_WRITE | __USB_I2C_START;
    OTG_I2C_TX = ucReg;
    OTG_I2C_TX = __ISP1301_ADDR_READ | __USB_I2C_START;
    
    while (--i) {
        
        OTG_I2C_TX = 0x00;
        while (!(OTG_I2C_STS & __USB_TDI));                             /*  等待发送完毕                */
        OTG_I2C_STS = __USB_TDI;                                        /*  清除标志位                  */
        
        while (OTG_I2C_STS & __ISP1301_RFE);                            /*  等待FIFO不空                */
         
        *pucRegDat++ = OTG_I2C_RX;
    }
    
    OTG_I2C_TX = __USB_I2C_STOP;
    while (!(OTG_I2C_STS & __USB_TDI));                                 /*  等待发送完毕                */
    OTG_I2C_STS = __USB_TDI;                                            /*  清除标志位                  */
    
    while (OTG_I2C_STS & __ISP1301_RFE);                                /*  等待FIFO不空                */
     
    *pucRegDat = OTG_I2C_RX;
    
    return TRUE;
}

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

⌨️ 快捷键说明

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