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.

[参考译文] TMS570LC4357:EMIF BE8/BE32转换

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/737712/tms570lc4357-emif-be8-be32-conversion

器件型号:TMS570LC4357

我们在 TMS570LC4357上使用 EMIF (具有 ARMRegisteredCortexRegistered- R5F)。 根据数据表(如下所示)、EMIF 为 BE8、器件为 BE32。 数据表中提供了连接总线以执行格式转换的说明。

 

我们的器件包含一个32位只读寄存器、地址为0x60000024、设置为0x18101207、该器件使用数据表中给出的 BE8/BE32接线连接到 EMIF。 我们已经观察到、读取地址偏移量0x4和0x6为16位(半字)读取数据时、数据看起来是正确的、但当读取偏移量0x4处的32位字时、半字会交换。 结果如下:

 

读取 ADDR=0x60000024、size=16;返回值= 0x1207 <-预期值

读取 ADDR=0x60000026、size=16;返回值= 0x1810 <-预期值

读取 ADDR=0x60000024、size=32;返回值= 0x12071810 <-意外值(预期为0x18101207)

 

您能解释一下这种半字交换行为吗?

 

Coretex-R5手册表明它不支持 BE32、但是 TMS570数据表表明这个器件是 BE32。 您能解释一下这种分歧吗?

 

 

TMS570LC4357产品说明书(SPNS195C–2014年2月–2016年6月修订):

EMIF 本质上是 BE8、即字节不变的大端字节序。 该器件是 BE32、即字不变大端字节序。 连接 RAM 或使用8位宽数据总线时没有区别。 但是、当从外部 ROM 读取数据或通过16位宽数据总线连接到硬件寄存器时、会产生影响。 通过将 EMIF_DATA[7:0]连接到 ROM 或将 ASIC DATA[15:8]、将 EMIF_DATA[15:8]连接到 ROM 或 ASIC DATA[7:0]、可以将 EMIF 设置为 BE32。

或者、存储在 ROM 中的代码可以链接为-be8而不是-be32。

 

对于16位 EMIF 接口上的32位访问、将首先输出低16位(EMIF_BA[1]将为低电平)、然后输出高16位(EMIF_BA[1]将为高电平)。

 

Coretex-R5技术参考手册(ARM DDI 0460D ID092411):

处理器支持字节不变的大字节序 be-8和小字节序 LE。 处理器不支持字不变的大字节序 be-32。 C1的位[7]、控制寄存器始终为0。

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

    Cortex-R5 CPU 是小端字节序或字节不变的大端字节序(BE8)。 设计中有字节"滑动程序"、使 CPU 看起来像一个 BE32处理器。 我将在明天回来讨论您观察到的字读取交换。

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

    注释显示:"对于16位 EMIF 接口上的32位访问、将首先输出低16位(EMIF_BA[1]将为低电平)、然后输出高16位(EMIF_BA[1]将为高电平)。"

    这是进行32位读取时观察到的内容。

    此致、
    Sunil