打印

EZI2C的读写疑问

[复制链接]
2204|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
thammer|  楼主 | 2015-1-7 12:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 thammer 于 2015-1-7 17:13 编辑

我的应用场景是一片主MCU来访问cypress一款电容传感器capsense的芯片,capsense作为从机,主机发起一个命令,写EZI2C,从机读取EZI2C对应的buffer[0]作出响应,然后从机也往EZI2C里面的buffer[1]写入一个值作为反馈信息给主MCU。

我看了IDE自带的例子程序:
#include <project.h>
#include <header.h>

/* EZI2C slave buffer for write and read */
uint8 ezI2cBuffer[BUFFER_SIZE] = {PACKET_SOP, STS_CMD_FAIL, PACKET_EOP, PACKET_SOP, STS_CMD_FAIL, PACKET_EOP};


/*******************************************************************************
* Function Name: main
********************************************************************************
* Summary:
*  The main function performs the following actions:
*   1. Turns off RGB LED.
*   2. Sets up EZI2C slave buffer.
*   3. Starts I2C slave (SCB mode) component.
*   4. Enables global interrupts.
*   5. Waits for command from the I2C master to control the RGB LED.
*
* Parameters:
*  None
*
* Return:
*  None
*
*******************************************************************************/
void main()
{
    uint8 status = STS_CMD_FAIL;

    RGB_LED_OFF;

    /* Setup buffer and start EZI2C slave (SCB mode) */
    EZI2C_EzI2CSetBuffer1(BUFFER_SIZE, READ_ONLY_OFFSET, ezI2cBuffer);
    EZI2C_Start();

    CyGlobalIntEnable;

    for(;;)
    {
        /* Write complete: parse packet */
        if (0u != (EZI2C_EzI2CGetActivity() & EZI2C_EZI2C_STATUS_WRITE1))
        {
            /* Check start and end of packet markers */
            if ((ezI2cBuffer[PACKET_SOP_POS] == PACKET_SOP) &&
                (ezI2cBuffer[PACKET_EOP_POS] == PACKET_EOP))
            {
                status = ExecuteCommand(ezI2cBuffer[PACKET_CMD_POS]);
            }

            /* Update buffer with status */
            ezI2cBuffer[PACKET_STS_POS] = status;
            status = STS_CMD_FAIL;
        }

        /* Buffer is always available to be read */
    }
}


/*******************************************************************************
* ExecuteCommand(): executes received command and returns status
*******************************************************************************/
uint8 ExecuteCommand(uint32 cmd)
{
    uint8 status;

    status = STS_CMD_DONE;

    /* Execute received command */
    switch (cmd)
    {
        case CMD_SET_RED:
            RGB_LED_ON_RED;
            break;

        case CMD_SET_GREEN:
            RGB_LED_ON_GREEN;
            break;

        case CMD_SET_BLUE:
            RGB_LED_ON_BLUE;
            break;

        case CMD_SET_OFF:
            RGB_LED_OFF;
            break;

        default:
            status = STS_CMD_FAIL;
        break;
    }

    return(status);
}


/* [] END OF FILE */
我的疑问是: 当运行代码
EZI2C_EzI2CSetBuffer1(BUFFER_SIZE, READ_ONLY_OFFSET, ezI2cBuffer);
EZI2C_Start();
后,如果需要更新i2c buffer里面的值,只需要直接对变量数组ezI2cBuffer进行赋值操作就可以了吗?


问题我已经搞清楚了,
EZI2C_EzI2CSetBuffer1(BUFFER_SIZE, READ_ONLY_OFFSET, ezI2cBuffer);

EZI2C_Start();
后,直接操作buffer就可以了。


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

本版积分规则

13

主题

34

帖子

0

粉丝