Пример #1
0
UInt32 getBufferFromI2C0(UInt8 addr, UInt8 *buffer, UInt32 len)
{
    UInt32 i;
    UInt8 status;
    UInt8 *ptr;

    ptr = buffer;
    if( i2c0_start()!=I2C_OK)
    {
        //DebugPrintf("GetBufferFromI2C0.i2c0_start I2C_ERROR\r\n");
        //i2c0_stop();
        return I2C_ERROR;
    }

    addr = addr|1;
    while( i2c0_write(addr) == I2C_BUSY);

    for(i=0;i<len;i++)
    {
        while(1)
        {
            GET_I2C_STATUS();

            /*
             * SLA+R transmitted, ACK received or
             * SLA+R transmitted, ACK not received
             * data byte received in master mode, ACK transmitted
             */
            if((status == 0x40 ) || (status == 0x48 ) || (status == 0x50 ))
            {
                if(i==len-1)
                {
                        SEND_NACK();
                }
                else
                {
                        SEND_ACK();
                }

                while(i2c0_read(ptr)==I2C_EMPTY);

                ptr++;
                break;

            }
            else if(status != 0xf8 )
            {
                i2c0_stop();
                //DebugPrintf("GetBufferFromI2C0 I2C_ERROR\r\n");
                return I2C_ERROR;
            }

        }//while(1)
    }//for

    i2c0_stop();

    return I2C_OK;
}
Пример #2
0
void strain_amp_6ch_test_code_blocking(void)
{
	while(1)
	{
		i2c0_read(I2C_SLAVE_ADDR_6CH, MEM_R_CH1_H, ext_strain_bytes, 12);
		strain_6ch_bytes_to_words(ext_strain_bytes);
		CyDelay(100);
	}
}
Пример #3
0
/*!
   Receive from appointed slave with sending firstly, and with stop operation after sending.
   start-slave-data(w)-...-stop-start-slave-data(r)-...-stop
  */
static RET_CODE i2c_jazz_std_read(lld_i2c_t *p_lld,
                                  u8 slv_addr,
                                  u8 *p_buf,
                                  u32 wlen,
                                  u32 rlen,
                                  u32 param)
{

    ////OS_PRINTF(" i2c_jazz_std_read  1111 %d %s\n",__LINE__, __FILE__);

    i2c_ctrller_jazz_priv_t *p_priv = (i2c_ctrller_jazz_priv_t *)p_lld->p_priv;
    u8 times = 0;

    i2c_jazz_pinmux(p_priv->i2c_id);
    if(wlen == 0)
    {
        return i2c0_read(p_lld, slv_addr, p_buf, rlen);
    }
    ////OS_PRINTF(" i2c_jazz_std_read  1111 %d %s\n",__LINE__, __FILE__);

    for(times = 0; times < 3; times++)
    {
        if(SUCCESS != i2c0_write(p_lld, slv_addr, p_buf, wlen))
        {
            ////OS_PRINTF(" i2c_jazz_std_read  1111 %d %s\n",__LINE__, __FILE__);

            return ERR_HARDWARE;
        }
        ////OS_PRINTF(" i2c_jazz_std_read  1111 %d %s\n",__LINE__, __FILE__);

        if(SUCCESS != i2c0_read_no_stop(p_priv->i2c_id, slv_addr, p_buf, rlen))
        {
            i2c0_fatal_err_restore(p_priv->i2c_id, p_priv->i2c_clk);
            continue;
        }  ////OS_PRINTF(" i2c_jazz_std_read  1111 %d %s\n",__LINE__, __FILE__);


        if(SUCCESS != i2c0_stop_retry(p_priv->i2c_id, 3))
        {
            i2c0_fatal_err_restore(p_priv->i2c_id, p_priv->i2c_clk);
            continue;
        }

        break;
    }
    ////OS_PRINTF(" i2c_jazz_std_read  1111 %d %s\n",__LINE__, __FILE__);

    if(times == 3)
    {
        return ERR_HARDWARE;
    }
    ////OS_PRINTF(" i2c_jazz_std_read  1111 %d %s\n",__LINE__, __FILE__);
    // Todo: fix me! control reaches end of non-void function
    return SUCCESS;
}
Пример #4
0
void as5048b_test_code_blocking(void)
{
	while(1)
	{
		i2c0_read(I2C_ADDR_AS5048B, AD5048B_REG_AGC, as5048b_bytes, 6);
		
		as5048b_agc = as5048b_bytes[0];
		as5048b_diag = as5048b_bytes[1] & 0x0F;
		as5048b_mag = (as5048b_bytes[2]<<6) + (as5048b_bytes[3]&0x3F); 
		as5048b_angle = (as5048b_bytes[4]<<6) + (as5048b_bytes[5]&0x3F);
		
		CyDelay(100);
	}
}
Пример #5
0
/*!
   Implement i2c sequential read function.
   start-slave-data(w)-...-start-slave-data(r)-...-stop
  */
static RET_CODE i2c_jazz_seq_read(lld_i2c_t *p_lld,
                                  u8 slv_addr,
                                  u8 *p_buf,
                                  u32 wlen,
                                  u32 rlen,
                                  u32 param)
{
    i2c_ctrller_jazz_priv_t *p_priv = (i2c_ctrller_jazz_priv_t *)p_lld->p_priv;
    u8 times = 0;

    i2c_jazz_pinmux(p_priv->i2c_id);
    if(wlen == 0)
    {
        return i2c0_read(p_lld, slv_addr, p_buf, rlen);
    }

    for(times = 0; times < 3; times++)
    {
        if(SUCCESS != i2c0_write_no_stop(p_priv->i2c_id, slv_addr, p_buf, wlen))
        {
            i2c0_fatal_err_restore(p_priv->i2c_id, p_priv->i2c_clk);
            continue;
        }

        if(SUCCESS != i2c0_read_no_stop(p_priv->i2c_id, slv_addr, p_buf, rlen))
        {
            i2c0_fatal_err_restore(p_priv->i2c_id, p_priv->i2c_clk);
            continue;
        }

        if(SUCCESS != i2c0_stop_retry(p_priv->i2c_id, 3))
        {
            i2c0_fatal_err_restore(p_priv->i2c_id, p_priv->i2c_clk);
            continue;
        }

        break;
    }

    if(times == 3)
    {
        return ERR_HARDWARE;
    }

    return SUCCESS;
}
Пример #6
0
//Get latest readings from the AS5048B position sensor
void get_as5048b_position(void) 
{
	i2c0_read(I2C_ADDR_AS5048B, AD5048B_REG_ANGLE_H, as5048b_bytes, 2);
}
Пример #7
0
//Get latest readings from the 6-ch strain sensor
void get_6ch_strain(void) 
{
	i2c0_read(I2C_SLAVE_ADDR_6CH, MEM_R_CH1_H, ext_strain_bytes, 12);
	//strain_6ch_bytes_to_words();
}