你好,
我们希望定期读取i2c以上的传感器,最好是在da14585唤醒时进行BLE广告。
要读取传感器,我们必须首先通过驱动引脚唤醒传感器,等待~1ms,然后通过i2c读取8字节的数据。
这个序列本身可以工作,但是当我尝试在回调user_app_main_loop_callbacks中执行它时。App_on_system_powered或user_app_main_loop_callbacks。不知怎么的,我卡住了。
从perid_init调用的i2c初始化顺序:
空白init_acc_i2c(空白)
{
SetBits16(CLK_PER_REG, I2C_ENABLE, 1);//开启I2C时钟
SetWord16 (I2C_ENABLE_REG 0 x0);//禁用I2C控制器
SetWord16 (I2C_CON_REG 0 x0063);//12c主地址,7bit从地址,100kbit
SetWord16 (I2C_TAR_REG ACCELEROMETER_I2C_ADDR);
SetWord16 (I2C_ENABLE_REG 0 x1);//启用I2C控制器
}
读取传感器数据的代码,我尝试从上面描述的回调中调用:
空白read_sensor_sequentially(空白)
{
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);
(我= 0;< 7;我+ +)
{
WAIT_WHILE_I2C_FIFO_IS_FULL ();
SetWord16 (I2C_DATA_CMD_REG 0 x0100);
}
GLOBAL_INT_RESTORE ();
(我= 0;< 7;我+ +)
{
WAIT_FOR_RECEIVED_BYTE ();//等待接收到的数据
data[i]=(0xFF & GetWord16(I2C_DATA_CMD_REG));//获取接收到的字节
}
GPIO_SetInactive (ACCELEROMETER_ENABLE_PORT ACCELEROMETER_ENABLE_PIN);
WAIT_UNTIL_I2C_FIFO_IS_EMPTY ();//等待txfifo为空
WAIT_UNTIL_NO_MASTER_ACTIVITY ();//等待,直到没有主活动
}
是否有可能使用任何回调来实现这一点?
致以最亲切的问候
马丁
嗨mapart,
如果要定期读取传感器,可以使用app_easy_timer() API。每当计时器过期时,将触发已注册的回调,因此您需要注册正在读取传感器的回调。如果每次读取DA1458的传感器,你能分享更多的细节吗?设备在发布间隔或连接间隔之间进入休眠模式。您是否将其配置为进入深度睡眠模式,就像SDK的ble_app_sleepmode示例所演示的那样?
谢谢,PM_Dialog
你好,
提供一些背景信息:
SDK版本:6.0.10.511。
在这个项目中,我们使用ble_app_security作为基础,但将其配置为使用扩展睡眠模式。这使得设备在广告之间进入睡眠状态。
理想情况下,我们希望在da14585每次醒来执行广告时读取该传感器。
如果我们使用app_easy_timer(),设备将从睡眠中唤醒来读取传感器,对吗?
对我们来说,最好是在设备已经唤醒时读取传感器。
致以最亲切的问候
马丁
嗨mapart,
通过使用app_easy_timer(),您可以实现传感器的周期性读取。你的设备最初是广告,而它的广告传感器应定期读取应用程序,一段时间后,你停止广告,当设备唤醒配置唤醒控制器,应用程序应开始再次定期读取传感器。对吗?或者您想在每个广告间隔读取传感器?请让我知道并分享你到底想要完成什么。如果能给你提供正确的指导方针,那会很有帮助的。
谢谢,PM_Dialog
你好,
是的,我想在每个广告间隔(687.5毫秒)读取传感器。
我想我设法得到这个工作通过使用回调:
user_app_main_loop_callbacks.app_on_system_powered
谢谢你的帮助。
致以最亲切的问候
马丁
嗨mapart,
很高兴你找到了你的问题,谢谢你接受了答案。
谢谢,PM_Dialog
你好,对话框,
另一个工作流的类似示例-
传感器>> i2c >> DA14586。
RTC >> GPIOx / WKUP中断>> DA14586
BLE的正常操作将根据SDK提供的示例应用程序进行广告。亚博国际官网平台网址
当从RTC引发中断时,BLE仍处于广告模式
记录时间戳;记录传感器数据;将传感器数据存储在闪存中;
当BLE连接到peer -时
禁用RTC中断;通过BLE将Flash数据传输到中央设备(通常是智能手机);
你能帮我的代码插入和处理-
1.RTC中断处理(活动和睡眠状态)
2 .BLE传输使用dsp从Dialog。
谢谢
嗨rajucoolsuraj,
如果我能够正确理解,您想在获得中断正确时唤醒设备吗?因此,设备将处于睡眠模式,当您从RTC(请澄清RTC是什么)获得中断时,设备将唤醒并开始发布广告。如果您想遵循这个实现,我建议您看一下SDK的ble_app_sleepmode示例。唯一的区别是,在这个例子中,DA14585/6从一个由按钮按下产生的中断中唤醒。您是在使用dsp应用程序代码还是开发了自定义应用程序?请检查dsp应用程序代码中的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
由于对话框中,
我想评估一下,然后贴在这里。
我还提出了另一个关于I2C控制器接口与传感器的帖子。
在SDA线上发送从设备地址后,控制器似乎没有发送备用设备的寄存器地址。
能帮我一下吗?
谢谢
拉
霍尼韦尔
嗨rajucoolsuraj,
我已经在这个论坛上回复了你:
https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bluetooth-low-energy-%E2%80%93-software/rtc-pcf85063a-i2c-using-i2ceeprom-api
谢谢,PM_Dialog
由于对话框中,
但是,当我想在没有睡眠模式的情况下启用GPIO IRQ。
在与peer连接之前,我应该在什么时候处理中断;当periph是广告的时候?
谢谢
拉
嗨rajucoolsuraj,
您可以在初始化时(.app_on_init)或在user_app_adv_start中启用IRQ。但是要注意,你不能使用任何睡眠模式来检测中断。如果您想要任何睡眠模式配置,您应该使用唤醒控制器。
谢谢,PM_Dialog
由于对话框中,
我将对活动模式和睡眠模式都使用唤醒IRQ。它似乎比GPIO更好。
如果有任何错误的遭遇,可能导致使用唤醒IRQ通过GPIO,我想知道它
谢谢
嗨rajucoolsuraj,
我强烈建议您看一下SDK的ble_app_sleepmode示例,以便了解如何使用唤醒控制器。
谢谢,PM_Dialog
你好,对话框,
在按钮回调的自定义消息处理程序中连接时使用WakeUp控制器是最好的用例示例。
如果在执行过程中出现任何逻辑故障,我将返回。
谢谢
嗨rajucoolsuraj,
如果你想有任何睡眠模式,解决方案是使用唤醒控制器,以检测中断和唤醒。请检查app_button_enable()函数,该函数在设备进入睡眠模式之前启用唤醒控制器。可以使用wkupct_enable_irq()函数选择可以检测唤醒中断的GPIO。您还可以配置极性和退出时间。由于设备进入睡眠状态,并且您向唤醒控制器发送中断,因此将触发注册到wkupct_register_callback()中的回调函数。
谢谢,PM_Dialog
你好,对话框,
我已经注册了多个回调使用唤醒控制器回调注册,如何从几个GPIO的服务中断?
是注册的GPIO中最后一个触发的吗?
谢谢
问候
拉
嗨rajucoolsuraj,
你能解释一下你做了什么吗?如果我能够正确理解,您将固件配置为从不同的gpio唤醒?如果是,第一个打开将唤醒你的芯片。
谢谢,PM_Dialog
你好,对话框,
谢谢。
此外,如何检查通过唤醒控制器触发中断的GPIO引脚源?
SDK中是否有任何寄存器或任何机制允许我验证中断源?
谢谢
拉
嗨rajucoolsuraj,
没有寄存器可以指示中断发生的端口/引脚,为了检查脉冲源,您可以做的是在设备被唤醒后读取引脚的状态。因此,根据引脚状态,您将不得不决定触发哪个回调函数。请尽量不要在论坛上重复你的问题,你已经创建了一个类似的论坛线程,我已经在那里回复了你:
https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bluetooth-low-energy-%E2%80%93-software/multiple-code-space-wkupenableirq
谢谢,PM_DIalog
你好,对话框,
很抱歉有重复。是的,谢谢你的支持。
此外,我还提出了另一个关切。
问候
拉
嗨rajucoolsuraj,
没问题!让我们在你的其他论坛上继续讨论吧。
谢谢,PM_Dialog