嗨dialog,
我用的是DSP的例子,我遇到了一个问题希望能对你有所帮助。
我用一个定时器通过spi读取数据,每次大约1s,但是在读了5到6次后它就停止了(附页中的第1页),再过10秒,程序就失败了(第2页)。
你能帮我分析一下原因吗?
我用的例子是dsps_设备,可能uart中断与spi冲突?如果是,如何停止uart?
谢谢
本杰明
关键词:
设备:
嗨BenjaminDu,
platform_reset_func()由platform_reset()调用,它是ROM代码实现的。得到这个断言的最可能的原因是内存不足,因为您可能会尝试分配从未使用过的消息。例如,如果您正在分配通知消息,并且您的连接间隔很短,则消息将堆积起来,直到连接事件到达;但是,如果连接间隔较大,则在连接事件到达之前内存已用完。
谢谢,总理对话
嗨dialog,
非常感谢你的快速回复。
我的代码如附件所示,似乎没有未使用的数据。
我仍然认为spi I与uart有冲突
由于uart在我的项目中没有用处,
你能告诉我怎么阻止它吗?然后我可以测试uart是否与spi冲突。
谢谢
(我在另一个例子中测试了spi,效果很好)
我认为暴力是导致冲突的唯一原因
谢谢
本杰明
嗨BenjaminDu,
设备是从闪存启动还是从系统RAM启动?你一直在和UART交互吗?我会尝试复制它。如果你能和我分享你所做的修改,那将是非常有帮助的。
谢谢,总理对话
嗨dialog,
从系统启动时,uart之间几乎没有交互
我的主要修改如下
void timer\u回调(void)
{
国际标准;
iSSS=spi_事务(0x80040001);
//iSSS=(iSSS>>5)&0xFFFF;
//iSSS/=64;
//iSSS=1023;
拱门打印(“TTTTT\t”);
}
#ifdef CFG_打印f_UART2
GPIO_ConfigurePin(2,8,输出,PID_UART2_TX,假);
GPIO_ConfigurePin(2,9,输入,PID_UART2_RX,假);
#结束语
GPIO_ConfigurePin(0,0,输出,PID_SPI_CLK,假);
GPIO\u ConfigurePin(0,2,输出,PID\u SPI\u EN,真);
GPIO_ConfigurePin(0,5,输入,PID_SPI_DI,假);
GPIO_ConfigurePin(0,6,输出,PID_SPI_DO,假);
SPI\u Pad\u t SPI\u CS\u Pad;
spi峎CS_销垫=2;//2或
spi峎CS_焊盘端口=0;//SPI_端口;
spi\ u init(&spi\ u CS\ u Pad,spi\ u MODE\ u 32位,spi\ u ROLE\ u MASTER,spi\ u CLK\ u IDLE\ u POL\ u LOW,spi\ u PHA\ u MODE\ u 0,spi\ u MINT\ u DISABLE,spi\ u XTAL\ u DIV\ u 8);
初始化计时器();
timer0_register_callback(计时器_callback);
输出如下,然后停止,大约15秒,失败。附件是修改后的全部文件。
SPSS初始化
TTTTT其他邮件ID 3328
ttttttttttttttttttttttttttttttttttttttttttt
嗨dialog,
共修改了4个文档,全部在上面.pdf中,只需将它们复制并粘贴到相应的文档中,然后就可以对其进行测试了。
非常感谢你的帮助
本杰明
2019年10月17日
嗨BenjaminDu,
platform_reset_func()是由于内存不足,因此可以尝试通过在da1458x_config_advanced.h头文件中定义DB_heap_SZ来增加堆大小吗?
谢谢,总理对话
嗨dialog,
我把DB_HEAP_SZ增加了2倍和4倍,但还是崩溃了,不同的是DB_HEAP_SZ越大,崩溃的时间就越长。
你能帮我说说记忆是用在哪里的吗?
你有别的办法避免撞车吗?
谢谢
本杰明
嗨dialog,
以前我用的是SDK3.x uart_slave,DB_HEAP_SZ是1024,还是很好用的,我按照你的建议换了新的SDK,但是上面显示它崩溃了,我觉得是因为串口内存消耗,因为我的项目中没有使用串口,你能帮我建议一下如何停止串口吗?
谢谢
本杰明
嗨dialog,
可能spi与其他中断冲突?
因为spi可以很好地独立工作。
谢谢
本杰明
嗨BenjaminDu,
问题是由于内存不足。你能总结一下你为了复制你的问题所做的所有修改吗?DSP有UART和BLE活动,所以我不太确定这是否可以实现,因为系统将由于挂起的消息耗尽内存。你在另一个SDK项目中复制过吗?
谢谢,总理对话
嗨Dialog,
修改了以下3个文件:
主拱门
用户外设setup.c
da1458x\配置\基本.h
我复制了这3个文件的内容和它们在PDF文档中的修改,这3个文件之间用///////隔开,你可以在///////中找到添加了//Benjamin的修改。
我用SDK3.xuart_slave测试了相同的代码,它可以工作。
谢谢
本杰明10月23日。
嗨dialog,
我的项目是用dsp来读spi,我认为这是可能的。
谢谢
本杰明
10月24日
嗨dialog,
你能给我一个答复吗?
谢谢
本贾明杜10月25日
嗨dialog,
你说有悬而未决的消息,你能举例说明哪条消息?
谢谢
本雅明都
任何人都可以告诉我如何使用spi,同时也可以通过ble连接?
嗨dialog,
我测试的项目是dsp_设备.uvprojx,修改后的3个文件如附件所示
谢谢
本杰明
嗨BenjaminDu,
您不能同时有UART和SPI活动。SDK的bl_app_安全示例使用SPI flash n order存储绑定数据。请遵循用户\u CFG\u APP\u BOND\u DB\u USE\u SPI\u FLASH。为了初始化spiflash并与之交互,我建议您使用我们的api。也可以将spi_flash example作为参考(6.0.10.511\projects\target_apps\peripheral_examples\spi)。您能澄清一下您对DSP和SPI闪存的要求吗?
你应该使用app\u easy\u timer()API。每次计时器过期时,都会触发已注册的回调,因此您需要注册该回调以与SPI flash交互。请记住,DSP在默认情况下使用扩展睡眠模式,因此包括SPI在内的所有外围模块都将断电。
谢谢,总理对话
嗨BenjaminDu,
刚刚看到你附加的修改文件。我将尝试在一个干净的sps\u设备项目中测试它。您是否有定制板,或者您正在使用我们的DK?另外,您是否有另一台DA14585运行sps主机固件,或者您正在使用我们的DSPS移动应用程序进行连接?
谢谢,总理对话
嗨Dialog,
UART不是必须的,我使用UART以一种简单的方式输出数据,以便在调试过程中观察代码的运行情况,但是我测试了我的代码,如果我不使用UART输出任何东西,程序仍然可能崩溃,同样在SKD3.x中,我使用slave-UART和master-UART示例,UART与SPI配合得很好。
我测试了SPI峎flash示例,它可以很好地与SPI设备交互。
将数据通过我的设备发送到主机或移动设备上
你是说延长睡眠模式会使SPI失效吗?SPI停止了,也许这就是程序崩溃的原因?
谢谢
本杰明
嗨Dialog,
是的,我用的是客户板。
我使用sps_主机固件,也可以使用移动应用程序,两者都可以连接到dsps_设备
希望你能测试一下我的代码,帮我找出问题出在哪里。
谢谢
本杰明
你好,本杰明,
当处于睡眠模式时,所有外围模块包括I2C、UART、SPI均断电。在dsp示例中,默认情况下,睡眠模式为扩展睡眠模式。在UART的情况下,使用硬件流控制,以便在有可用数据发送或接收时唤醒设备。你能在活动模式下试试吗?
谢谢,总理对话
你好,
我测试了主动模式,它似乎有用,我会做更多的测试来确认它。
谢谢
本杰明
你好,本杰明,
扩展睡眠模式是个问题,因为,正如我在前面的回答中提到的,所有的外围模块都是在休眠模式下供电的。
谢谢,总理对话