主题中讨论的其他器件:HALCOGEN
大家好、
我尝试编写一个 SPI 驱动程序、该驱动程序通过轮询和传输组使用 MIBSPI。
传输组/ MIB 部分工作正常、而轮询则导致我出现问题!
数据表 、SPNU514B、2015年4月-表27-24。 SPI 接收缓冲寄存器(SPIBUF)字段描述为:
发送数据缓冲区已满。此标志为只读标志。 在 TX 移位寄存器满时写入 SPIDAT0或 SPIDAT1域将自动置位 TXFULL 标志。 一旦该字被复制到移位寄存器、TXFULL 标志将被清除。 当 TXBUF 和 TX 移位寄存器都为空时、写入 SPIDAT0或 SPIDAT1不会置位 TXFULL 标志。
我的理解是、这个标志完全由控制 器管理、并且每次它为"0"时、我可以将数据写入 SPIDAT1。 我的问题是从未设置此标志、并且轮询算法始终认为 TXBUF 是空闲的。 因此、7个 SPI 帧的传输结果只有帧1、4和7出现在逻辑分析仪上。 我已经记录了轮询期间发生的所有 SPIBUF 读取、其中大约有64个在软件超时前发生、并且 TXFULL 标志从未被置位。 根据我对数据表的理解、RXEMPTY 标志的行为确实如此。 我在写入 SPIDAT1时放置一个调试 GIO 脉冲、可以看到在第一个2MHz 8位帧完成传输之前、轮询将三次写入 SPIDAT1寄存器。 这似乎与数据表相矛盾、因为 TX 移位寄存器和 TXBUF 应该在第二次写入后都已满。
我已经在 HalCoGen 代码中查找了安装、它使用 SPIFLG 寄存器(RXINTFLG)的位8来确定传输是否完成。 这不是一种非常有效的实现方式、因为它会导致传输帧之间存在间隙。 由于 TXBUF 保持满、TXFULL 标志机制可确保在一个帧完成后立即加载 TX 移位寄存器。
我已查看勘误表、找不到任何相关内容。
有人能纠正我对这种机制的误解吗?