嗨,对话小组,
我尝试将加速计控制代码添加到“ble_app_睡眠模式”。
我可以初始化并读取加速度计值。
并且,我添加了加速计控制代码来中断“ble_app_sleepmode”的处理,如下所示。
我是用逻辑分析仪测量的。
当我按下按钮时,DA14580没有发送I2C信号。
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
静态无效用户\应用\按钮\按下\ cb(无效)
{
arch_printf(“用户应用程序按钮按下cb\r\n”);
uint8下一个事件=0;
//读取按钮状态
if(GPIO_GetPinStatus(GPIO_按钮_端口,GPIO_按钮_引脚))
{
app_sleep_env.custs1_btn_state=custs1_btn_state_已发布;
下一个事件=WKUPCT引脚极性低;
}
其他的
{
app_sleep_env.custs1_btn_state=custs1_btn_state_按下;
下一个事件=WKUPCT引脚极性高;
}
i2cMma8652ReadData()\\←添加了加速计控制代码
//更新按钮字符
结构custs1\u val\u ntf\u req*req=KE_MSG\u ALLOC\u DYN(custs1\u val\u ntf\u req,
任务1,
任务应用程序,
客户1_val_ntf_需求,
定义用户1按钮状态字符);
req->conhdl=app\U env->conhdl;
req->handle=CUST1\u IDX\u按钮\u状态\u值;
req->length=DEF_CUST1_按钮_状态_字符_长度;
请求->值[0]=应用程序睡眠环境用户1\u btn\u状态;
发送消息(请求);
//配置下一个按钮事件
用户应用设置按钮事件(下一个btn事件);
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
然而,当我按下按钮时,它停止了。
你能告诉我为什么它会停止。。。?
发展环境:
*董事会:DA14580DEVKT-B
*SDK:DA1458x_SDK_5.0.4
加速度计:MMA8652
初始化加速计控制的处理:
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
无效i2c_mma8652_初始(无效){
arch_printf(“i2c_mma8652_init\r\n”);
SetBits16(时钟每寄存器,I2C启用,1);//为I2C启用时钟
SetWord16(I2C_ENABLE_REG,0x0);//禁用I2C控制器
SetWord16(I2C控制寄存器,0
|I2C_从_禁用
|I2C_重启_EN
|I2C_主模式);
设置16(I2C\u控制寄存器、I2C\u速度、I2C\u标准);
SetWord16(I2C_TAR_REG,I2C_MMA8652_DEVICE_ADDRESS);//设置从设备地址
//设置标准模式的比特率100Kbit/sec
//当16MHz sclk 1/16*(72(H)+8+79(L)+1)=10 us
设置字16(I2C\U SS\U SCL\U HCNT\U REG,72);
设置字16(I2C\U SS\U SCL\U LCNT\U注册表,79);
设置字16(I2C_RX_TL_REG,0x10);
设置字16(I2C_TX_TL_REG,0x10);
SetWord16(I2C_INTR_MASK_REG,0x200);//为停止位启用中断
SetWord16(I2C_ENABLE_REG,0x1);//启用I2C控制器
等待_,直到_NO _MASTER _ACTIVITY();//等待I2C MASTER FSM变为空闲状态
I2CMMA8652备用();
i2c_mma8652_write_字节(XYZ_DATA_CFG,0x00);//+/-2g范围,约0.977mg/LSB
i2c_mma8652_write_字节(CTRL_REG2,0x02);//高分辨率模式
i2c_mma8652_write_字节(CTRL_REG3,0x08);//推拉,低电平有效中断
i2c_mma8652_write_字节(CTRL_REG4,0x05);//启用DRDY,MT中断
i2c_mma8652_write_字节(CTRL_REG5,0x05);//DRDY,MT中断路由至INT1-PTA5
i2c_mma8652_写入字节(FF_MT_CFG,
事件(闩锁)启用|运动|检测|检测| XYZ)启用);
i2c mma8652写入字节(FF MT THS,0x70);
i2c_mma8652_写入_字节(FF_MT_计数,0x10);
i2cMma8652WhoAmI();
I2CMMA8652激活();
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
我想您可能需要在“i2cMma8652ReadData()”之前添加“arch_force_active_mode()”\\←添加了加速计控制代码“
此外,通常不建议在当前代码位置添加“i2cMma8652ReadData();”。
我建议添加消息处理函数。
就像“用户\应用\启用\脉宽调制”功能的调用位置一样。
嗨,工友对话,
我可以操作“i2cMma8652ReadData();”添加“arch_force_active_mode();”的结果。
我将考虑消息处理程序的功能。
非常感谢。
你好,肖恩666,
在i2cMma8652ReadData()中,i2c控制器是否重新初始化?当580进入睡眠模式时,i2c控制器断电。i2c控制器寄存器中存储的值不会保留。