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.

[参考译文] TM4C129ENCPDT:TM4C129ENCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1522339/tm4c129encpdt-tm4c129encpdt

器件型号:TM4C129ENCPDT

工具/软件:

您好!

我在测试 EPI 性能时遇到问题。 我正在使用 EPI 与 Lattice FPGA 连接。

设置详细信息:

静态 int32_t SetEpiParams
(
EpiDriverConfigParamsType* params //<EPI 参数指针
)

  int32_t 返回值=-1;

  IF (参数)
  {
    params->clkDiv = 64;
    params->config =(EPI_GPMODE_CLKPIN | EI_GPMODE_CLKGATE | EI_GPMODE_FRAME50 | EI_GPMODE_ASIZE_20 | EI_GPMODE_DSIZE_8 | EI_GPMODE_WRITE2CYCLE);
    params->frameCount = 0;
    params->addrMap =(EPI_ADDR_PER_BASE_NONE | EPI_ADDR_PER_BASE_A);

    returnVal = 1;

  }

  返回值;
}

起始基址:  

#define EI_PERIPH_ADDR        0xA0000000

我正在进行的测试将一个随机8位值写入偏移0、然后将另一个随机8位写入偏移1。 然后、我返回并从偏移量0和偏移量1中读取。 如果这些值读回原始值的倒数、则该测试通过、偏移量会递增2、该过程会继续进行。

问题是、一旦我的地址等于0xA0000110、代码在我尝试执行读取时会冻结。 我已断开 FPGA 连接、但仍然无法从该地址读取、调试器本身也不会进一步执行任何操作。

我怀疑我错误地设置了 EPI。 我希望它是通用的、20个地址位、8个数据位。

e2e.ti.com/.../epi_5F00_drv.ce2e.ti.com/.../epi_5F00_drv.he2e.ti.com/.../epi_5F00_test.he2e.ti.com/.../epi_5F00_test.c

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

    您好、Noah:

    Unknown 说:
    问题在于、一旦我的地址等于0xA0000110、当我尝试执行读取时代码会冻结。

     您能否在 EPIADDDRMAP 寄存器中查看 EPSZ? 看起来您只有256B 的 EPSZ。 这就是为什么跨越0x100会导致意外结果。 如果外部 FPGA 的地址范围高达64KB、则需要添加 EI_ADDR_PER_SIZE_64KB。 如果 FPGA 地址范围高达256MB、则需要添加 EI_ADDR_PER_SIZE_256MB。  

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

    查尔斯

    感谢您的答复。 是的、这看起来可行、但我在使用这些寄存器时仍然有一些混淆。  

    首先、ECADR 和 EPIADDDRMAP 寄存器中的 EPSZ 位字段有何区别? 我无法想象这两个值会有所不同的示例。

    其次、我尝试使用所有20位、因此我应该有1 MB 的地址空间。 但是、这不是选项、但16 MB 和256 MB 可用于除通用模式之外的模式。 我是否正确使用了通用模式? 这是否是 FPGA 连接的优选模式? 我问,因为它似乎是在某种"边缘"模式下操作。

    第三、下面是我的代码、似乎可以正常工作。 至少、我现在可以不停止地浏览所有地址空间。

    静态 int32_t SetEpiParams
    (
    EpiDriverConfigParamsType* params //<EPI 参数指针
    )

      int32_t 返回值=-1;

      IF (参数)
      {
        params->clkDiv = 64;
        params->config =(EPI_GPMODE_CLKPIN | EI_GPMODE_CLKGATE | EI_GPMODE_FRAME50 | EI_GPMODE_ASIZE_20 | EI_GPMODE_DSIZE_8 | EI_GPMODE_WRITE2CYCLE);
        params->frameCount = 0;
        params->addrMap =(EPI_ADDR_PER_SIZE_16MB | EI_ADDR_PER_BASE_A);

        returnVal = 1;

      }

      返回值;
    }

    谢谢!