This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294NCZAD:EPI HB16 FIFO 在读取开始时无法写入

Guru**** 2482105 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/716642/tm4c1294nczad-epi-hb16-fifo-cannot-write-while-read-started

器件型号:TM4C1294NCZAD

我们在 HB16 FIFO 模式下使用 EPI 从 FPGA 中实现的 FIFO 读取/写入数据。

我们在乒乓缓冲模式下将读取连接到 DMA。  一旦一个读取完成、我们就使用函数 EPINonBlockingReadStart 使用另一个缓冲区开始另一个读取。

这一切都很好、除了它阻止我们在读取过程中写入。  这意味着、即使读取 FIFO 为空、并且没有读取活动、外设仍然拒绝发送数据(内部4深 TX FIFO 已满)。

在进行读取并被 FIFOEMpty 行阻止时、外设是否不支持写入?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Petar T. 说:
    外设是否不支持在进行读取并被 FIFOEMPty 行阻止时进行写入?

    它不支持在读取正在进行且被阻止时写入。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我执行了以下代码、出于某种原因、尽管停止了读取、但写入仍然不起作用、它将只填充4深写 FIFO:

    EPINONBlockingReadStart (EPI0_BASE、0、20);
    EPINONBlockingReadStop (EPI0_BASE、0);
    
    uint16_t data = 0;
    对于(I = 0;I < 16;+I)
    {
    //等待写 FIFO 有足够的空间
    //返回是否有空插槽
    while (EPIWriteFIFOCountGet (EPI0_BASE)=0);
    
    HWREGH (0xA0000000)=数据;
    ++数据;
    }
    

    写入操作的唯一时间是在读取开始自行完成后、或者在程序开始时从未开始读取。

    我已确保接收数据的 FIFO 未满。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    从数据表中、您似乎需要等待 EPISTAT.ACTIVE 清零、然后清空 FIFO。