コード例 #1
0
void accel_disable_int(void)
{
	uint8_t i2cbuffer[4];

	//Initialize I2C master
	i2c_init(I2C_SCL_RATIO(1), i2cbuffer, 4);
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG3, 0x00); //turn off FIFO interrupt
}
コード例 #2
0
void accel_disable_temp(void)
{
		uint8_t i2cbuffer[4];
	
		//QPRINTF("Disabling Temp Sensor...");
	
		//Initialize I2C master
    i2c_init(I2C_SCL_RATIO(1), i2cbuffer, 4);
	
		I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_TEMP_CFG_REG, 0x00); //disable ADC and Temp sensor

	//	QPRINTF("Done\r\n");
}
コード例 #3
0
//enable accelerometer for single sample, no interrupt
void accel_enable_sample(void)
{
	uint8_t i2cbuffer[4];
	
	accel_shutdown(); //reset accel

	//Initialize I2C master
	i2c_init(I2C_SCL_RATIO(1), i2cbuffer, 4);
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG1, LIS3DH_50HZ | LIS3DH_LP | LIS3DH_ENX | LIS3DH_ENY | LIS3DH_ENZ);
	
	//original stuff for init below:
	//I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG1, LIS3DH_50HZ | LIS3DH_LP | LIS3DH_ENX | LIS3DH_ENY | LIS3DH_ENZ);
}
コード例 #4
0
void accel_get_X_samples(int8_t *xdat, uint8_t samps)
{
	uint8_t i2cbuffer[3];
	int i;

	//Initialize I2C master
	i2c_init(I2C_SCL_RATIO(1), i2cbuffer, 3);
	for(i = 0; i< 10000; i++);//wait for i2c clock to lock
	
	for(i = 0; i< samps; i++)
	{
		xdat[i] = (int8_t)(((uint8_t)(I2C_BYTE_READ(LIS3DH_ADDR, LIS3DH_OUT_X_H))));
	}
}
コード例 #5
0
 //get accelerometer samples, mask can choose which axis are requested (8b000_0zyx)
void accel_get_sample(int8_t *xdat, int8_t *ydat, int8_t *zdat, uint8_t mask)
{
	uint8_t i2cbuffer[3];

	//Initialize I2C master
	i2c_init(I2C_SCL_RATIO(1), i2cbuffer, 3);
	//for(int i = 0; i< 10000; i++){}
	if((mask & 0x01) > 0) //send x axis
		*xdat = (int8_t)(((uint8_t)(I2C_BYTE_READ(LIS3DH_ADDR, LIS3DH_OUT_X_H))));
	if((mask & 0x02) > 0) //send y axis
		*ydat = (int8_t)(((uint8_t)(I2C_BYTE_READ(LIS3DH_ADDR, LIS3DH_OUT_Y_H))));
	if((mask & 0x04) > 0) //send z axis
		*zdat = (int8_t)(((uint8_t)(I2C_BYTE_READ(LIS3DH_ADDR, LIS3DH_OUT_Z_H))));
}
コード例 #6
0
void accel_enable_temp(void)
{
		uint8_t i2cbuffer[4];
	
		//QPRINTF("Configuring Temp Sensor...");
	
		//Initialize I2C master
    i2c_init(I2C_SCL_RATIO(1), i2cbuffer, 4);
	
		I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_TEMP_CFG_REG, LIS3DH_ADC_EN | LIS3DH_TEMP_EN); //Enable ADC and Temp sensor
		//I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG4, LIS3DH_BDU); //Enable Block Data Update

		//QPRINTF("Done\r\n");
}
コード例 #7
0
//enable accelerometer for pedometer
void accel_enable_fifo(void)
{
	uint8_t i2cbuffer[4];

	//QPRINTF("Configuring FIFO...");
	
	accel_shutdown(); //reset accel

	//Initialize I2C master
	i2c_init(I2C_SCL_RATIO(1), i2cbuffer, 4);

	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG1, LIS3DH_50HZ | LIS3DH_LP | LIS3DH_ENX | LIS3DH_ENY | LIS3DH_ENZ); //turn on XYZ, low power, 50Hz
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_FIFO_CTRL_REG, LIS3DH_FIFO_MODE | ACCEL_FIFO_DEPTH); //fifo mode, watermark length 10, Send to inerrupt to INT1
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG5, LIS3DH_FIFO_EN | LIS3DH_LIR_INT1); //Enable FIFO
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG3, LIS3DH_FIFO_WM | LIS3DH_INT1_EN | LIS3DH_FIFO_OVERRUN); //Enable FIFO watermark interrupt 1
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG2, LIS3DH_HPF_EN); //enalbe high pass filter for pedometer, disable for better value range on all XYZ axis
	//I2C_BYTE_READ(LIS3DH_ADDR, LIS3DH_HP_FILTER_RESET); //reset high pass filter zero level to current
	//QPRINTF("Done\r\n");
}
コード例 #8
0
void accel_shutdown(void)
{
	uint8_t i2cbuffer[4];
	//Initialize I2C master
  i2c_init(I2C_SCL_RATIO(1), i2cbuffer, 4);
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG1, LIS3DH_POWER_DOWN);
	
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG5, LIS3DH_BOOT); //reboot regs
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG6, LIS3DH_BOOT_I1);
	
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG1, 0x00); //power down
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG2, 0x00);
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG3, 0x00);
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG4, 0x00);
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG5, 0x00);
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_CTRL_REG6, 0x00);
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_FIFO_CTRL_REG, 0x00);
	I2C_BYTE_WRITE(LIS3DH_ADDR, LIS3DH_INT1_CFG, 0x00);
	
}
コード例 #9
0
ファイル: i2c_example.c プロジェクト: Wangwenxue/Firefly-BLE
int main (void)
{
    uint32_t j;
    uint8_t buffer[100];
    uint8_t rxbuffer[100];
    
    SystemInit();
    
    //Initialize I2C master
    i2c_init(I2C_SCL_RATIO(100000), i2cbuffer, 104);


    for (j = 0; j < 100; j++) {
        buffer[j] = 0x55 + j;
        rxbuffer[j] = 0;
    }    
    
    while (1)                                /* Loop forever */
    {
        // Write 1byte data(0x80) to register(address is 0x00 and 1byte) of device(address is 0x21)
        I2C_BYTE_WRITE(0x21, 0x00, 0x80);
        // Read 1byte data from register(address is 0x06 and 1byte) of device(address is 0x21)
        buffer[0] = I2C_BYTE_READ(0x21, 0x06);    

        // Write 1byte data(0x11) to register(address is 0x00 and 2byte) of device(address is 0x50)
        I2C_BYTE_WRITE2(0x50, 0x00, 0x11);        
        // Read 1byte data from register(address is 0x00 and 2byte) of device(address is 0x50)
        buffer[0] = I2C_BYTE_READ2(0x50, 0x00);    

        // Write nbyte data(50byte) to register(address is 0x00 and 2byte) of device(address is 0x50)
        I2C_nBYTE_WRITE2(0x50, 0x00, buffer, 50);        
        // Read nbyte data(60byte) from register(address is 0x00 and 2byte) of device(address is 0x50)
        I2C_nBYTE_READ2(0x50, 0x00, rxbuffer, 60); 

    }
}
コード例 #10
0
/**
 ****************************************************************************************
 * @brief   Restore peripheral setting after wakeup
 ****************************************************************************************
 */
void usr_sleep_restore(void)
{
#if QN_DBG_PRINT
    uart_init(QN_DEBUG_UART, USARTx_CLK(0), UART_115200);
    uart_tx_enable(QN_DEBUG_UART, MASK_ENABLE);
    uart_rx_enable(QN_DEBUG_UART, MASK_ENABLE);
#endif

#if (defined(QN_ADV_WDT))
    if(usr_env.adv_wdt_enable)
    {
        wdt_init(1007616, WDT_INT_MOD); // 30.75s
    }
#endif
		
		

		//Initialize I2C master to save time later
		uint8_t i2cbuffer[3];
		i2c_init(I2C_SCL_RATIO(1), i2cbuffer, 3);
		
		//QPRINTF("SLEEP RESTORE\r\n");
		//send_packet(PROTOCOL_MODE_TX2);
}
コード例 #11
0
int ble_i2c( const uint8_t * const pcCommandString,uint8_t* pcWriteBuffer,uint32_t commpare_length)
{
	const int8_t *pcom;
	uint32_t pxParameterStringLength;
	
	uint8_t len;
	uint8_t i2c_addr ;
	uint8_t i2c_reg  ;
	uint8_t i2c_data;

	if(pcCommandString[commpare_length+1] == '=')
	{
		//i2c_addr
		pcom = at_get_parameter((const int8_t*)pcCommandString + commpare_length + 2, 1, &pxParameterStringLength);
		if(pxParameterStringLength > 0)
		{
			i2c_addr = at_HEXstringToNum((const uint8_t *)pcom, pxParameterStringLength); 
		}
		else
		{
			goto pram_err;
		}
		
		//i2c_reg
		pcom = at_get_parameter((const int8_t*)pcCommandString + commpare_length + 2, 2, &pxParameterStringLength);
		if(pxParameterStringLength > 0)
		{
			i2c_reg  = at_HEXstringToNum((const uint8_t *)pcom, pxParameterStringLength); 
		}
		else
		{
			goto pram_err;
		}
		
		// i2c R&W?
		pcom = at_get_parameter((const int8_t*)pcCommandString + commpare_length + 2, 0, &pxParameterStringLength);
		if(pxParameterStringLength == 1)
		{ 
			syscon_SetPMCR1WithMask(QN_SYSCON,P23_MASK_PIN_CTRL | P24_MASK_PIN_CTRL,P23_I2C_SDA_PIN_CTRL | P24_I2C_SCL_PIN_CTRL);	
			i2c_init(I2C_SCL_RATIO(100000), i2c_buff, 4);
			if(pcom[0] == 'R')
			{
				i2c_data = I2C_BYTE_READ(i2c_addr,i2c_reg);
				if(i2c_is_finish())
				{
					len = commpare_length+1;
					memcpy(pcWriteBuffer, pcCommandString, len);
					len += sprintf((char *)pcWriteBuffer + len,":0x%02x\r\nOK\r\n",i2c_data);	
					return len;
				}
				goto pram_err; 
			}
			else if(pcom[0] == 'W')
			{
				//i2c_data
				pcom = at_get_parameter((const int8_t*)pcCommandString + commpare_length + 2, 3, &pxParameterStringLength);
				if(pxParameterStringLength > 0)
				{
					i2c_data = at_HEXstringToNum((const uint8_t *)pcom, pxParameterStringLength); 	
				}
				else
				{
					goto pram_err;
				}

				I2C_BYTE_WRITE(i2c_addr, i2c_reg, i2c_data);
				if(!i2c_is_finish())
				{
					goto pram_err;
				}

			}
		}
		else
		{
			goto pram_err;
		}	
	}
	else
	{
		goto pram_err;
	}
	return sprintf((char*)pcWriteBuffer,"OK\r\n");
	
pram_err:	
	return sprintf((char*)pcWriteBuffer,"ERR\r\n");
}