在ble广告期间

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
22个员额/ 0个新员额
最后一篇
Mapart.
离线
最后看到:2个月3个星期前
加入:2018-11-30 15:58
在ble广告期间

你好,

我们希望定期读取i2c上的传感器,最好是在da14585醒来做BLE广告时。
为了读取传感器,我们必须首先通过驱动一个大头针唤醒传感器,等待~1ms,然后通过i2c读取8字节的数据。
这个序列自己工作,但是当我尝试在回调user_app_main_loop_callbacks中执行它时。app_on_system_powered或user_app_main_loop_callbacks。睡觉前,我不知怎么就卡住了。

初始化i2c(从peripher_init调用)的顺序:

空白init_acc_i2c(空白)

setbits16(clk_per_reg,i2c_enable,1);//为i2c启用时钟
setword16(i2c_enable_reg,0x0);//禁用I2C控制器
SetWord16 (I2C_CON_REG 0 x0063);//12c主地址,7位从地址,100kbit
SetWord16 (I2C_TAR_REG ACCELEROMETER_I2C_ADDR);

SetWord16 (I2C_ENABLE_REG 0 x1);//启用I2C控制器


要读取传感器数据的代码,我尝试从上面描述的回调调用:

void read_sensor_sequentient(void)

int我;
uint8_t数据[8];
GPIO_SetActive (ACCELEROMETER_ENABLE_PORT ACCELEROMETER_ENABLE_PIN);
systick_wait (1000);
GLOBAL_INT_DISABLE ();
SetWord16 (I2C_DATA_CMD_REG 0 x00);
for(i = 0; i <7; i ++)

WAIT_WHILE_I2C_FIFO_IS_FULL ();
SetWord16 (I2C_DATA_CMD_REG 0 x0100);

GLOBAL_INT_RESTORE ();

for(i = 0; i <7; i ++)

WAIT_FOR_RECEIVED_BYTE ();//等待接收的数据
数据[我]= (0 xff & GetWord16 (I2C_DATA_CMD_REG));//获取接收的字节

GPIO_SetInactive (ACCELEROMETER_ENABLE_PORT ACCELEROMETER_ENABLE_PIN);
WAIT_UNTIL_I2C_FIFO_IS_EMPTY ();//等待直到Tx FIFO为空
WAIT_UNTIL_NO_MASTER_ACTIVITY ();//等待直到没有主活动



有可能使用任何回调来实现这一点吗?

最好的祝福
马丁

设备:
PM_Dialog
离线
最后看到:14小时7分钟前
职员
加入:2018-02-08 11:03
嗨Mapart,

嗨Mapart,

如果要定期读取传感器,可以使用app_easy_timer() API。每次计时器到期时,注册的回调将被触发,因此您需要注册正在读取传感器的回调。在DA1458每次读取传感器的情况下,能否分享更多细节?设备在发布或连接间隔之间进入睡眠模式。您是否将其配置为进入深度睡眠模式,就像SDK的ble_app_sleepmode示例中演示的那样?

谢谢,PM_Dialog

Mapart.
离线
最后看到:2个月3个星期前
加入:2018-11-30 15:58
你好,

你好,

提供一些背景资料:
SDK版本,6.0.10.511。
在这个项目中,我们使用ble_app_security作为基础,但是将其配置为使用扩展睡眠模式。这使得设备在广告之间进入休眠状态。
理想情况下,我们希望在da14585每次醒来做广告时读取这个传感器。
如果我们使用app_easy_timer(),设备会从睡眠中醒来,只是为了读取传感器,对吗?
对我们来说,最好是在设备已经醒着的时候读取传感器。

最好的祝福
马丁

PM_Dialog
离线
最后看到:14小时7分钟前
职员
加入:2018-02-08 11:03
嗨Mapart,

嗨Mapart,

通过使用App_easy_timer()的使用,您可以实现传感器的定期读取。Your device is initially advertising and while it’s adverting the sensor should be read periodically by the application, After an amount of time, you stop adverting and when the device wakes up by configuring the wake up controller, the application should start reading again the sensor periodically. Is that correct? Or you would like to read the sensor in every advertising interval? Please let me know and share what you exactly want to accomplish. It would be very helpful in order to provide you the correct guidelines.

谢谢,PM_Dialog

Mapart.
离线
最后看到:2个月3个星期前
加入:2018-11-30 15:58
你好,

你好,
是的,我想读取传感器在每个广告间隔(687.5毫秒)。
我想我设法使用回调来获得这个工作:
user_app_main_loop_callbacks.app_on_system_powered.

谢谢您的帮助。
致以最亲切的问候
马丁

PM_Dialog
离线
最后看到:14小时7分钟前
职员
加入:2018-02-08 11:03
嗨Mapart,

嗨Mapart,

很高兴你发现了自己的问题,谢谢你接受了这个答案。

谢谢,PM_Dialog

rajucoolsuraj
离线
最后看到:10个月14个小时前
加入:2018-12-12 16:09
你好对话框,

你好对话框,
与另一个工作流程的类似示例 -
传感器>> i2c >> DA14586。
RTC >> GPIOx / WKUP中断>> DA14586

根据具有SDK的示例应用程序,BLE的正常操作将进行广告。亚博国际官网平台网址
当从RTC引发中断时,BLE仍处于广告模式-

记录时间戳;记录传感器数据;在flash中存储传感器数据;

当BLE连接到对等体时 -
禁用RTC中断;将闪光数据传输到中央设备(USUSIVALLY智能手机);

