加速度计采用i2c控制

4个职位/ 0个新
最后发表
Sean666
离线
最后看到:2年11个月前
加入:2016-08-04 03:56
加速度计采用i2c控制

嗨,对话框的团队,

我尝试操作,添加加速度计控制代码到“ble_app_sleepmode”。
我可以初始化并读取Accelerometer值。

并且,我添加了Accelerometer控制代码来中断“ble_app_sleepmode”的处理,如下所示。
我是用逻辑分析仪测量的。
当我按下按键时,DA14580没有发送I2C信号。

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
静态孔隙user_app_button_press_cb(空白)

arch_printf(“user_app_button_press_cb \ r \ n”);
Uint8_t next_btn_event = 0;

//读取按钮状态
如果(GPIO_GetPinStatus (GPIO_BUTTON_PORT GPIO_BUTTON_PIN))

app_sleep_env。custs1_btn_state = CUSTS1_BTN_STATE_RELEASED;
next_btn_event = WKUPCT_PIN_POLARITY_LOW;

其他的

app_sleep_env。custs1_btn_state = CUSTS1_BTN_STATE_PRESSED;
next_btn_event = WKUPCT_PIN_POLARITY_HIGH;

i2cMma8652ReadData ();\\←添加了加速度计控制代码

//更新按钮特征
struct custs1_val_ntf_req *req = KE_MSG_ALLOC_DYN(custs1_val_ntf_req,
TASK_CUSTS1,
TASK_APP,
custs1_val_ntf_req,
DEF_CUST1_BUTTON_STATE_CHAR_LEN);

申请- > conhdl = app_env - > conhdl;
申请- >处理= CUST1_IDX_BUTTON_STATE_VAL;
申请- >长度= DEF_CUST1_BUTTON_STATE_CHAR_LEN;
申请- >值[0]= app_sleep_env.custs1_btn_state;

ke_msg_send(要求的);

//设置next button事件
user_app_set_button_event (next_btn_event);

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

然而,当我按下按钮时,它就停止了。
你能告诉我为什么它停止了? ?

开发环境:
*板:DA14580DEVKT-B
* SDK: DA1458x_SDK_5.0.4

加速度计:MMA8652

初始化加速度计控制的处理:
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
空白i2c_mma8652_init (void) {
arch_printf(“i2c_mma8652_init \ r \ n”);
SetBits16 (CLK_PER_REG I2C_ENABLE 1);//使能I2C时钟
SetWord16 (I2C_ENABLE_REG 0 x0);//关闭I2C控制器
SetWord16 (I2C_CON_REG 0
| I2C_SLAVE_DISABLE
| I2C_RESTART_EN
| I2C_MASTER_MODE);
SetBits16 (I2C_CON_REG I2C_SPEED I2C_STANDARD);

SetWord16 (I2C_TAR_REG I2C_MMA8652_DEVICE_ADDRESS);//设置从设备地址

//设置标准模式的比特率100Kbit/sec
//当16MHz sclk 1/16*(72(H)+8+79(L)+1)= 10 us
SetWord16 (I2C_SS_SCL_HCNT_REG, 72);
SetWord16 (I2C_SS_SCL_LCNT_REG, 79);

SetWord16 (I2C_RX_TL_REG 0 x10);
SetWord16 (I2C_TX_TL_REG 0 x10);
SetWord16 (I2C_INTR_MASK_REG 0 x200型);//为停止位启用中断
SetWord16 (I2C_ENABLE_REG 0 x1);//开启I2C控制器
WAIT_UNTIL_NO_MASTER_ACTIVITY ();//等待I2C主FSM变为IDLE状态

i2cMma8652Standby ();
i2c_mma8652_write_byte (XYZ_DATA_CFG 0 x00);// +/-2g范围为~0.977mg/LSB
i2c_mma8652_write_byte (CTRL_REG2 0 x02);//高分辨率模式
i2c_mma8652_write_byte (CTRL_REG3, ();//推拉,主动低中断
i2c_mma8652_write_byte (CTRL_REG4 0 x05);//启用DRDY, MT中断
i2c_mma8652_write_byte (CTRL_REG5 0 x05);// DRDY, MT中断路由到INT1 - PTA5
i2c_mma8652_write_byte (FF_MT_CFG
Event_latch_enable | motion_detect | detection_xyz_enable);
i2c_mma8652_write_byte (FF_MT_THS 0 x70);
i2c_mma8652_write_byte (FF_MT_COUNT 0 x10);

i2cMma8652WhoAmI ();

i2cMma8652Active ();

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

关键词:
设备:
Gongyu_Dialog
离线
最后看到:3小时52分钟前
加入:2016-04-27 07:07
我想你可能还需要补充一点

我猜你可能需要在i2cMma8652ReadData()之前添加“arch_force_active_mode();”\\←增加了加速度计控制代码"

此外,通常不建议添加"i2cMma8652ReadData();在你当前的代码位置。
我可能建议添加消息处理程序函数。
就像函数“user_app_enable_pwm”的调用位置一样。

Sean666
离线
最后看到:2年11个月前
加入:2016-08-04 03:56
嗨,Gongyu_Dialog,

嗨,Gongyu_Dialog,

我可以操作“i2cMma8652ReadData();”添加“arch_force_active_mode();”的结果。

我将考虑消息处理函数。

谢谢你!

LT_Dialog(未验证)
你好Sean666,

你好Sean666,
在i2cMma8652ReadData()中,i2c控制器是否重新初始化?580进入休眠模式后,i2c控制器下电。存储在i2c控制器寄存器中的值不被保留。