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.

[参考译文] TMS320F28379D:在 TMS320F28379D 上使用 EMIF

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/878928/tms320f28379d-using-emif-on-tms320f28379d

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

您好!

我需要将 EMIF 与异步存储器(8位数据)配合使用。 我有一个关于地图绘制的问题;在数据表中,我们可以看到:

"需要特别注意的是 EMIF 与外部器件地址总线之间的连接。 EMIF 地址引脚 EM1A[0]始终提供一个32位字地址的最低有效位。 因此、当连接到16位或8位异步器件时、EM1BA[1]和 EM1BA[0]引脚分别提供半字或字节地址的最低有效位。 图25-9和图25-10显示了 EMIF 与所连接器件的数据和地址引脚之间针对不同已编程数据总线宽度的映射。 数据总线宽度可在异步 n 配置寄存器(ASYNC_CSn_CR)中配置。"

但是、当我查看 C2000 C:\ti\c2000\C2000Ware_1_00_06_00\device_support\f2837xd\examples\...中的示例时、我认为我们不使用这些引脚。

我的问题是:我的异步存储器(16k)需要14个地址引脚连接:
-我必须在 DSP 端口上将 A0连接到 A13?
-或者我必须将 EM1BA[0-1]和 A0连接到 A11?

对我来说不是很清楚。

