主题中讨论的其他器件:DRV8305、 MOTORWARE
您好!
看到以下代码(来自文件 DRV8305.C 中的函数 DRV8305_readSpi)出现问题、该代码行检查 FIFO 的状态、记录缓冲区中有一个字、但读取结果(传入的 SPI 字)、有时这种情况大约在1%的时间内发生、 正在读取之前接收到的字、而不是最新的一个……
因此我怀疑由于某种原因、实际的字尚未完全接收(在您传输16位时、以 Write 指令开始、接收所有16位都需要时间)、因此我在写入后添加了一些延迟、解决了问题。 但这不是一个解决方案、我们需要了解发生这种情况的原因。
那么、问题是、为什么缓冲区状态会随着一个字恢复为有效、而没有字呢? 应通过复位 SPI SPI_resetRxFifo (obj->spiHandle)来复位状态;??
请告诉我。
BTW、我们为什么读取 EMU 寄存器而不读取 RX 寄存器、或者读取 FIFO 更好?
//构建控制字
ctrlWord =(uint16_t) DRV8305_buildCtrlWord (CtrlMode_Read、regAddr、data);
//将 Rx FIFO 指针重置为零
spi_resetRxFifo (obj->spiHandle);
spi_enableRxFifo (obj->spiHandle);
//编写命令
spi_write (obj->spiHandle、ctrlWord);
//等待响应填充 RX FIFO,否则将发生等待超时
while (((RxFifoCnt < SPI_FifoStatus_1_Word)&&(WaitTimeOut < 0xFFFF))
{
RxFifoCnt = SPI_getRxFifoStatus (obj->spiHandle);
if (++WaitTimeOut > 0xFFe)
{
obj->RxTimeOut = true;
}
}
//阅读该词
readWord = SPI_readEmu (obj->spiHandle);