打印

求教:Psoc3中I2C W/R的寄存器地址写哪?程序如下!

[复制链接]
2928|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
luihua|  楼主 | 2010-8-27 12:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uint8 I2C_MasterWriteBuf(uint8 slaveAddr, uint8 * xferData, uint8 cnt,uint8 mode)
{
    uint8 tmr;
    uint8 errStatus = I2C_MSTR_NO_ERROR;
    /* Determine whether or not to automatically generate a stop condition */
    if(mode & I2C_MODE_NO_STOP)
    {
       /* Do not generate a Stop at the end of transfer */
       I2C_mstrControl |= I2C_MSTR_NO_STOP;
    }
    else  /* Generate a Stop */
    {
       I2C_mstrControl &= ~I2C_MSTR_NO_STOP;
    }
    if((I2C_State == I2C_SM_IDLE) || (I2C_State == I2C_SM_MSTR_HALT))
    {
        errStatus = I2C_MSTR_BUS_TIMEOUT;
        if(I2C_State != I2C_SM_MSTR_HALT)
        {
            for(tmr = I2C_MSTR_TIMEOUT; tmr > 0; tmr--)
            {
                if((I2C_MCSR & I2C_MCSR_BUS_BUSY) == 0)
                {
                   errStatus = I2C_MSTR_NO_ERROR;
                   break;
                }
                CyDelay(1);    /* Wait 1 mSec */
            }
        }
        else   /* Bus halted waiting for restart */
        {
            errStatus = I2C_MSTR_NO_ERROR;
            I2C_mstrStatus &= ~I2C_MSTAT_XFER_HALT;
            CyIntClearPending(I2C_ISR_NUMBER);
        }
        /* If no timeout error, generate start */
        if(errStatus == I2C_MSTR_NO_ERROR)
        {
            slaveAddr = (slaveAddr << 1);
            I2C_State = I2C_SM_MSTR_WR_ADDR;
            I2C_mstrWrBufPtr   = xferData; /* Set buffer pointer */
            I2C_mstrWrBufIndex = 0u;       /* Start buffer at zero */
            I2C_mstrWrBufSize  = cnt;      /* Set buffer size */
            I2C_DATA = slaveAddr;            /* Write address to data reg */
            /* Generate a Start or ReStart depending on flag passed */
            if(mode & I2C_MODE_REPEAT_START)
            {
                I2C_MCSR = I2C_MCSR_RESTART_GEN;  /* Generate a ReStart */
            }
            else
            {
                I2C_MCSR = I2C_MCSR_START_GEN;  /* Generate a Start */
            }
            CyIntEnable(I2C_ISR_NUMBER);   /* IRQ must be enabled for this to work */
            /* Clear write complete flag */
            I2C_mstrStatus &= ~I2C_MSTAT_WR_CMPLT;
        }
    }
    else
    {
       errStatus = I2C_MSTR_SLAVE_BUSY;
    }
    return(errStatus);
}

在I2C的主模式下,只有一个Slave地址,还一个REG_Addr在哪呢?初学不懂,请高人指教。谢谢!!
沙发
luihua|  楼主 | 2010-8-27 12:10 | 只看该作者
这个是函数的功能!!
/*******************************************************************************
* Function Name: I2C_MasterWriteBuf
********************************************************************************
* Summary:
*  This function initiates a write transaction with an addressed slave.  Writes
*  one or more bytes (cnt) to the slave I2C device and gets the data from RAM
*  or ROM array pointed to by the array pointer.  Once this routine is called,
*  the included ISR will handle further data in byte by byte mode.  
*
*
* Parameters:  
*  slaveAddr: 7-bit slave address
*  xferData:  Pointer to data in array.
*  cnt:       Count of data to write.
*  mode:      Mode of operation.  It defines normal start, restart,
*             stop, no-stop, etc.
*
* Return:
*  void
*
* Theory:
*
* Side Effects:
*
*  //:TODO  incorporate mode
*******************************************************************************/

使用特权

评论回复
板凳
luihua|  楼主 | 2010-8-27 17:59 | 只看该作者
程序有问题么? 探讨加QQ:546177352 或者E mail:lhacker_vip@163.com

使用特权

评论回复
地板
jxin| | 2010-8-30 10:04 | 只看该作者
搂主找I2C register address 做什么哪,在TRM可以找到 http://www.cypress.com/?rID=37833

使用特权

评论回复
5
luihua|  楼主 | 2010-8-31 11:15 | 只看该作者
我现在要挂一个I2C的器件上去!器件地址0x03寄存器地址0x20.怎么弄?
4# jxin

使用特权

评论回复
6
xiaosongshu| | 2019-10-30 09:54 | 只看该作者
luihua 发表于 2010-8-31 11:15
我现在要挂一个I2C的器件上去!器件地址0x03寄存器地址0x20.怎么弄?
4# jxin  ...

楼主解决这个问题了没?我也初学遇到这个问题,怎么解决呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

11

帖子

0

粉丝