嗨,对话,
我用的是DSP的例子,我遇到了一个问题,希望大家能帮忙。
我使用一个定时器通过spi读取数据,每次大约1s,但在读取5或6次后停止(附件中的第1页),再过10s,程序失败(第2页)。
你能帮我分析一下原因吗?
我使用的示例是dsps_设备,可能uart INTRUP与spi冲突?如果是,如何停止uart?
谢谢
本杰明
关键词:
设备:
嗨BenjaminDu,
t平台重置函数()由平台重置函数()调用,该函数由ROM代码实现。获得此断言的最可能原因是内存不足,因为您可能会尝试分配从不使用的消息。例如,如果您正在分配通知消息,并且您的连接间隔很小,则消息会堆积起来,直到连接事件到达,但是如果连接间隔很大,则在连接事件到达之前内存就会耗尽。
谢谢,下午好
嗨,对话,
非常感谢您的快速回复。
我的代码如附件所示,似乎没有未使用的数据。
我仍然认为spi I与uart冲突
由于uart在我的项目中没有用处,
你能告诉我怎么阻止它吗?然后我可以测试uart是否与spi冲突。
谢谢
(我在另一个例子中测试spi,它工作得很好)
我认为spi_制裁是导致冲突的唯一原因
谢谢
本杰明
嗨BenjaminDu,
设备是从闪存引导还是从系统RAM引导?您是否一直在与UART进行交互?我将尝试复制它。如果你能与我分享你所做的修改,那将非常有帮助。
谢谢,下午好
嗨,对话,
从系统引导时,uart之间几乎没有交互
我的主要修改如下
无效计时器\u回调(无效)
{
int iSSS;
iSSS=spi_事务(0x80040001);
//iSSS=(iSSS>>5)&0xFFFF;
//iSSS/=64;
//iSSS=1023;
arch_printf(“TTTTT\t”);
}
#ifdef CFG_PRINTF_UART2
GPIO_配置引脚(2,8,输出,PID_UART2_发送,错误);
GPIO_配置引脚(2,9,输入,PID_UART2_RX,错误);
#恩迪夫
GPIO_ConfigurePin(0,0,输出,PID_SPI_时钟,错误);
GPIO_配置引脚(0,2,输出,PID_SPI_EN,真);
GPIO_配置引脚(0,5,输入,PID_SPI_DI,假);
GPIO_配置引脚(0,6,输出,PID_SPI_DO,false);
SPI_Pad_t SPI_CS_Pad;
spi_CS_Pad.pin=2//2或
spi_CS_Pad.port=0;//SPI_端口;
spi初始化(和spi初始化模式、spi模式32位、spi角色主机、spi时钟空闲、spi PHA模式0、spi薄荷禁用、spi外部分区8);
计时器_init();
定时器0寄存器回调(定时器回调);
输出如下,然后停止,大约15秒,失败。附件是修改后的整个文档。
SPSS初始化
TTTTT其他msgid 3328
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
嗨,对话,
总共修改了4个文档,都在上面的.pdf中,只需将它们复制并粘贴到相应的文档中,就可以进行测试了。
非常感谢你的帮助
本杰明
2019.10.17
嗨BenjaminDu,
平台_reset_func()是由于内存不足造成的,因此您可以尝试通过在da1458x_config_advanced.h头文件中定义DB_heap_SZ来增加堆大小吗?
谢谢,下午好
嗨,对话,
我将DB_HEAP_SZ增加了2倍和4倍,但它仍然崩溃,不同的是DB_HEAP_SZ的大小越大,崩溃所需的时间越长。
你能告诉我内存在哪里使用吗?
你有其他方法避免撞车吗?
谢谢
本杰明
嗨,对话,
以前我使用SDK3.x uart_slave,DB_HEAP_SZ是1024,但它仍然工作得很好,我按照你的建议换了新的SDK,但是它崩溃了,如上所示,我认为这是由于串行端口内存消耗,因为我的项目中没有使用串行端口,你能帮助建议如何停止串行端口吗?
谢谢
本杰明
嗨,对话,
可能spi与其他中断冲突?
因为spi可以独立工作。
谢谢
本杰明
嗨BenjaminDu,
问题是由于内存不足。为了复制您的问题,您能总结一下您所做的所有修改吗?DSP具有UART和BLE活动,因此我不确定这是否可以实现,因为系统将由于挂起的消息而耗尽内存。您是否在另一个SDK项目中进行了复制?
谢谢,下午好
嗨,对话,
修改了以下3个文件:
主拱门c
用户_periph _setup.c
da1458x_配置_基本.h
我在PDF文档中复制了3个文件的内容及其修改,3个文件之间用/////////分隔,您可以在添加的地方找到修改。
我用SDK3.xUART_从机测试了相同的代码,它可以工作。
谢谢
本杰明,10月23日。
嗨,对话,
我的项目是使用DSP通过spi进行读取,我认为这应该是可能的。
谢谢
本杰明
10月24日
嗨,对话,
你能给我一个答复吗?
谢谢
本杰明杜10月25日
嗨,对话,
你说有待处理的消息,请举例说明哪条消息?
谢谢
本杰明杜
任何人都可以告诉我如何使用spi,同时,也可以通过ble连接?
嗨,对话,
我测试的项目是dsps_device.uvprojx,修改后的3个文件如附件所示
谢谢
本杰明
嗨BenjaminDu,
您不能同时进行UART和SPI活动。SDK的ble_app_安全示例使用SPI flash n顺序存储绑定数据。请遵循用户\u CFG\u APP\u BOND\u DB\u使用\u SPI\u FLASH。为了初始化SPI flash并与之交互,我建议您使用我们的API。您还可以参考spi_flash示例(6.0.10.511\projects\target_apps\peripheral_examples\spi)。您能否澄清您对DSP和SPI闪存的要求?
您应该使用app\u easy\u timer()API。每次计时器过期时,都会触发已注册的回调,因此需要注册回调以与SPI闪存交互。请记住,默认情况下,DSP使用扩展睡眠模式,因此包括SPI在内的所有外围模块都将断电。
谢谢,下午好
嗨BenjaminDu,
刚刚看到你附加的修改文件。我将尝试在一个干净的sps_设备项目中测试它。您是否有定制板,或者您正在使用我们的DK?另外,您是否有另一台DA14585运行sps_主机固件,或者您正在使用我们的DSPS移动应用程序进行连接?
谢谢,下午好
嗨,对话,
UART不是必须的,我使用UART以一种简单的方式输出数据,以观察调试期间运行的代码,但我测试了我的代码,如果我不使用UART输出任何东西,程序仍然可能崩溃,同样在SKD3.x中,我使用slave_UART和master_UART示例,UART与SPI配合得很好。
我测试了SPI_flash示例,它可以很好地与我的SPI设备交互。
我的要求是通过SPI读取数据并将数据发送到对等设备(即移动或sps_主机)
你的意思是延长睡眠模式会禁用SPI吗?SPI停止了,也许这就是程序崩溃的原因?
谢谢
本杰明
嗨,对话,
是的,我用的是客户板。
我使用sps_主机固件,也可以使用移动应用程序,两者都可以连接到dsps_设备
希望您能对我的代码进行测试,并帮助我找出问题所在。
谢谢
本杰明
嗨,本杰明,
在睡眠模式下,包括I2C、UART、SPI在内的所有外围模块均断电。在DSP示例中,默认情况下,睡眠模式为扩展睡眠模式。对于UART,使用硬件流控制,以便在有可用数据发送或接收时唤醒设备。你能在活动模式下试试吗?
谢谢,下午好
你好
我测试了主动模式,它似乎工作,我会做更多的测试来确认它。
谢谢
本杰明
嗨,本杰明,
延长睡眠模式是个问题,因为正如我在前面的回答中提到的,所有外围模块都是在睡眠模式下通电的。
谢谢,下午好