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.

[参考译文] 编译器/TMS320F28377D:EMIF 与16位 ASRAM 之间的问题

Guru**** 2547030 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/626588/compiler-tms320f28377d-a-question-between-emif-and-16bit-asram

器件型号:TMS320F28377D

工具/软件:TI C/C++编译器

我想使用28377D 将 EMIF1配置为16位异步模式。 我使用64K SRAM 和 CS3作为芯片使能。 我遵循技术参考手册 EM1BA[1]-A[0]、EM1A[12:0]-A[13:1]、EM1A[17]-A[14]、EM1A[18]-A[15]。 我已经配置了这些引脚的 GPIOMUX。

在我看来、地址应为0x300000--0x303FFF、0x320000--0x323FFF、0x340000--0x343FFF、0x360000--0x363FFF

当我在0x300000中写入数据时、0x320000 也将同时写入相同的数据。当我在0x320000中写入数据时、0x300000 也将同时写入相同的数据。  当 我在0x340000中写入数据时、0x360000也会同时写入相同的数据。当我在0x360000中写入数据时、0x340000 也会同时写入相同的数据。  其他地址的条件相同。 首先 ,我怀疑  在 EM1A[17]有一个玫瑰联合。 但 EM1A[17]和 A[14] 已连接到电路板上。  

代码如下:

#define 地址(UINT16 *) 0x300000

UINT 16 offset=0;

对于(i=0;i<=0x3FFF;i++)
{offset = i;

*(地址+偏移量)= i;}

请帮助我并告诉我如何解决此问题。

谢谢!

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

    您使用的是哪种内存? 您能否发送存储器数据表的链接。

    Vivek Singh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    感谢你的答复。 我使用 IDT70V28L15PFGI
    我还有另外两个问题。
    1.如果我正常配置 EMIF、EM1BA[1]-A[0]、EM1A[14:0]-A[15:1]并且我在0x300001中写入数据、EM1BA[1]是否会设置为"1"以选择 A[0]。 或者另一个示例、如果我在0x308000中写入数据、EM1A[14]是否将设置为"1"以选择 A[15]? 我怀疑 EM1A[18]始终连接到物理地址19、并且始终为"0"。 这是否意味着 CS3不能使用 EM1A[18](CS3存储器映射0x300000-0x37FFFF)
    2.如果我将 EM1A[18]配置为 GPIO。 我使用程序来判断地址并使 GPIO 输出为"1"或"0"。 工作正常吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我还想问另一个问题。 如果我使用 CS3、我可以使用 EMIF18吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    谢谢。

    [引述] 1. 如果我正常配置 EMIF、EM1BA[1]-A[0]、EM1A[14:0]-A[15:1]并在0x300001中写入数据、EM1BA[1]是否会设置为"1"以选择 A[0]。 或者另一个示例、如果我在0x308000中写入数据、EM1A[14]是否将设置为"1"以选择 A[15]? 我怀疑 EM1A[18]始终连接到物理地址19、并且始终为"0"。 这是否意味着 CS3不能使用 EM1A[18](CS3存储器映射0x300000-0x37FFFF)

    确实是正确的。 A[18]不会用于 CS3、因为它超出了 CS3地址范围。

    [引述] 2. 如果我将 EM1A[18]配置为 GPIO。 我使用程序来判断地址并使 GPIO 输出为"1"或"0"。 工作正常吗? [/报价]

    是的、这应该起作用、但您需要正确映射地址。 当您写入地址0x32_0000时、它基本上会切换地址行 EA1A16、而该地址行尚未连接到外部存储器、因此它与外部 RAM 的30_0000相同。

    希望这能澄清问题。

    Vivek Singh

    [注-更新了答案。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    首先、感谢您的帮助。 这确实有助于我解决这个问题。
    我还有另一个问题。 如果我使用 EMIF[18]作为 GPIO 来控制地址、如何使用它。 当我想写入0x340000时、我使用"GPIO_WritePin (91、1)"? 但它不起作用。 或者我必须考虑 EMIF 时间序列或其他一些时间序列?
    对于(i=0;i<=0x3FFF;i++)

    偏移= offset_z + I;
    offset_x =偏移和 address_jiexi;
    offset_y = offset_x >> 17;
    如果(OFFSET_y = 0x0)

    GPIO_WritePin (91、0);
    *(HED_DRAM_ADDR +偏移量)=温度;
    temp++;

    否则、如果(OFFSET_y = 0x1)

    GPIO_WritePin (91、0);
    *(HED_DRAM_ADDR +偏移量)=温度;
    temp++;

    否则、如果(OFFSET_y = 0x2)

    GPIO_WritePin (91、1);
    *(HED_DRAM_ADDR +偏移量)=温度;
    temp++;

    否则、如果(OFFSET_y = 0x3)

    GPIO_WritePin (91、1);
    *(HED_DRAM_ADDR +偏移量)=温度;
    temp++;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您应该能够将 A18用作 GPIO 引脚并通过软件对其进行控制。 您是否检查了示波器以确保该引脚按预期切换? 由于这是地址引脚、只要在 EMIF 事务开始之前驱动它来校正值、它就应该是好的。

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