コード例 #1
0
ファイル: imu_task.c プロジェクト: wyrdmantis/DroneID
uint32_t I2C_MS5637_Read(uint8_t osr)
{
	uint8_t data[3] = {0,0,0};
	uint8_t adc_read_reg = MS5637_ADC_READ;



	I2C_DRV_MasterSendDataBlocking(FSL_I2CCOM1, &MS5637_config, NULL, 0, &osr, 1, 1000); //initiate a pressure conversion
    switch (osr)
    {
      case D1_OSR_256: OSA_TimeDelay(1); break;  // delay for conversion to complete
      case D1_OSR_512: OSA_TimeDelay(2); break;
      case D1_OSR_1024: OSA_TimeDelay(3); break;
      case D1_OSR_2048: OSA_TimeDelay(5); break;
      case D1_OSR_4096: OSA_TimeDelay(10); break;
      case D1_OSR_8192: OSA_TimeDelay(18); break;
      case D2_OSR_256: OSA_TimeDelay(1); break;
      case D2_OSR_512: OSA_TimeDelay(2); break;
      case D2_OSR_1024: OSA_TimeDelay(3); break;
      case D2_OSR_2048: OSA_TimeDelay(5); break;
      case D2_OSR_4096: OSA_TimeDelay(10); break;
      case D2_OSR_8192: OSA_TimeDelay(18); break;
    }

    I2C_DRV_MasterSendDataBlocking(FSL_I2CCOM1, &MS5637_config, NULL, 0, &adc_read_reg, 1, 1000); //initiate ADC read sequence

    I2C_DRV_MasterReceiveDataBlocking(FSL_I2CCOM1, &MS5637_config, NULL, 0, data, 3, 1000); //Read ADC registers

    return (uint32_t) (((uint32_t) data[0] << 16) | (uint32_t) data[1] << 8 | data[2]); // construct PROM data for return to main program
}
コード例 #2
0
ファイル: main2.c プロジェクト: BlackBull2015/AccuProject
///////////////////////////////////////////////////////////////////////////////
// Accu configuration
///////////////////////////////////////////////////////////////////////////////
void configureAccuAndMag(struct i2c_device_t *device){


	PRINTF("\rConfiguring Accu\n");
	//Stendby On
	I2C_DRV_MasterSendDataBlocking(I2C_INSTANCE_0, &device,ACCU_CTR_1, 1, STN_ON, 1, 1000);
	PRINTF("\rOnStendby\n");
	//Setting Mag reg
	I2C_DRV_MasterSendDataBlocking(I2C_INSTANCE_0, &device,MAG_CTR_1, 1, MAG_REG_1, 1, 1000);
	I2C_DRV_MasterSendDataBlocking(I2C_INSTANCE_0, &device,MAG_CTR_2, 1, MAG_REG_2, 1, 1000);
	//Setting Data
	I2C_DRV_MasterSendDataBlocking(I2C_INSTANCE_0, &device,XYZ_DATA_REG, 1, XYZ_DATA, 1, 1000);
	//Standby off
	I2C_DRV_MasterSendDataBlocking(I2C_INSTANCE_0, &device,ACCU_CTR_1, 1, STN_OFF, 1, 1000);



}
コード例 #3
0
uint8_t I2cMcuWriteBuffer(I2c_t *obj, uint8_t deviceAddr, uint16_t addr, uint8_t *buffer,
        uint16_t size)
{
    /* Adjust address */
    if (obj->I2c->slave.address != deviceAddr) obj->I2c->slave.address = deviceAddr;
    /* Write data */
    if (I2C_DRV_MasterSendDataBlocking(obj->I2c->instance, &obj->I2c->slave, (const uint8_t*) &addr,
            1, buffer, size, 200) != kStatus_I2C_Success) return FAIL;
    return SUCCESS;
}
コード例 #4
0
ファイル: imu_task.c プロジェクト: wyrdmantis/DroneID
void MS5637_Prom_Read(uint16_t *destination)
{
	uint8_t prom_cmd;
	uint8_t temp[2] = {0,0};
	static uint8_t i = 0;

	for(i=0; i<7; ++i)
	{
		prom_cmd = MS5637_PROM | (i<<1);
		I2C_DRV_MasterSendDataBlocking(FSL_I2CCOM1, &MS5637_config, NULL, 0, &prom_cmd, 1, 1000); //Send read prom command
		I2C_DRV_MasterReceiveDataBlocking(FSL_I2CCOM1, &MS5637_config, NULL, 0, temp, 2, 1000); //Read Prom registers
		destination[i] = (uint16_t) (((int16_t)temp[0] << 8) | temp[1]) ;
	}
}
コード例 #5
0
ファイル: imu_task.c プロジェクト: wyrdmantis/DroneID
void MS5637_Reset()
{
	uint8_t reset_cmd = MS5637_RESET;

	I2C_DRV_MasterSendDataBlocking(FSL_I2CCOM1, &MS5637_config, NULL, 0, &reset_cmd, 1, 1000); //Reset MS5637
}
コード例 #6
0
/*!
 * @brief main function
 */
