No.94094 作者:longxin1122 邮件:1105091895@qq.com ID:149216 登陆:3次 文章数:11篇 最后登陆IP:116.24.25.116 最后登陆:2013/4/17 10:37:28 注册:2013/4/9 15:21:06 财富:160 发帖时间:2013/4/9 15:49:54 发贴者IP:116.24.233.230 标题:longxin1122:G-Sensor MMA8452QR1驱动 摘要:No.94094G-Sensor MMA8452QR1驱动 G-Sensor 8452驱动 我们深圳的长期大量现货型号有:MMA7660, MMA7455, MMA8452QR1, MXC6225XU, MMC3140MS, TS1003 我们提供专业的传感器服务,联系热线:13714686590 QQ2862929163 8452是一款G-Sensor芯片,采用I2C跟主芯片通讯,采用中断方式跟操作系统协作。通过内部检测XYZ三个方向的加速度,实现各种应用。原理框图如下: 现在来实现在WINCE中的I2C驱动,读写的时序波形图分别如下: 读: 写: 基础写函数实现如下: static P_XLLP_OST_T ost_reg = 0; static XLLP_I2C_T *i2c_reg = NULL; static XLLP_CLKMGR_T *clk_reg = NULL; //在初始化中要映射 static int OS_I2CMasterWriteData(XLLP_UINT8_T slaveAddr, const XLLP_UINT8_T * bytesBuf, int bytesCount) { volatile int status; XLLP_BOOL_T bSENDSTOP = XLLP_TRUE; //写完之后发停止位 status = XllpCustomI2CWrite((P_XLLP_I2C_T)(i2c_reg), (P_XLLP_OST_T)(ost_reg), slaveAddr, bytesBuf, bytesCount, bSENDSTOP,25); return status; } static int MMA8452_WriteSensorReg( const XLLP_UINT8_T subAddress, XLLP_UINT8_T *bufP ) { XLLP_UINT8_T buffer[2]; int status; int lock; buffer[0] = subAddress; buffer[1] = *bufP; gSensorSlaveAddr = 0x1c; //I2C地址 lock = __i2c_acquire_lock(); status = OS_I2CMasterWriteData( gSensorSlaveAddr, buffer, 2); if (XLLP_STATUS_SUCCESS != status) { RETAILMSG(1, (TEXT("Failed to write MMA8452_WriteSensorReg.\r\n"))); } __i2c_release_lock(lock); return status; } 基础读函数实现如下: static int OS_I2CMasterWriteData_Read(XLLP_UINT8_T slaveAddr, const XLLP_UINT8_T * bytesBuf, int bytesCount) { volatile int status; XLLP_BOOL_T bSENDSTOP = XLLP_FALSE; //写完后不发停止位 status = XllpCustomI2CWrite((P_XLLP_I2C_T)(i2c_reg), (P_XLLP_OST_T)(ost_reg), slaveAddr, bytesBuf, bytesCount, bSENDSTOP,25); ......
>>返回讨论的主题
|