⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c.c

📁 Sample code for use on smp 863x processor.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "i2c.h"//#include "play_capture_TW.h"RMuint32 I2C_ModuleID_NEW = I2C;//to enable or disable the debug messages of this source file, put 1 or 0 below#if 1#define LOCALDBG ENABLE#else#define LOCALDBG DISABLE#endif#if 1RMstatus init_i2c( struct RUA *pInstance, 				  RMuint8 delay, 				  RMuint8 dev, 				  RMuint8 i2c_data[][2], 				  RMuint32 data_size){	RMstatus err=RM_OK;	RMuint32 i;		struct I2C_DeviceParams_type i2c;	struct I2C_WriteRMuint8_type i2c_write;		i2c.PioClock = 0;	i2c.PioData = 1;	i2c.WrAddr = dev << 1;	i2c.RdAddr = i2c.WrAddr | 0x01;	i2c.DelayUs = delay;		err = RUASetProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_DeviceParams, &i2c, sizeof(i2c), 0);	for (i = 0; i < data_size; i++) {		i2c_write.SubAddr = i2c_data[i][0];		i2c_write.Data = i2c_data[i][1];		//		err=write_i2c(pInstance,delay,dev,(RMuint32)i2c_data[i][0],(RMuint32)i2c_data[i][1]);		err = RUASetProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_WriteRMuint8, &i2c_write, sizeof(i2c_write), 0);				if (RMFAILED(err)) RMDBGPRINT((ENABLE, "Failed to write 0x%02X to i2c 0x%02X:0x%02X\n", i2c_data[i][1], i2c.WrAddr, i2c_data[i][0]));	}	return err;//	return RM_OK ;}#elseRMstatus init_i2c(				  struct RUA *pInstance, 				  RMuint8 delay, 				  RMuint8 dev, 				  RMuint8 i2c_data[][2], 				  RMuint32 data_size){	RMstatus err=RM_OK;	RMuint32 i;	RMuint32 regAdd;	RMuint32 regVal;		for (i = 0; i < data_size; i++) {		regAdd= 0xff & i2c_data[i][0] ;		regVal = 0xff & i2c_data[i][1];		err=write_i2c(pInstance,delay,dev,regAdd,regVal);				if (err!=RM_OK) {			printf("can write i2c \n");			return err;		}		usleep(50);	}	return err;}#endifRMstatus write_i2c(						  struct RUA *pInstance, 						  RMuint8 delay, 						  RMuint32 dev, 						  RMuint32 addr, 						  RMuint32 data){	RMstatus err;	struct I2C_DeviceParams_type i2c;	struct I2C_WriteRMuint8_type i2c_write;		i2c.PioClock = 0;	i2c.PioData = 1;	i2c.WrAddr = dev << 1;	i2c.RdAddr = i2c.WrAddr | 0x01;	i2c.DelayUs = delay;	err = RUASetProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_DeviceParams, &i2c, sizeof(i2c), 0);	i2c_write.SubAddr = addr;	i2c_write.Data = data;	err = RUASetProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_WriteRMuint8, &i2c_write, sizeof(i2c_write), 0);	//	if (RMSUCCEEDED(err)) RMDBGPRINT((ENABLE, "Wrote 0x%02X to i2c 0x%02X:0x%02X\n", data, i2c.WrAddr, addr));	//	else RMDBGPRINT((ENABLE, "Failed to write 0x%02X to i2c 0x%02X:0x%02X\n", data, i2c.WrAddr, addr));	return err;//	return RM_OK ;	}RMstatus read_i2c(						 struct RUA *pInstance, 						 RMuint8 delay, 						 RMuint32 dev, 						 RMuint32 addr, 						 RMuint32 *data){	RMstatus err;	struct I2C_DeviceParams_type i2c;	struct I2C_QueryRMuint8_in_type i2c_param;	struct I2C_QueryRMuint8_out_type i2c_res;		i2c.PioClock = 0;	i2c.PioData = 1;	i2c.WrAddr = dev << 1;	i2c.RdAddr = i2c.WrAddr | 0x01;	i2c.DelayUs = delay;	err = RUASetProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_DeviceParams, &i2c, sizeof(i2c), 0);	i2c_param.SubAddr = addr;	err = RUAExchangeProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_QueryRMuint8, 		&i2c_param, sizeof(i2c_param), 		&i2c_res, sizeof(i2c_res));	//	if (RMSUCCEEDED(err)) RMDBGPRINT((ENABLE, "Reading 0x%02X from i2c 0x%02X:0x%02X\n", i2c_res.Data, i2c.RdAddr, addr));	//	else RMDBGPRINT((ENABLE, "Failed to read from i2c 0x%02X:0x%02X\n", i2c.RdAddr, addr));	*data = i2c_res.Data;	return err;//	return RM_OK ;	}RMstatus read_i2c_data(					   struct RUA *pInstance, 					   RMuint8 delay, 					   RMuint32 dev, 					   RMuint32 addr, 					   RMuint8 *data, 					   RMuint32 data_size){	RMstatus err;	struct I2C_DeviceParams_type i2c;	struct I2C_QueryData_in_type i2c_param; 	struct I2C_QueryData_out_type i2c_res;		i2c.PioClock = 0;	i2c.PioData = 1;	i2c.WrAddr = dev << 1;	i2c.RdAddr = i2c.WrAddr | 0x01;	i2c.DelayUs = delay;	err = RUASetProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_DeviceParams, &i2c, sizeof(i2c), 0);	i2c_param.UseSubAddr = TRUE;	i2c_param.SubAddr = addr;	i2c_param.DataSize = data_size;	err = RUAExchangeProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_QueryData, 		&i2c_param, sizeof(i2c_param), 		&i2c_res, sizeof(i2c_res));	if (RMFAILED(err)) {		RMDBGLOG((LOCALDBG, "Error setting RMI2CPropertyID_QueryData(0x%02X:0x%02X, 0x%02X) on I2C 0x%08lX GPIO %lu/%lu! %s\n", 			i2c.WrAddr, i2c_param.SubAddr, i2c_param.DataSize, 			I2C_ModuleID_NEW, i2c.PioClock, i2c.PioData, 			RMstatusToString(err)));	}	RMMemcpy(data, i2c_res.Data, data_size);	return err;//	return RM_OK ;}RMstatus read_i2c_control_msp4450g(										  struct RUA *pInstance, 										  RMuint8 delay, 										  RMuint32 dev, 										  RMuint32 sub,										  RMuint32 *data){	RMstatus err;		struct I2C_DeviceParams_type i2c;	struct I2C_WriteData_type i2c_write;			struct I2C_QueryData_in_type i2c_param; 	struct I2C_QueryData_out_type i2c_res;		i2c.PioClock = 0;	i2c.PioData = 1;	i2c.WrAddr = dev << 1;	i2c.RdAddr = i2c.WrAddr | 0x01;	i2c.DelayUs = delay;	err = RUASetProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_DeviceParams, &i2c, sizeof(i2c), 0);		i2c_write.UseSubAddr = FALSE;	i2c_write.SubAddr = sub;	i2c_write.DataSize = 1;	i2c_write.Data[0] = sub;		err = RUASetProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_WriteData, &i2c_write, sizeof(i2c_write), 0);	if (RMFAILED(err)) RMDBGPRINT((ENABLE, "Failed to write 0x%02X%02X to i2c 0x%02X\n", i2c_write.Data[0], i2c_write.Data[1], i2c.WrAddr));		i2c_param.UseSubAddr = TRUE;	i2c_param.SubAddr = sub;	i2c_param.DataSize = 2;		err = RUAExchangeProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_QueryData, 		&i2c_param, sizeof(i2c_param), 		&i2c_res, sizeof(i2c_res));		if (RMFAILED(err)) {		RMDBGLOG((LOCALDBG, "Error setting RMI2CPropertyID_QueryData(0x%02X:0x%02X, 0x%02X) on I2C 0x%08lX GPIO %lu/%lu! %s\n", 			i2c.WrAddr, i2c_param.SubAddr, i2c_param.DataSize, 			I2C_ModuleID_NEW, i2c.PioClock, i2c.PioData, 			RMstatusToString(err)));	}		*data=(i2c_res.Data[0] & 0xff) ;	*data = *data << 8;	*data=*data | (i2c_res.Data[1] & 0xff);		return err;//	return RM_OK ;	}RMstatus write_i2c_control_msp4450g(										   struct RUA *pInstance, 										   RMuint8 delay, 										   RMuint32 dev, 										   RMuint32 sub,										   RMuint32 data){	RMstatus err;		struct I2C_DeviceParams_type i2c;	struct I2C_WriteData_type i2c_write;			i2c.PioClock = 0;	i2c.PioData = 1;	i2c.WrAddr = dev << 1;	i2c.RdAddr = i2c.WrAddr | 0x01;	i2c.DelayUs = delay;	err = RUASetProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_DeviceParams, &i2c, sizeof(i2c), 0);		i2c_write.UseSubAddr = TRUE;	i2c_write.SubAddr = sub;	i2c_write.DataSize = 2;	i2c_write.Data[0] = (data & 0xff00) >> 8;	i2c_write.Data[1] = (data & 0xff);		err = RUASetProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_WriteData, &i2c_write, sizeof(i2c_write), 0);	if (RMFAILED(err)) RMDBGPRINT((ENABLE, "Failed to write 0x%02X%02X to i2c 0x%02X\n", i2c_write.Data[0], i2c_write.Data[1], i2c.WrAddr));		return err;//	return RM_OK ;	}// Demod or DSPRMstatus read_i2c_dsp_msp4450g(									  struct RUA *pInstance, 									  RMuint8 delay, 									  RMuint32 dev, 									  RMuint32 sub,									  RMuint32 addr, 									  RMuint32 *data){	RMstatus err;		struct I2C_DeviceParams_type i2c;	struct I2C_WriteData_type i2c_write;			struct I2C_QueryData_in_type i2c_param; 	struct I2C_QueryData_out_type i2c_res;		i2c.PioClock = 0;	i2c.PioData = 1;	i2c.WrAddr = dev << 1;	i2c.RdAddr = i2c.WrAddr | 0x01;	i2c.DelayUs = delay;	err = RUASetProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_DeviceParams, &i2c, sizeof(i2c), 0);		i2c_write.UseSubAddr = TRUE;	i2c_write.SubAddr = sub;	i2c_write.DataSize = 2;	i2c_write.Data[0] = (addr & 0xff00) >> 8;	i2c_write.Data[1] = addr & 0x00FF;			err = RUASetProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_WriteData, &i2c_write, sizeof(i2c_write), 0);	if (RMFAILED(err)) RMDBGPRINT((ENABLE, "Failed to write 0x%02X%02X to i2c 0x%02X\n", i2c_write.Data[0], i2c_write.Data[1], i2c.WrAddr));		i2c_param.UseSubAddr = TRUE;	i2c_param.SubAddr = sub;	i2c_param.DataSize = 2;		err = RUAExchangeProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_QueryData, 		&i2c_param, sizeof(i2c_param), 		&i2c_res, sizeof(i2c_res));		if (RMFAILED(err)) {		RMDBGLOG((LOCALDBG, "Error setting RMI2CPropertyID_QueryData(0x%02X:0x%02X, 0x%02X) on I2C 0x%08lX GPIO %lu/%lu! %s\n", 			i2c.WrAddr, i2c_param.SubAddr, i2c_param.DataSize, 			I2C_ModuleID_NEW, i2c.PioClock, i2c.PioData, 			RMstatusToString(err)));	}		*data=(i2c_res.Data[0] & 0xff) ;	*data = *data << 8;	*data=*data | (i2c_res.Data[1] & 0xff);		return err;//	return RM_OK ;	}RMstatus write_i2c_dsp_msp4450g(									   struct RUA *pInstance, 									   RMuint8 delay, 									   RMuint32 dev, 									   RMuint32 sub,									   RMuint32 addr, 									   RMuint32 data){	RMstatus err;		struct I2C_DeviceParams_type i2c;	struct I2C_WriteData_type i2c_write;			i2c.PioClock = 0;	i2c.PioData = 1;	i2c.WrAddr = dev << 1;	i2c.RdAddr = i2c.WrAddr | 0x01;	i2c.DelayUs = delay;	err = RUASetProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_DeviceParams, &i2c, sizeof(i2c), 0);		i2c_write.UseSubAddr = TRUE;	i2c_write.SubAddr = sub;	i2c_write.DataSize = 4;	i2c_write.Data[0] = (addr & 0xff00) >> 8;	i2c_write.Data[1] = addr & 0x00FF;	i2c_write.Data[2] = (data & 0xff00) >> 8;	i2c_write.Data[3] = data & 0x00FF;			err = RUASetProperty(pInstance, I2C_ModuleID_NEW, RMI2CPropertyID_WriteData, &i2c_write, sizeof(i2c_write), 0);	if (RMFAILED(err)) RMDBGPRINT((ENABLE, "Failed to write 0x%02X%02X to i2c 0x%02X\n", i2c_write.Data[0], i2c_write.Data[1], i2c.WrAddr));			return err;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -