嗨,对话框中,
我用的是DSPS的例子,我遇到了一个问题希望你能帮助我。
我使用定时器通过spi读取数据大约1s一次,但它在5或6次读取后停止(page1在附件中),并在另一个10s后,程序失败(page2)。
你能帮我分析一下原因吗?
我使用的例子是dsps_device,也许uart中断与spi冲突?如果是,如何阻止uart?
谢谢
便雅悯
关键词:
设备:
嗨BenjaminDu,
Τhe platform_reset_func()由由ROM代码实现的platform_reset()调用。获得此断言的最可能原因是内存不足,因为您可能试图分配从未使用过的消息。例如,如果您正在分配通知消息,并且您的连接间隔很短,那么消息会一直堆积到连接事件到来,但是如果连接间隔很长,那么在连接事件到来之前内存就会耗尽。
谢谢,PM_Dialog
嗨,对话框中,
非常感谢您的快速回复。
我的代码如附件所示,似乎没有未使用的数据。
我仍然认为spi与uart有冲突
由于uart在我的项目中毫无用处,
你能告诉我怎么阻止它吗?然后我可以测试uart是否与spi冲突。
谢谢
(我在另一个例子中测试spi,它工作得很好)
我认为行为不当是导致冲突的唯一原因
谢谢
便雅悯
嗨BenjaminDu,
设备是从flash引导还是从System-RAM引导?您是否持续地与UART进行交互?我会试着复制它。如果你能和我分享一下你所做的修改,那将是非常有帮助的。
谢谢,PM_Dialog
嗨,对话框中,
从系统启动,uart之间几乎没有交互
我的主要修改如下
空白timer_callback(空白)
{
int空间站;
iss = spi_transaction (0 x80040001);
/ /空间站= (iss > > 5) &0xFFFF;
/ /空间站/ = 64;
/ /空间站= 1023;
arch_printf(“TTTTT \ t”);
}
# ifdef CFG_PRINTF_UART2
GPIO_ConfigurePin(2,8, OUTPUT, PID_UART2_TX, false);
GPIO_ConfigurePin(2,9, INPUT, PID_UART2_RX, false);
# endif
GPIO_ConfigurePin(0, 0, OUTPUT, PID_SPI_CLK, false);
GPIO_ConfigurePin(0,2, OUTPUT, PID_SPI_EN, true);
GPIO_ConfigurePin(0,5, INPUT, PID_SPI_DI, false);
GPIO_ConfigurePin(0,6, OUTPUT, PID_SPI_DO, false);
SPI_Pad_t spi_CS_Pad;
spi_CS_Pad。Pin = 2;/ / 2或
spi_CS_Pad。端口= 0;/ / SPI_PORT;
spi_init(&spi_CS_Pad, SPI_MODE_32BIT, SPI_ROLE_MASTER, SPI_CLK_IDLE_POL_LOW, SPI_PHA_MODE_0, SPI_MINT_DISABLE, SPI_XTAL_DIV_8);
timer_init ();
timer0_register_callback (timer_callback);
输出如下,然后停止,大约15秒,失败。附件是修改后的整个文档。
SPSS Init
TTTTT other msgstr 3328
哒哒哒,哒哒哒
嗨,对话框中,
总共修改了4个文档,都在上面的。pdf中,只需将它们复制并粘贴到相应的文档中,然后就可以测试了。
非常感谢你的帮助
便雅悯
2019.10.17
嗨BenjaminDu,
platform_reset_func()是由于内存不足,所以您可以尝试通过在da1458x_config_高级.h头文件中定义DB_HEAP_SZ来增加堆大小吗?
谢谢,PM_Dialog
嗨,对话框中,
我增加了DB_HEAP_SZ 2倍和4倍,但它仍然崩溃,区别是DB_HEAP_SZ的大小越大,它崩溃的时间就越长。
你能帮忙说一下内存用在哪里吗?
你有其他避免撞车的方法吗?
谢谢
便雅悯
嗨,对话框中,
以前我使用SDK3。x uart_slave,DB_HEAP_SZ是1024,仍然可以正常工作,我按照你的建议换了新的SDK,但是它崩溃了,如上图所示,我认为这是由于串行端口内存消耗,因为我的项目没有使用串行端口,你能帮忙建议如何停止串行端口吗?
谢谢
便雅悯
嗨,对话框中,
也许spi与其他中断冲突?
由于spi可以很好地独立工作。
谢谢
便雅悯
嗨BenjaminDu,
问题是由于内存不足。为了复制你的问题,你能总结一下你所做的所有修改吗?DSPS有UART和BLE活动,所以我不太确定这是可以实现的,因为系统会因为挂起消息而耗尽内存。你是否复制了另一个SDK项目?
谢谢,PM_Dialog
嗨,对话框中,
修改如下3个文件:
arch_main.c
user_periph_setup.c
da1458x_config_basic.h
我复制了这3个文件的内容和他们的修改在PDF文档中,这3个文件用///////////分开,你可以在有//Benjamin添加的地方找到修改。
我用SDK3测试了相同的代码。X uart_slave,它可以工作。
谢谢
本杰明,10月23日。
嗨,对话框中,
我的项目是使用dsps来读取spi,我认为这应该是可能的。
谢谢
便雅悯
10月24日
嗨,对话框中,
你能给我一个答复吗?
谢谢
10月25日
嗨,对话框中,
你说有待处理的消息,能举例说明是哪条消息吗?
谢谢
BenjaminDU
任何人都可以告诉我如何使用spi,同时,也可以连接到ble?
嗨,对话框中,
我测试的项目是dsps_device。Uvprojx,修改后的3个文件如附件
谢谢
便雅悯
嗨BenjaminDu,
您不能同时拥有UART和SPI活动。SDK的ble_app_security示例使用SPI flash n来存储绑定数据。请遵循USER_CFG_APP_BOND_DB_USE_SPI_FLASH。为了初始化并与SPI flash交互,我建议您使用我们的api。你也可以把spi_flash的例子作为参考(6.0.10.511\projects\target_apps\peripheral_examples\spi)。请问您对DSPS和SPI flash的要求是什么?
您应该使用app_easy_timer() API。每次定时器过期,注册的回调都会被触发,所以你需要注册回调来与SPI flash交互。请记住,DSP在默认情况下使用扩展睡眠模式,因此包括SPI在内的所有外围模块都将断电。
谢谢,PM_Dialog
嗨BenjaminDu,
刚刚看到你附上的修改文件。我将尝试在一个干净的sps_device项目中测试它。你有定制板吗,或者你正在使用我们的dk ?另外,您是否有另一个运行sps_host固件的DA14585,或者您正在使用我们的DSPS移动应用程序进行连接?
谢谢,PM_Dialog
嗨,对话框中,
UART不是必须的,我使用UART以一种简单的方式输出数据来观察调试期间运行的代码,但我测试了我的代码,如果我不使用UART输出任何东西,程序仍然会崩溃,也是在SKD3中。x,我使用slave_uart和master_uart的例子,UART与SPI工作良好。
我测试了SPI_flash的例子,它可以与我的SPI设备很好地交互。
我的要求是通过SPI读取数据并将数据发送到对等设备(移动或sps_host)
你是说延长睡眠模式会使SPI失效吗?和SPI停止,也许这是程序崩溃的原因?
谢谢
便雅悯
嗨,对话框中,
是的,我用的是客户板。
我使用sps_host固件,我也可以使用移动应用程序,它们都可以连接到dsps_device
希望你能有我的代码测试,并帮助我找出问题在哪里。
谢谢
便雅悯
你好,本杰明,
当处于休眠模式时,包括I2C、UART、SPI在内的所有外围模块都下电。以DSPS为例,休眠模式默认为扩展休眠模式。对于UART,硬件流控制用于在有可用数据发送或接收时唤醒设备。你能在活动模式下试试吗?
谢谢,PM_Dialog
你好,
我测试了主动模式,似乎有效,我会做更多的测试来确认。
谢谢
便雅悯
你好,本杰明,
扩展睡眠模式是问题所在,因为正如我在之前的回答中提到的,所有外围模块都是在睡眠模式下供电的。
谢谢,PM_Dialog