谢谢你。

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

    您好!

    [引用 user="electrocc"]我的问题是:我的异步存储器(16k)需要14个地址引脚连接:

    您使用的异步存储器的字大小是多少? 连接将取决于这一点。 如果存储器字大小为16位、地址行0将连接到 EM!BA[1]、而其余所需 的地址行将连接到 EM1A[x:0]。

    谢谢

    Vasudha

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

    Vasudha、您好!

    您是指我的数据字大小? 我使用的是8位字大小。

    谢谢

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

    另一个问题是、因为我对 EMIF 文档的理解不是很好。

    这是我要使用的外部存储器的存储器映射:

    是否可以使用/EM1CS[3]与此器件通信?  

    此致

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

    您好!

    是的、您应该能够使用 CS3 (以及任何其它的异步芯片选择)来完成这个内存映射。 请注意、外部器件的存储器映射仅偏离设置地址。

    以下查询-

    [引述]我的问题是:我的异步存储器(16k)需要14个地址引脚连接:
    -我必须在 DSP 端口上将 A0连接到 A13?
    -或者我必须将 EM1BA[0-1]和 A0连接到 A11? [/报价]

    对于8位存储器接口、您必须将 EM1BA[0-1]和 A0连接到 A11。

    此致、

    Vivek Singh

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

    您好、Vivek、

    感谢您的回答。  

    [引用 user="Vivek Singh"]

    请注意、外部器件的存储器映射仅偏离设置地址。

    [/报价]

    这是我不理解的要点。 EMIF1从地址0x100000开始、如何写入内存的"区域消息写入"区域、从地址0x3B00到地址0x3C06?

    谢谢你

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

    您好!

    您可以将偏移地址添加到 EMIF 的基址。 因此、如果您希望写入地址0x3B00、则写入地址0x103B00、但请注意 C28x 访问是16位、因此它一次写入16位、这意味着写入0x103B00将转换为两个8位访问(因为您使用的是8位存储器) 地址0x3B00和0x3B01。

    希望这清楚说明。

    此致、

    Vivek Singh

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

    您好、Vivek、

    感谢您的回答、我将尝试。

    首先、我要测试一个简单的程序。
    我找到了一个线程 e2e.ti.com/.../774580,我已经用被叫方更正了该软件,我已经运行了它。
    数据引脚正在切换(示波器检查)、因此正常。 但是、当我查看存储器地址0x10 0000时、我只能看到0x0000

    //
    //包含的文件
    //
    #include "F28x_Project.h"
    
    #define ASRAM_CS2_START_ADDR 0x100000
    
    extern void setup_emif1_pinmux_async_16bit (UINT16);
    extern void Emif1Initialize (void);
    
    void main (void)
    {
    
    长期*义务;
    
    //初始化系统控制
    InitSysCtrl();
    Dint;
    
    //将 PIE 控制寄存器初始化为默认状态。
    //默认状态为禁用所有 PIE 中断和标志
    //被清除。
    //此函数位于 F2837xS_PIECTRL.c 文件中。
    //
    InitPieCtrl();
    
    //禁用 CPU 中断并清除所有 CPU 中断标志:
    EALLOW;
    IER = 0x0000;
    IFR = 0x0000;
    EDIS;
    
    //使用指向 shell 中断的指针初始化 PIE 矢量表
    // GService 例程(ISR)。
    //这将填充整个表,即使是中断也是如此
    //在本例中未使用。 这对于调试很有用。
    //可以在 F2837xS_DefaultIsr.c 中找到 shell ISR 例程
    //此函数可在 F2837xS_PieVect.c 中找到
    InitPieVectTable();
    
    //配置为在全速率上运行 EMIF1 (EMIF1CLK = CPU1SYSCLK)
    EALLOW;
    ClkCfgRegs.PERCLKDIVSEL.bit.EMIF1CLKDIV = 0x0;
    EDIS;
    
    EALLOW;
    //为 CPU1抓取 EMIF1
    EMIF1ConfigRegs.EMIF1MSEL.ALL = 0x93A5CE71;
    
    //禁用访问保护(CPU_Fetch、CPU_WR/DMA_WR)
    EMIF1ConfigRegs.EMIF1ACCPRT0.ALL = 0x0;
    
    
    //提交与保护相关的配置。 直到该位保持置位
    //无法更改 EMIF1ACCPROT0寄存器的内容。
    EMIF1ConfigRegs.EMIF1COMMIT.ALL = 0x1;
    
    
    //锁定配置,使 EMIF1COMMIT 寄存器不能
    //再更改。
    EMIF1ConfigRegs.EMIF1LOCK.ALL = 0x1;
    
    EDIS;
    
    
    emif1Initialize();
    
    setup_emif1_pinmux_async_16bit (0);
    
    //配置 CS2空间的访问时序
    EMIF1Regs.ASYNC_CS2_CR.ALL =(EMIF_ASYNC_ASIZE_16 |// 16位存储器接口
    EMIF_ASYNC_TA_1 |// 2个 EMIF 时钟的周转时间
    EMIF_ASYNC_RHOLD_1 1个 EMIF 时钟的|//读取保持时间
    EMIF_ASYNC_RSTROBE_4 |//读取4个 EMIF 时钟的选通时间
    EMIF_ASYNC_RSETUP_1 |//读取1个 EMIF 时钟的建立时间
    EMIF_ASYNC_whold_1 1个 EMIF 时钟的|//写入保持时间
    EMIF_ASYNC_WSTROBE_4 |// 1个 EMIF 时钟的写选通时间
    EMIF_ASYNC_WSETUP_1 |// 1个 EMIF 时钟的写入设置时间
    EMIF_ASYNC_EW_DISABLE |//扩展等待禁用。
    EMIF_ASYNC_SS_DISABLE //选通模式禁用。
    );
    
    占空比=(长整型*) ASRAM_CS2_START_ADDR;
    
    
    while (1)
    {
    *占空比= 0x35;
    }
    } 

    即使在28379D 上没有物理连接外部存储器、通常在存储器浏览器中、我也应该 能够在总线上看到数据?

    谢谢你。

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

    电 cc、

    您能否说明您是否连接了内存?

    即使没有附加存储器、也应该看到 EMIF 写入的地址、控制和数据总线活动。

    EMIF 读取只会产生地址总线和控制总线活动、这是因为假定外部存储器将驱动数据总线。  因此、如果没有外部存储器驱动数据信号、则读取数据被视为未定义。

    Tommy

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

    Tommy、

    感谢您的回答。

    不、我没有连接内存。 我只是想测试一个简单的程序、以了解 EMIF 的工作原理和 Code Composer 的功能。
    这就是为什么它很奇怪、因为我在总线上写入时看不到任何东西。

    此致

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

    您能否澄清以下观察结果?  它们似乎有冲突。  

    [引用 user="electrocc">Datas 引脚正在切换(示波器检查)、因此没关系。 但是、当我查看存储器地址0x10 0000时、我只能看到0x0000

    electrocc 说:
    这就是为什么它很奇怪,因为我在总线上写数据时看不到任何内容。

    如果您使用示波器监视数据引脚、则应在写入期间看到引脚活动。  CCS 本身只能报告读取、并且在有外部存储器之前不会检测到有意义的活动。

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

    很抱歉、我不清楚。

    当我使用示波器查看数据时、引脚 D0->D7正在切换。(我可以识别0x35)、但在 CCS 上、地址0x100000上的数据始终为0x0000。

    我想我们可以看到在 CCS 上写入的数据、即使我们没有连接外部存储器吗?

    那么、在 CCS 上、我们可以看到只读取数据吗?  
    为了进行调试、我们可以更轻松地读取发送的数据。

    此致

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

    不可以、除非连接了外部存储器器件、否则无法在 CCS 中看到读取数据。

    此致、

    Vivek Singh

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

    [引用 user="Vivek Singh"]

    不可以、除非连接了外部存储器器件、否则无法在 CCS 中看到读取数据。

    [/报价]

    您之前的回答不清楚。

    请填写:

    -在未连接存储器的情况下、我们是否可以在 CCS 中看到已发送的数据?是或否?
    -在未连接存储器的情况下、我们是否可以在 CCS 中看到读取数据?是或否? 通常不会

    -在连接存储器的情况下、我们可以在 CCS 中看到已发送的数据吗?是或否?
    -在连接存储器的情况下、我们可以在 CCS 中看到读取数据吗?是或否?

    谢谢

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

    Vivek 或 Tommy 有什么想法吗?

    谢谢你。

    此致

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

    您好!

    [报价]-在未连接内存的情况下、我们是否可以在 CCS 中看到已发送的数据?是或否? [/报价]

    是的、您可以写入。

    [报价]-如果未连接内存、我们是否可以在 CCS 中看到读取数据?是或否? [/报价]

    [报价] 在连接内存的情况下、我们可以在 CCS 中看到发送的数据吗?是或否?
    -在连接存储器的情况下、我们可以在 CCS 中看到读取数据吗?是或否? [/报价]

    是的、这两者都是。

    此致、

    Vivek Singh

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

    谢谢 Vivek。

    此致、