尊敬的 TI 支持社区:
我正在尝试修改(drivers/spi/spi-omap2-mcspi.c)
OMAP4 mcspi 驱动程序、以便使用中断而不是轮询。
我使用 BeagleBone Black。
在我将 CS 置为活动状态并启用通道0和中断后、
我只接收两个中断(实际上是一对中断):
- tx0_empty 之后、我通过写入来填充 TX 缓冲器
mcspi TX reg n-times
然后在 IRQSTATUS 中复位标志
-作为对 tx0_empty 所采取操作的后续操作,
rx0_full 中断已上升、我读取了 mcspi Rx reg n 次
并在 IRQSTATUS 中复位标志。
之后没有中断(TX_EMPTY、RX_FULL 或 EOT 均无中断)
即使启用了中断和通道0并且 CS 处于活动状态、
因此我无法传输剩余的数据。
FIFO 被启用并且 OMAP2_MCSPI_XFERLEVEL 被相应地设置(但是、如果 FIFO 被禁用的话、会发生类似的情况)。
请注意、如果我要传输只需要一对的消息
中断、
然后 EOT 中断出现、这是预期的行为。
我仅使用了小于 dma_min_Bytes (160)的传输长度、因此不使用 dma。
如果我使用轮询方法来查看通道0上是否有挂起的内容
一切都运行良好(这是 SPI-OMAP2-mcspi.c 中的默认行为
OMAP2_mcspi_txrx_Pio())。
另一件事是:如果我将 CS 置为活动状态并启用通道0、则在 IRQSTATUS 中将会置位
向上计数 TX0_EMPTY、中断启用后、将发生 TX0_EMPTY 中断。
但是、如果我在启用中断前复位 IRQSTATUS 中的 TX0_EMPTY 位
(正如 AM335x 手册在第24.3.4.1章中所述、中断驱动操作:
中断状态位应在通道结束后始终复位
在事件作为中断源启用之前启用)
即使在此之后启用中断、也不会发生中断。
是否有人在中断模式(无 DMA)下使用 OMAP4 mcspi?
谢谢、此致、
L-C. 杜卡