📄 isp1301.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 + -