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.

[参考译文] TMS320F28335:eZdsp TMS320F28335

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/971969/tms320f28335-ezdsp-tms320f28335

器件型号:TMS320F28335
主题中讨论的其他器件: C2000WARETI-CGTcontrolSUITE

大家好、

好的、我们收到了客户关于 TMS320F28335的查询。 为了让我不会错过任何信息、请复制下面的查询。

"

网址: e2e.ti.com/.../419126

在这篇文章中、它说...

"我正在使用 InitExtMemIf 初始化 DSP2833x_CodeStartBranch.asm 中的外部存储器

我有 InitExtMemIf。 asm (David M. Alter)文件、该文件来自 TI 社区的上一篇文章、并已进行修改。

我已在 InitExtMemIf 中进行了修改。 基于 GEL 文件中给定的 GPCMUX1、GPCMUX2、GPBMUX1、GPAMUX2和 XTIMING6值的 asm 文件。"

但是、该程序无法正常运行。

我的程序所做的就是打开 eZdsp 板上的 LED。

我需要激活外部存储器、因为我的实际.ebss 仅适用于外部存储器(256kB)

(我的实际 FFT 程序的.ebss)

代码看起来不像正在运行、因为板载链路不会打开。 我还在.gel 文件中取消了注释“XINTF_Enable”。 "

请参阅附加的文件。"

e2e.ti.com/.../8637.Files.zip

感谢您的参与、并期待您的善意回应。

此致、