int main(void)
{
    uint8_t i;
    uint8_t index, indexChar, value;
    uint8_t cmdBuff[1] = {0xFF};
    uint8_t sendBuff[1] = {0xFF};       // save data sent to i2c slave
    uint8_t receiveBuff[1] = {0xFF};    // save data received from i2c slave

    i2c_master_state_t master;
    i2c_status_t returnValue;

    i2c_device_t slave =
    {
        .address = 0x3A,
        .baudRate_kbps = 100
    };

    hardware_init();

    dbg_uart_init();

    // Configure I2C pins
    configure_i2c_pins(BOARD_I2C_COMM_INSTANCE);

    OSA_Init();

    GPIO_DRV_Init(0, ledPins);

    // Init I2C module
    I2C_DRV_MasterInit(BOARD_I2C_COMM_INSTANCE, &master);

    printf("\r\n====== I2C Master ======\r\n\r\n");

    OSA_TimeDelay(500);
    LED_toggle_master();
    OSA_TimeDelay(500);
    LED_toggle_master();
    OSA_TimeDelay(500);
    LED_toggle_master();
    OSA_TimeDelay(500);
    LED_toggle_master();

    while (1)
    {
        printf("\r\nI2C Master reads values from I2C Slave sub address:\r\n");
        printf("\r\n------------------------------------");
        printf("\r\nSlave Sub Address   |    Character         ");
        printf("\r\n------------------------------------");
        for (i=Subaddress_Index_0; i<Invalid_Subaddress_Index; i++)
        {
            cmdBuff[0] = i;
            returnValue = I2C_DRV_MasterReceiveDataBlocking(
                                                       BOARD_I2C_COMM_INSTANCE,
                                                       &slave,
                                                       cmdBuff,
                                                       1,
                                                       receiveBuff,
                                                       sizeof(receiveBuff),
                                                       500);
            if (returnValue == kStatus_I2C_Success)
            {
                printf("\r\n[%d]                      %c", i, receiveBuff[0]);
            }
            else
            {
                printf("\r\nI2C communication failed, error code: %d", returnValue);
            }

        }
        printf("\r\n------------------------------------");
        printf("\r\n");

        printf("\r\nPlease input Slave sub address and the new character.");

        do
        {
            printf("\r\nSlave Sub Address: ");
            indexChar = getchar();
            putchar(indexChar);

            printf("\r\nInput New Character: ");
            value = getchar();
            putchar(value);

            printf("\n");

            index = (uint8_t)(indexChar - '0');

            if (index >= Invalid_Subaddress_Index)
            {
                printf("\r\nInvalid Sub Address.");
            }
        } while (index >= Invalid_Subaddress_Index);

        cmdBuff[0]  = index;
        sendBuff[0] = value;

        returnValue = I2C_DRV_MasterSendDataBlocking(
                                                    BOARD_I2C_COMM_INSTANCE,
                                                    &slave,
                                                    cmdBuff,
                                                    1,
                                                    sendBuff,
                                                    sizeof(sendBuff),
                                                    500);
        if (returnValue != kStatus_I2C_Success)
        {
            printf("\r\nI2C communication failed, error code: %d", returnValue);
        }
    }
}