工具/软件:TI-RTOS
您好!
代码:
空任务()
{
DmaInit()
while (1){
Semaphore_pend ();
}
}
void DmaInit(){
SPIRX();//in 乒乓模式
SPITX();//in 乒乓模式
SPIDMAInterrupt ();//DMA TX 和 Rx 中断;
}
IniHandler(){
针对 TX 和 Rx 的//ping pong 重新配置
count++;
Semaphore_post ();
}
int main()
{
Task_init();
返回0;
}
以上是配置为从器件的代码和器件的概述。
我遇到的问题是、我无法在 SPI DMA 处理程序中发布信标。
每个 乒乓缓冲器大小为64字节。 如果我发送最小到128字节的数据、信标发布工作正常。
如果我发送的字节超过128字节(添加 ping 和 pong) 、我将收到以下错误。
断言失败:A_overflow:计数已超过65535并已回滚。
xdc.runtime.Error.raise:终止执行
该错误表示信标发布保持在发布状态、但如果我禁用信标发布并检查计数值在每次启动传输时提供2倍的次数、则会显示该消息。
这意味着在没有信标发布的情况下、接收和发送 N 个数据。
问题:
1.为什么在发布信标发布后触发上述错误?
启用信标发布后、计数值也会递增 N 次。 但如果没有信标、它将以2的倍数增加。
这意味着工作正常。
3.您能不能就 如何处理乒乓缓冲器中的 DMA 接收到的数据提供任何建议。
我已附上 reference.e2e.ti.com/.../spi_5F00_dma.c 的代码
下面是使用64字节乒乓缓冲器接收256字节数据、并在 ISR 函数中禁用 Semaphore_post 的快照。 计数在运行时的表达式中捕获。
下面是在 ISR 中以相同代码启用 samephore_post 的快照
此致、
Manohar