梅纳德

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

    Maynard、

    单在源代码片段中就很难找到潜在的问题。  我建议我们尝试将焦点缩小到 Project 编译问题或 XINTF 配置问题。

    对于工程编译、请参阅当自动运行被禁用并且程序被加载到器件中时、PC 是否位于 codestart 部分。

    如果该操作正常、则单步执行 CODE_START InitExtMemIf 序列、以查看 XINTF 初始化是否按预期执行。  确认所需的值正在写入寄存器。  Memory 浏览器窗口可被用于在整个序列中测试 XINTF 接口的功能性。

     如有需要、可使用一个简单的从闪存运行示例作为参考:~\C2000Ware_XXXX\device_support\F2833x\examples\flash_F28335\

    Tommy

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

    Inii

    Tommy、您好!

    我肯定会在你的团队中造成一些困惑。 也许、我应该先直截了当地说、HPE 会接受我的道歉。

    首先、我使用 eZdsp F28335已经超过10年了、现在、尽管最近我还使用更先进的 F28377D 控制卡。 不过、所有这些都是通过 MATLAB/Simulink-CCS 平台实现的。 换句话说、我从未实际使用过 CCS 进行调试、存储器读取、外设监控等 尽管我已经看过几次它的工作原理、但在某些场合和非常简单的任务。 这并没有停止为电源转换器编写工作完美的应用、但这是另一个故事。

    最近,我的一名学生创建了一个 FFT 项目,需要大量的内存。 按照预期、该程序不适合原始.cmd 链接器文件中的默认 ebss 分配。 过去、我们通过加入一些可用的存储器块、轻松地解决了类似的问题。 不过、这次应用程序是详尽的存储器、我们别无选择、只能使用外部存储器。

    我们已通过取消注释 GEL 文件中相应的行来"启用"外部存储器、并且我们已修改 cmd、以便链接器将外部存储器分配给 ebss (在第0页的 ZONE7P 中对其进行补充、并完全删除标签 ZONE7D )、就像这样  

    ZONE7P:   origin=0x100000、length=0x1FFFF

    (笑声)

    剖面{

    (笑声)

    .ebss:      >ZONE7P,  PAGE = 0

    然后、我们检查了.map 文件并确保一切都准备就绪。

     

    但是、代码执行不正确。 为了使事情更加透明、我们删除了除代码之外的所有内容、该代码每隔几秒在 GPIO32上闪烁一次板载 LED 开启和关闭。 简单地说、我们将代码保持在最小值以加快编译时间、但我们仍然希望在外部存储器中保持 ebss。

    仔细阅读论坛中的帖子、我们发现 David Alter 的一些建议、即这可能是由于 ebss 代码中使用和更新变量的方式造成的。 因此、我尝试使用  InitExtMemIf 来初始化 DSP2833x_CodeStartBranch.asm 中的外部存储器如果执行以下一些指令、请执行以下操作:

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/419126?External-memory-not-working-during-FLASH-F28335-

    但是、这些指令还指向外设(GPIO、ADC 等)还必须指向可用/适当的存储器地址的方向。 我相信这是在  InitExtMemIf.asm 文件中完成的,我们还将该文件作为附加源代码包含在 Simulink 文件中。 但是、我们无法理解如何正确完成此操作(所选地址背后的逻辑是什么)、即使我们注意到接受 David Alter 建议的人确实更改了其中 GPIO 地址的原始设置。

    很抱歉、您的介绍很长、但现在您可以更好地了解我们的卓越水平、我相信您也可以更好地指导我们。

    因此、我相信您所附的图片来自 CCS、它允许用户设置代码在加载到电路板中后的执行方式。 但是、这不是我在 CCS 7.4中可以找到的、因为在编译 Simulink Sketch 期间 CCS 在"背景"中使用。 在 CCS 3.3天后、我可以直接加载.out 文件并查看生成的所有 C 代码。 现在、它没有这样的选项、我也不知道如何在 禁用自动运行并将程序加载到器件中时检查 PC 是否位于 codestart 部分。

    假设我想将大多数(如果不是全部)外部存储器仅用于.ebss 而不是其他目的、您能否解释一下如何在分步过程中完成这一操作、或许可以参考并更正我上面提到的几点? 在开始检查所有这些是否都通过 CCS 正确完成以及代码的分步执行之前、我们会错过什么? 例如、我们是否必须以  某种特殊方式设置在 InitExtMemIf 中访问外设的方式?

    为此目的,我在这篇文章中附上:

    1).map 文件、您可以在其中查看代码和数据如何放置在内存中。

    2)  2)我们已更改的 DSP2833x_CodeStartBranch.asm、以便正确加载 ebss 变量(或者我们认为这是它的使用方式)。

    3)  3) InitExtMemIf 具有外设设置。

    谢谢、

    Panagis

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

    [引用 USER="Panagis Vovos"]但是、指令还指向外设(GPIO、ADC 等)还必须指向可用/合适的存储器地址的方向。 我相信这是在  InitExtMemIf.asm 文件中完成的,我们还将该文件作为附加源代码包含在 Simulink 文件中。 但是、我们无法理解如何正确完成此操作(所选地址背后的逻辑是什么)、即使我们注意到接受 David Alter 建议的人确实更改了其中 GPIO 地址的原始设置。[/引述]

    您能告诉我这些说明吗?  我看不到您所引用的线程中提到的地址映射。

    [引述 USER="Panagis Vovos">假设我想将大多数(如果不是全部)外部存储器仅用于.ebss 而不是其他用途、您能否解释一下如何在分步过程中完成这一操作、或许可以参考并更正我上面提到的几点? 在开始检查所有这些是否都通过 CCS 正确完成以及代码的分步执行之前、我们会错过什么? 例如、我们是否必须以  某种特殊方式设置在 InitExtMemIf 中访问外设的方式? [/报价]

    只有配置 XINTF 的要求似乎包含在.asm 中。

    Panagis Vovos 说:
    为此,我已将此帖子

    我无法看到附件。

    我在原始附件中注意到代码似乎使用 ZONE6、而 InitExtMemIf .asm 最初是为 ZONE7编写的。  是否为从 ZONE7到 ZONE6的开关更新了 GPIO 配置?

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

    感谢您的回答。

    附件可在引用的.zip 文件中 Maynard 的开票便笺中找到。 不过、我将在这里重复所有这些内容、并提供更好的说明。

    >>此处<<您可以找到链接器文件 c28335ext.cmd。 如您所见、我首先在 第0页将 ZONE7P 设置为:origin=0x100000、length=0x1FFFF

    我已经命名了 ZONE7P、我认为它涵盖了原始 ZONE7D 和 ZONE7P 区域、因此我已从链接器文件中完全删除了 ZONE7D 的定义。

    然后、我要求.ebss 在 ZONE7P 中自行定位、方法是在同一个 liker 文件中指定:.ebss:      > ZONE7P、        PAGE = 0

    >><<是使板载 LED 闪烁的 Simulink 文件。

    >><<是 Simulink 原理图的屏幕截图,以防打开原始文件时出现问题。

    当我开始为电路板构建代码时、我可以在诊断窗口中看到:

    "C:/PROGRA~3/MATLAB/supPOR~1/R20b/3P778C~1.ins/TIC200~1.ins/TI-CGT~1.LTS/BIN/C2000~-z -ic:/progra~3/mobj MemPOR~~~1/R2033b/texclus_b.microcontrollers-tex-mc2c.r=tex-mc1024_m_ram_m_m_ram_ram_ram_ram_ram_init-out-tex-mc1024_memb_m.m_m_m_memb.micro-status_ram_ram_ram_ram_memb.micro-out-t.microcontrollers-m.-tex-mc102c.-tex-m_ram_ram_ram_ram_ram_ram_memb_m=t.-m.micro-m.micro-tex-m.pr-out_ram_ram_ram_ram_ram_ram_ram_ram_ram_ram_ram_ram_ram_ram_ram_init /ProgramData/MATLAB/SupportPackages/R2020b/toolbox/target/supportpackages/tic2000/src/c28335ext.cmd /ProgramData/MATLAB/SupportPackages/R2020b/toolbox/target/supportpackages/tic2000/src/c2833xPeripherals.cmd /ProgramData/MATLAB/SupportPackages/R2020b/toolbox/shared/supportpackages/tic2000/rtlib/IQmath_fpu32.lib /ProgramData/MATLAB/SupportPackages/R2020b/3P.instrset/tic2000codegentools.instrset/ti-cgt-c2000_18.12.2.LTS/lib/rts2800_fpu32.lib /ti/controlSUITE/libs/math/FPUfastRTS/V100/lib/rts2800_fpu32_fast_supplement.lib

    这意味着链接器文件 c28335ext.cmd 按其应有的方式同时包含>InitExtMemIf .asm <<和>DSP2833x_CodeStartBranch.asm <<。  

    >>此处<<您可以找到编译后创建的.out 文件。 通过查看创建的.map 文件(您可以在此处进行检查)<<根据我的理解,.ebss 的代码被放置在正确的内存空间(Zone7P)。

    在我的案例中、只有一件事与原始帖子中描述的不完全相同。 在我的 CodeStartBranch 中找到的初始化例程是_c_int00、但指令引用的是较短的_c_int0。 如您在.map 文件中所见:入口点符号:"_c_int00"地址:00008562。 当然、我可以看到我 的_c_int00无处不在、而不是_c_int0、这就是我毕竟使用"_c_int00"的原因、但我只是想确保这里没有问题。

    结论:eZdsp F28335板载 LED 不闪烁、我想代码不运行。

    希望事情更清晰一点、

    Panagis

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

    Panagis、

    我同情您从 Simulink 到芯片的全面编程支持请求。  很遗憾、我不熟悉 Simulink 环境及其底层代码生成和构建过程、因为它是 TI 不支持的第三方工具。  我的理解是、Mathworks 和硬件制造商之间的联合开发程度各不相同。  对于 C2000器件、开发仅由 Mathworks 完成。  因此、我的专业知识仅限于 C2000器件和通过 CCS 使用。

    您是否能够确认 InitExtMemIf.asm 中使用的 pinmux 设置?  请注意、XZCS6和 XZCS7映射到不同的 GPIO 引脚、因此如果您计划使用 ZONE6、则必须更新 GPIO 配置、ZONE6属于 CMD 文件中定义的地址范围:

    接下来、如果您查看 DSP2833x_CodeStartBranch.asm 文件、您可以看到自定义开始段别名为 codestart、而标准 C 初始化段别名为_c_int00

    您的.map 指向 RAM 中的_c_int00作为入口点、这意味着程序绕过 DSP2833x_CodeStartBranch.asm

    我假设在执行仿真器 Load-Run 时初始化不起作用、因为在没有 XINTF 初始化的情况下、无法访问定义的.ebss 空间。  对于从上电启动的闪存引导、我在0x33FFF6处看到没有任何映射到闪存跳转分支地址的内容:

    作为参考、C2000Ware 中的从闪存运行示例在其.map 文件中生成:

    和:

    在 CCS 中、有一个工程链接器选项可指定自定义入口点:

    我不知道如何使用 Simulink 完成此操作。  我希望 Mathworks 能够提供指导。

    Tommy

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

    尊敬的 Tommy:

    感谢您提供宝贵信息。 通过 在 Simulink 中的链接器参数中添加-e"code_start"、我设法使我的程序从 DSP2833x_CodeStartBranch.asm 开始。 我猜、它只是  与您在后台调用的方法相同的链接器、并且起作用。 我还在代码生成选项卡中勾选了相关的“从闪存引导(独立执行)”,因此映射文件现在看起来像>>这个<<。

     如您所见、新的映射文件现在包含整个包: 入口点符号:"code_start" 地址:0033fff6

    然后、正如您建议的、稍后:

    codestart
    0 0033fff6 00000002
    0033fff6 00000002 DSP2833x_CodeStartBranch.obj (codestart)

    但是、在我开始与 Mathworks 沟通之前、请允许我"点击"更长时间、了解您的体验。 您的回复的第一部分仍不清楚:"您是否能够确认 InitExtMemIf .asm 中使用的 pinmux 设置? 请注意、XZCS6和 XZCS7映射到不同的 GPIO 引脚、因此如果您计划使用 ZONE6、则必须更新 GPIO 配置、该地址范围属于 CMD 文件中定义的地址范围"。

    我只在 Simulink (LED 闪烁)中使用 GPIO 32、根据 InitExtMemIf 文档、可以在 GPBMUX1寄存器位0-1中找到。 在 InitExtMemIf 的开头、 GPBMUX1设置为位于地址0x00006F96。 在.map 文件中可以看到 GpioCtrlRegs 位于第1页的00006f80、比6F96早一些。 在初步 的 TMS320x2833x DSC 外部接口参考指南中、我发现"许多 XINTF 引脚与通用 I/O 复用 在使用 XINTF 之前、必须先为 XINTF 操作配置 GPIO 多路复用器寄存器。"

    这是您所指的吗? 或者、如果我知道一种方法来检查 0x00006F96上的寄存器在代码执行期间是否发生变化、您是说什么? 我在哪里配置它们?  

    如果能提供任何帮助、我们将不胜感激、因为我在 Mathworks 进行的研究在这一领域几乎没有取得任何成果。

    谢谢、

    Panagis

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

    [引用 USER="Panagis Vovos"]"许多 XINTF 引脚与通用 I/O 进行多路复用 必须先为 XINTF 操作配置 GPIO 多路复用器寄存器、然后才能使用 XINTF。"[/QUERP]

    是的、这就是我所指的内容。  您可以在 TRM 的 GPIO 引脚多路复用部分中找到有关其工作原理的更多信息。

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

    大家好、Tommy、

    我做了两件事、以便与您在同一页上。

    首先、我研究了 Pinmux 配置的表格。 为了充分理解、我必须将 GPBMUX1寄存 器的值设置为 GPIO 32、XZCS0n 和 XZCS7n 被激活(表1-48)。 因此、我已经在 InitExtMemIf 中设置了相应地址(0x00006F96) 0xFFFFFFFC 的值。

    其次、坦率地说、我安装了 CCS3.3、这是我知道自己在做什么的唯一版本。 在这里、我加载了.out 文件、以便我可以监控代码(即使它是由 Matlab 创建的)和存储器的执行情况。 我可以验证 0x00006F96处的 GPBMUX1是否设置为 0xFFFFFFFC。 此外、我可以看到 LED 不闪烁、因为 GPIO32对应的 GPBDAT 的最后一位(0x00006FC8)保持恒定、等于0。 我可以随时手动更改该位、并且 LED 电容将打开和关闭。 这是否意味着 GPBMUX1已正确设置、因为该引脚用作 GPIO 引脚?  

    我还比较了在两种情况下代码的执行情况、即在 Zone6上加载代码和默认 RAM 位置。 通过逐行执行此操作、我可以确认代码在这两种情况下均已正确执行、直至对 Simulink 函数的同一循环调用。 但是、当.ebss 位于 Zone6上时、它不会更改 GPBDAT 的最后一位、从而使 LED 闪烁。  如果您看一下我的 InitMemIf 代码>>此处<<,我不会接触其他寄存器,或者 XTIMING6和 XTIMING7之间可能存在冲突。 我是否有可能未针对 XINTF (例如、GPCMUX 或甚至定时器)操作正确设置其他 MUX 寄存器?

    感谢你的帮助、

    Panagis

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

    [引用 user="Panagis Vovos">首先,我研究了 Pinmux 配置的表。 为了充分理解、我必须将 GPBMUX1寄存 器的值设置为 GPIO 32、XZCS0n 和 XZCS7n 被激活(表1-48)。 因此、我已经在 InitExtMemIf 中设置了相应的地址(0x00006F96) 0xFFFFFFFC 的值。[/报价]

    请确认您正在为 XZCS6配置 GPIO28以访问区域6存储器空间。  我看不到这个。

    [引用 user="Panagis Vovos"]我可以随时手动更改该位、并且 LED 电芯电容会打开和关闭。 这是否意味着 GPBMUX1已正确设置、因为该引脚用作 GPIO 引脚?  [/报价]

    是的、如果可以通过 GPxDAT 寄存器切换 GPIO、则表示 GPIO 配置正确。

    [引用 user="Panagis Vovos"]I 还比较了在 Zone6上加载代码和默认 RAM 位置时两种情况下代码的执行情况。 通过逐行执行此操作、我可以确认代码在这两种情况下均已正确执行、直至对 Simulink 函数的同一循环调用。 但是、当.ebss 位于 Zone6上时、它不会更改 GPBDAT 的最后一位、从而使 LED 闪烁。  如果您看一下我的 InitMemIf 代码>>此处<<,我不会接触其他寄存器,或者 XTIMING6和 XTIMING7之间可能存在冲突。 是否有可能我没有为 XINTF (例如、GPCMUX 或甚至定时器)操作正确设置其他 MUX 寄存器?[/QUERP]

    每个区域使用独立配置的时序。 在 InitMemIf 执行后、您是否能够通过 CCS 存储器窗口写入和读取区域6存储器地址?  这是验证 XINTF 配置的方法。

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

    您好、再说一次、

    "请确认您正在为 XZCS6配置 GPIO28、以便访问区域6存储器空间。  我看不到这个。"

    我想我是通过将相应字寄存器的两个位都设置为11来实现的。 InitExtMemIf 中的这两行应正确执行该作业:

    GPAMUX2_MSW .set 0xFF00

    GPAMUX2_LSW .set 0x0000

    由于、您提到我尝试为 XZCS6专门设置 GPIO28、但注意到没有任何差异、正如预期的那样:

    GPAMUX2_MSW .set 0xA300
    GPAMUX2_LSW .set 0x0000

    "InitMemIf  执行后、您是否能够通过 CCS 存储器窗口写入和读取区域6存储器地址?  这是验证 XINTF 配置的方法。"

    不可以、正如您在下面看到的、我无法写入这些地址。 是否有任何机会只写入地址0x100000? GEL 文件的说明与此相反:

    /* 0x100000 - 0x1fff XINTF 区域6 (程序和数据)*/
    /* 0x200000 - 0x2fff XINTF 区域7 (程序和数据*

    当我在 链接器文件中将外部存储器(在链接器文件中命名为 ZONE7P)的地址更改为0x200000 (即 Zone7)时、指示灯开始闪烁。 正如最初设置的那样、我将长度保持在0x1FFFF、但我知道这会超出限制一半的大小(0xFFFF):

    ZONE7P:   origin=0x200000、length=0x1FFFF

    现在、我可以写入地址0x200000及以上、程序工作正常、因为它看起来已正确加载到存储器中:  

    但是、我丢失了一半的可用外部存储器、并且我确实需要该大小用于实际程序。 为什么我的初始链接器设置不起作用? 也许这是我的问题的秘密。 以下是有关我最初如何设置它的提示:

    ZONE7P:   origin=0x100000、length=0x1FFFF

    根据我的理解、ZONE7P 只是一个名称、不起任何作用。 我可以将其命名为 extern _mem 或其他内容、并且只要它在实际存储器地址中扩展、它就应该起作用。 我想、当然、谢谢您、我正在变得越来越近。

    再次感谢您的指导、

    Panagis

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

    [引用 USER="Panagis Vovos">我想我是通过将相应字寄存器的两个位都设置为11来实现的。 InitExtMemIf 中的这两行应正确执行该作业:

    GPAMUX2_MSW .set 0xFF00

    GPAMUX2_LSW .set 0x0000[/引号]

    好的、我现在看到了。

    [引用 USER="Panagis Vovos"]不可以,正如您在下面看到的,我无法在这些地址写入数据。 是否有任何机会只写入地址0x100000? GEL 文件的说明与此相反:

    /* 0x100000 - 0x1fff XINTF 区域6 (程序和数据)*/
    /* 0x200000 - 0x2fff XINTF 区域7 (程序和数据*/[/引用]

    GEL 文件仅引用 F2833x 器件的理论功能。 实际使用情况取决于器件的配置方式以及器件连接的组件。 我的工作假设是您使用区域6 CS 将存储器正确连接到 F2833x。

    [引用 user="Panagis Vovos"]当我将 链接器文件中的 commited 外部存储器(在链接器文件中命名为 ZONE7P)的地址更改为0x200000 (即 Zone7)时,指示灯开始闪烁。

    Spectrum Digital (第三方) eZdsp 电路板上安装了一个存储器、位于区域7:

    [引用 user="Panagis Vovos"]根据我的理解,ZONE7P 只是一个名称,不起任何作用。 我可以将其命名为 extern _mem 或其他内容、并且只要它在实际存储器地址中扩展、它就应该起作用。 我想、当然、感谢您、我正在变得越来越近。[/引述]

    为了便于用户读取、段的名称是任意的、但是地址范围决定了 XINTF 用于外部存储器访问的区域:

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

    您好、再说一次、

    是的,我已经在我的>>eZdspF28335技术参考中找到了有关 ASRAM 和 XZCS7n 的原理图<<。 但是、在几页之前(第2-6页)、有一个图2-3 "eZdsp F28335存储器空间"、根据上面的文本、显示了 eZdsp F28335的存储器映射配置。 您可以看到、外部存储器 XINTF 上显然有区域6、就在区域7的存储器空间的正上方:

     在总结 eZdsp F28335存储器规格的前一页(2-5)中、它澄清了"...  此外,还提供了128K x 16片外 SRAM”,在“硬件特性”的开头部分,它说:“256K 字节片外 SRAM 内存”(WHCH 转换为128 x16)。 长度为0x1FFFF、适合 Zone6+Zone7场景。

    Tommy、我在哪里出错了? 我的内存长度计算错误吗?

    谢谢、

    Panagis

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

    [引用 USER="Panagis Vovos">不过、几页之前(第2-6页)有图2-3 "eZdsp F28335存储器空间"、根据上面的文本、显示了 eZdsp F28335的存储器映射配置。 您可以看到、外部存储器 XINTF 上显然有区域6、就在区域7的存储器空间的正上方:[/引用]

    是的、这似乎是 F2833x 数据表中的直接复制/粘贴

    [引用 user="Panagis Vovos"]在上一页(2-5)中,总结了 eZdsp F28335内存规格,它澄清了“……  此外,还提供128K x 16片外 SRAM”,在“硬件功能”的开头部分,它说:“256K 字节片外 SRAM 内存”(转换为128 x16)。[/引用]

    是的、有一个与 XINTF 连接的片外存储器组件。

    [引用 USER="Panagis Vovos"],长度为0x1FFFF,适合 Zone6+Zone7方案。[/引用]

    用于访问外部存储器的 F2833x 区域基于 XINTF 和外部存储器之间的 XZCSn 信号映射进行硬接线。  在原理图中、存储器连接到 XZCS7。

    [引用 user="Panagis Vovos"]我在哪里会出错,Tommy? 我是否计算出错误的内存长度?

    Zone6和 Zone7的可用存储器空间均为1Mx16。  正如您所指出的、外部存储器仅为128Kx16、因此它占用了 Zone7地址范围的1/8。

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

    尊敬的 Tommy:

    我可能再次浪费您的时间、但我想扼要重述并确保我已正确理解:

    1) 1)我可以在链接器文件中设置  

    ZONE7P:   origin=0x200000、length=0x1FFFF

    2) 2)这会将 eZdsp F28355的可用外部存储器的全部大小分配给一个大小为128Kx1=256KB 的存储器块。

    3)在我的 InitExtMemIf .asm 文件中、我必须确保我设置适当的 GPIO-mux 寄存器值、以便 Zone7的片选引脚用于该目的、而不是用于数字输入/输出(即 XZCS7n)。

    4) 4)如果上述所有操作都正确完成、我可以在链接器文件中将.ebss 分配给 ZONE7P、长度为256K 字节的代码(如果我不向其添加其他片上存储器空间)。

    5) 5) eZdsp F28335上没有其他外部存储器芯片、没有 Zone6、没有区域0。

    非常感谢您抽出宝贵的时间、

    Panagis  

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

    Panagis、

    是的、您有正确的理解。

    对于 eZdsp 存储器、您的最后一点还有些细微差别。  从原理图中:

    1. 我看到一条声明内存组件封装和信号映射与256Kx16内存兼容的注释、因此您可以通过交换组件来扩展存储空间
    2. 我看到在电路板上定义了一个 EMIF 扩展连接器、这样可以插入一个具有额外存储器的定制子卡

    Tommy

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

    您好、再说一次、

    这一点非常清楚。 还感谢您提供有关扩展内存大小的其他信息。 我一定会考虑、如果我们不能将程序放入现有存储器中。

    我当然要感谢你的宝贵帮助,最重要的是感谢你的耐心。

    谢谢、

    Panagis

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

    Panagis、

    我很高兴它能为您服务。

    Tommy