你能帮我插入代码和处理-吗
1.RTC中断处理(激活和休眠状态)
2。使用dsps从对话框中传输。

谢谢

PM_Dialog
离线
最后看到:14小时7分钟前
职员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

如果我能够正确理解,您想在获得中断正确时唤醒设备?因此,设备将处于睡眠模式,并且当您从RTC获取中断时(请澄清RTC是什么)设备将唤醒并启动广告。如果您想遵循此实现,我建议您查看SDK的BLE_APP_SLEEPMODE示例。唯一的区别是,在此示例中,DA14585 / 6从由按钮按下产生的中断唤醒。您是否使用使用DSPS应用程序代码,或者您已开发自定义应用程序?请从DSPS应用程序代码检查User_send_ble_data()。此外,我建议您查看DSP用户手册并检查图6和7。

https://support.dialog-semiconductor.com/system/files/resources/UM-B-038%20DA14580%20Serial%20Port%20Service%20reference%20application_v2.0.pdf

谢谢,PM_Dialog

rajucoolsuraj
离线
最后看到:10个月14个小时前
加入:2018-12-12 16:09
由于对话框中,

由于对话框中,

我想在这里评估和发布。

我还提出了另一篇关于I2C控制器与传感器接口的文章。

在在SDA线上传输从设备地址,控制器似乎不会在SDA设备地址发送ALVE设备的寄存器地址。

我能得到帮助吗?

谢谢

霍尼韦尔

PM_Dialog
离线
最后看到:14小时7分钟前
职员
加入:2018-02-08 11:03
嗨rajucoolsuraj,
rajucoolsuraj
离线
最后看到:10个月14个小时前
加入:2018-12-12 16:09
由于对话框中,

由于对话框中,
但是,当我想在没有睡眠模式的情况下启用GPIO IRQ时。

什么时候我应该在与peer连接之前处理中断;什么时候是广告?

谢谢

PM_Dialog
离线
最后看到:14小时7分钟前
职员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

可以在初始化时(.app_on_init)或在user_app_adv_start中启用IRQ。但是要注意,为了检测中断,你不能使用任何睡眠模式。如果您想要任何一种睡眠模式配置,您应该使用唤醒控制器。

谢谢,PM_Dialog

rajucoolsuraj
离线
最后看到:10个月14个小时前
加入:2018-12-12 16:09
由于对话框中,

由于对话框中,

我将利用唤醒IRQ,为主动和睡眠模式。GPIO似乎更好。

如果有任何通过GPIO使用WakeUp IRQ可能导致的错误遭遇,我想知道它

谢谢

PM_Dialog
离线
最后看到:14小时7分钟前
职员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

我强烈建议看看SDK的BLE_APP_SLEEPMODE示例,以便了解如何使用唤醒控制器。

谢谢,PM_Dialog

rajucoolsuraj
离线
最后看到:10个月14个小时前
加入:2018-12-12 16:09
你好对话框,

你好对话框,
在按钮回调的自定义消息处理程序中,在连接时使用WakeUp控制器是最好的用例。

在实施期间,我将恢复反过来的任何逻辑故障。

谢谢

PM_Dialog
离线
最后看到:14小时7分钟前
职员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

如果您想拥有任何睡眠模式,则解决方案是使用唤醒控制器以检测中断并唤醒。请检查app_button_enable()函数,在设备进入睡眠模式之前,可以启用唤醒控制器。您可以选择与WKUPCT_ENABLE_IRQ()函数检测唤醒中断的GPIO。您还可以配置极性和拆除时间。由于设备进入睡眠状态,并且向唤醒控制器发送中断,因此将触发注册到WKUPCT_REGISTER_CALLBACK()的回调函数。

谢谢,PM_Dialog

rajucoolsuraj
离线
最后看到:10个月14个小时前
加入:2018-12-12 16:09
你好对话框,

你好对话框,

我已经注册了多个回调使用WakeUp控制器回调注册,如何从几个GPIO的中断服务?

这是最后一个触发GPIO系统的吗?

谢谢

问候

PM_Dialog
离线
最后看到:14小时7分钟前
职员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

你能说明一下你都做了什么吗?如果我能正确理解,你配置固件从不同的gpio唤醒?如果是,第一个打开的会唤醒你的芯片。

谢谢,PM_Dialog

rajucoolsuraj
离线
最后看到:10个月14个小时前
加入:2018-12-12 16:09
你好对话框,

你好对话框,
谢谢。

此外,如何检查通过唤醒控制器触发中断的GPIO引脚源?

SDK中是否有允许我验证中断源的寄存器或机制?

谢谢

PM_Dialog
离线
最后看到:14小时7分钟前
职员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

没有寄存器将指示中断发生的端口/引脚,为了检查脉冲源,你可以做的是在设备被唤醒后读取引脚的状态。因此,根据pin状态,你将不得不决定哪个回调函数将被触发。请尽量不要在论坛上重复你的问题,你已经创建了一个类似的论坛线程,我已经在那里回复你:

https://support.dialog-semicondiondiondiondum/forums/post/dialog-smartbond-bluetooth-low-energy -%e2%80%93-software/multpreipre-code-space-wkupenableirq.

谢谢,PM_DIALOG.

rajucoolsuraj
离线
最后看到:10个月14个小时前
加入:2018-12-12 16:09
你好对话框,

你好对话框,

抱歉重复。是的,谢谢你的支持。

此外,我还提出了另一个问题。

问候

PM_Dialog
离线
最后看到:14小时7分钟前
职员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

没问题!让我们在您的其他论坛线程继续对话。

谢谢,PM_Dialog