嗨,对话框中,
我目前正在开发固件使用DSPS应用程序与DA14580芯片上的自定义板。在这个项目中,我使用GPIO引脚来打开和关闭外部微控制器,以便在微控制器不使用时节省电力。当我需要使用单片机,我发送一个简短的命令DA14580使用移动电话,然后DA14850醒来外部微控制器GPIO销,树立UART,发送简短的命令,然后等待接收数据发送到手机。
不用打开/关闭外部的单片机,我就可以在单片机和手机之间成功的来回发送数据。然而,我认为当我在运行时重新配置引脚时,它会导致数据在接收时丢失,有时会导致DA14580在某处挂起。(启用看门狗会重置看门狗,禁用看门狗后,手机蓝牙断开,设备不再发布)
在启动时,在“set_pads_function”中,引脚将被设置为GPIO输出低,以防止外部微控制器引脚上的任何电压。
当我用手机连接该设备时,我禁用了睡眠模式。
在函数“user_sps_server_data_rx_ind_handler”中,我启动一个定时器来处理我的应用程序进程。
第一次定时器回调发生时,我配置引脚以打开我的外部微控制器并设置我的UART引脚。TX, RX, CTS和RTS。(我已经定义了HW流量控制)
几秒钟后,出于测试目的,我禁用了计时器,以防它引起任何问题。然后,我向外部单片机发送出指令。我可以看到外部微控制器已经正确接收并处理了命令。
然后,外部微控制器以240字节块的形式向DA14580发送3000+字节。
此时,我可以看到所有字节都已在一个作用域上通过UART发送。DA14580将以两种方式之一作出反应:
1.设备与DSPS移动应用程序断开连接,处于某种状态。
2.如果设备没有卡住的话。我可以查看从DSPS移动应用程序接收的字节数,在最后一个接收文件中将有~1940字节。
如果我最初设置引脚为UART,并有微控制器“上”,DA14580能够处理240字节块没有HW流控制启用。DA14580还能够在传输期间不设置RTS引脚的情况下,在启用流控制的情况下处理240个字节块。
我怀疑有几件事可能导致这个问题:
当我在运行时从GPIO重新配置引脚到UART时,我需要做什么?
当我重新配置引脚,可能导致我无法处理所有3000+字节时,我需要对SPS调度程序做什么?
任何有帮助的,谢谢你的时间
嗨ao,
让我查一下您的问题,然后尽快给您答复。
谢谢,PM_Dialog
嗨ao,
正如您所提到的,您已经根据应用程序的需要修改了DSPS引用应用程序代码,因此复制您的问题有点困难。你能告诉我代码在哪里卡住了吗?
你能启用WDOG,运行带有热连接调试器的固件吗?WDOG过期的原因是什么?
如何在运行时重新配置引脚?是否调用了peripher_init () ?
我不太清楚你这个问题的意思,所以你能试着多解释一下吗?
谢谢,PM_Dialog
我最近没有在研究这个问题,但很快就会回来。让我马上就我所能做的作出回应:
1.我怎么知道wdog过期的原因?
2.重新配置引脚的最好方法是什么?我正在调用一个函数来改变下面所示的引脚。另外,在peripher_init()中使用“sam_on”标志来决定是将引脚设置为GPIO还是UART。我想设备每次从睡眠中醒来时都会调用peripher_init(),这是真的吗?
空白turn_off_sam(空白)
{
GPIO_SetPinFunction(GPIO_UART1_TX_PORT, GPIO_UART1_TX_PIN, INPUT, PID_GPIO);
GPIO_SetPinFunction(GPIO_UART1_RX_PORT, GPIO_UART1_RX_PIN, INPUT, PID_GPIO);
#如果(UART_HW_FLOW_ENABLED)
GPIO_SetPinFunction(GPIO_UART1_RTS_PORT, GPIO_UART1_RTS_PIN, INPUT, PID_GPIO);
GPIO_SetPinFunction(GPIO_UART1_CTS_PORT, GPIO_UART1_CTS_PIN, INPUT, PID_GPIO);
# endif / / UART_HW_FLOW_ENABLED
GPIO_ConfigurePin(GPIO_PORT_1, GPIO_PIN_0, OUTPUT, PID_GPIO, true);
sam_on = false;
}
3.只要我不打开/关闭外部微控制器,DSPS是完全功能的。
4.我注意到sps调度程序在睡觉之前和之后都是reinit。是否可以完全初始化SPS调度程序,然后在需要时初始化SPS ?理想情况下,我希望能够在不需要的时候初始化引脚/sps,然后在需要的时候重新初始化一切。当设备未连接时,不需要SPS,因此这次将对它进行去初始化。在连接过程中,我从移动设备向DA14580发送一个命令,然后DA14580需要初始化SPS,打开外部单片机并进行通信,然后关闭单片机,初始化SPS。
何鸿燊ao,
1.当看门狗超时时,触发NMI_HandlerC。请检查下面的教程从我们的支持门户,以了解如何调试您的固件。你应该遵循的过程与教程中描述的相同://www.wsdof.com/sites/default/files/training_08_deb..。请注意,最大WDOG超时时间是2.6秒,这个值我们在SDK中使用。
2.您是正确的,每次芯片唤醒时,都会执行peripher_init。您正在使用的睡眠模式配置是什么?请确认是否正确触发了peripher_init,并正确地进行了重新配置?我的建议是将引脚重新配置到user_peripher_setup .c文件中
关于你的最后一个问题,我不太明白你的意思。你能再解释一下吗?“当设备没有连接时,SPS是不需要的,所以这次将解初始化”是什么意思?”?我的建议是尝试使用附加的调试器帽将固件运行到调试模式,并尝试找到固件卡住的地方。
谢谢,PM_Dialog