大家好、
我正在使用 TMS320F28069 MCU 和 CCS 6。 我正在尝试 在 我们自己的硬件和 GUI 之间与大容量器件通信。 我 每500ms 使用 USBBufferDataWritten()函数发送30个字节数据
从一开始就发送数据没有问题。 但 6-7分钟后、MCU 不再发送数据。 我已经在调试模式中检查了问题所在、我意识到 USB 的底层没有空间接受另一个数据包。 因为"ulPacket"值在 ScheduleNextTransmission ()中保持为"0"。
静态空调度 NextTransmission (const tUSBBuffer *psBuffer)
{
tUSBBufferVars *psVars;
unsigned long ulPacket、ulSpace、ulTotal;
//
//获取指向工作区变量的指针。
//
psVars = psBuffer->pvWorkspace;
//
//询问下层是否有空间接受另一个数据包。
//
ulPacket = psBuffer->pfnAvailable(psBuffer->pvHandle);
//
//如果返回的值不是零,则可以写入该数字
//字节数到底层。
//
if (ulPacket)
{
//
//缓冲区中有多少连续数据?
//
ulSpace = USBRingBufContigUsed(&psVars->sRingBuf);
//
//缓冲区中有多少总数据?
//
ulTotal = USBRingBufUsed(&psVars->sRingBuf);
//
//假设有连续字节,将连续字节写入底层
//要发送的内容。
//
if (ulSpace)
{
//
//确定在此传输中可以发送的最大块大小。
//
ulSpace =(ulSpace < ulPacket)? ulSpace:ulPacket;
//
//调用下层发送新数据包。 电流
//数据跨越缓冲区换行,告诉下层可以
//等待第二次调用以填充整个数据包
//传输它。
//
psBuffer->pfnTransfer (psBuffer->pvHandle、
(psVars->sRingBuf.pucBuf +
psVars->sRingBuf.ulReadIndex)、ulSpace、
((((ulSpace < ulPacket)&&
(ulSpace < ulTotal))? false:true);
//
//我们是否需要发送第二部分来填写数据包? 这种情况
//如果当前数据包跨越缓冲区换行,则会发生。
//
if ((ulSpace < ulPacket)&&(ulSpace < ulTotal))
{
//
//数据包跨越了换行。 还有多少空间
//数据包?
//
ulPacket = ulSpace;
//
//我们实际上可以发送多少数据?
//
ulSpace = ulTotal - ulSpace;
ulSpace =(ulSpace > ulPacket)? ulPacket:ulSpace;
psBuffer->pfnTransfer (psBuffer->pvHandle、
psVars->sRingBuf.pucBuf、ulSpace、true);
}
}
//
//尚未更新环形缓冲区读取索引。 我们一旦开始就会执行该操作
//确保数据包已正确传输。
//
}
}
有人能不知道低层为什么不接受任何数据包吗?
此致
优素福