你好。
我有这项工作:
当 GPIO 变为低电平时、我必须从 SPI 读取1024Byte 并将其传输到 UDP。
这种机制(读取 SPI -通过 UDP 传输) 必须达到高吞吐率。
我开发了第一个固件、修改 network_terminal 并添加了一些代码:
我创建了名为 "RDGxxxxstart"的新终端命令。
当用户数字"RDGxxxstart"命令时,我将 NWP 配置为 P2P 角色、客户端等...
我开始两个线程:SPI - Thread 和 WiFi - Thread。
SPI - Thread 是一个监控 GPIOx 状态的无限循环、
当该 GPIOx 为低电平并且循环缓冲器中有足够的空间(由4个 x1KB 字节缓冲器组成)时
此线程从 SPI 读取1KB (以阻塞方式)、并将此字节"放入"环的缓冲区。
此线程具有优先级2。
WiFi - Thread 是一个监视循环缓冲区的无限循环:
当新缓冲区在环中可用时、线程读取缓冲区并将其发送到 UDP (以阻塞方式)。
第二个线程 具有相同的优先级。
当我运行 终端命令"RDGxxxxstart"并将 NWP 连接到 Samsung Cellar 的 Wi-Fi Direct 时
一切正常 (建立连接并开始线程)。
当我将 GPIO 置为低电平时,SPI -线程读取 SPI 数据和 WiFi -线程通过 UDP 传输.... 但在一段时间后、DMA 发生错误。
我的 PC 计数器进入这一行代码(ti_driver_config.c 第96行):
静态空 dmaErrorFxn (uintptr_t arg)
{
int status = map_uDMArrorStatusGet ();
map_uDMAErrorStatusClear ();
(笑声)
}
状态等于1