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.

[参考译文] TMS320C6746:在更改为 SYS-BIOS 后出现本机除法问题

Guru**** 2943350 points

Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/668648/tms320c6746-native-division-problem-after-change-to-sys-bios

器件型号:TMS320C6746
Thread 中讨论的其他器件:SYSBIOS

您好!

我最近将项目操作系统从 DSP/BIOS 5.41升级到了 SYS-BIOS 6.53。  现在标准 C 除法不再起作用... 最终、它的 PC 为0、我希望获得一些见解或调试技巧、以帮助您解决问题。  我先单步执行除法运算的 C 代码、然后执行生成的反汇编、该反汇编会对除法执行原生"_c6xabi_divd"调用。  在 DIVS 中的某个点、它在步进后以0的 PC 结束、并完成了所有操作。  通常、这会指示某种存储器异常、但我看不到如何操作。  如前所述、它与 DSP/BIOS 代码相同、只需更改 SYS-BIOS 更新。  虽然我确信在变化中有足够的东西可以被丢弃。

第一张图片显示了 C 除法语句:

在反汇编进入它之后、我们得到以下结果:

最后、在单步执行足够的指令后、我会转到这里

任何超出此范围的步骤都会导致 PC 设置为0、如此处所示

我不知道是否有任何人有任何简单的答案、但即使建议了后续调试步骤、也将不胜感激。

此致、

Robert

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

    堆栈增加似乎使我能够解决除法问题。  但是、现在我进行了一些奇怪的反汇编、似乎在中插入了.word 命令、其中应该只有支持简单 C 指令的源代码。  我附上了一张图示。

    Robert

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

    我们将对此进行研究。

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

    这是我在.cfg 文件中进行内存管理的最新尝试:

    program.stack = 0x1000;

    Task.defaultStackSize = 0x2000;
    task.idleTaskStackSize = 0x2000;

    BIOS.heapSize = 0x800;
    BIOS.heapSection =".biosHeap";

    Program.sectMap[".idleTaskStackSection"]="DDR"
    Program.sectMap[".far:taskStackSection"]="DDR"
    Program.sectMap[".stack"]="IRAM"// program.stack
    Program.sectMap[".cinit"]="DDR"
    Program.sectMap["ext_data"]="DDR"
    Program.sectMap[".biosHeap"]="IRAM"

    Program.sectMap[".sysinit"]="IRAM"
    Program.sectMap[".bss"]="IRAM"
    Program.sectMap[".rodata"]="IRAM"
    Program.sectMap[".neeardata"]="IRAM"
    Program.sectMap[".text"]="IRAM"
    Program.sectMap[".switch"]="IRAM"
    Program.sectMap[".vecs"]="IRAM"
    Program.sectMap[".CIO"]="IRAM"
    Program.sectMap[".far"]="IRAM"
    Program.sectMap[".const"]="IRAM"
    Program.sectMap[".fardata"]="IRAM"

    这会导致程序在加载时甚至不会在主中断点停止... 只是跑了。   

    我正在尝试各种操作、包括将编译器从7.41升级到最新的8.2.2、但仍然不幸运。   

    我的三个结果是、所有这些尝试的内存重新配置和调整都是:

    1) 1)从 IRAM 运行

    2) 2)程序正在加载、但正在立即运行

    3)能够加载和运行程序、但在我的项目初始化期间在某个点上失败(通过 DSP-BIOS 工作已尝试并为真)、就像之前线程响应中描述的与除法相关的跳回到0

    这种情况已经持续了数天、因此我们非常感谢您提供的任何额外帮助和建议。

    此致、

    Robert

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

    程序存储器损坏。 在第一个帖子中、_c6xabi_divd 的前32个字节看起来像正常代码、但当0开始时、这清楚地表明程序存储器错误。 当您到达分支到0时执行的代码很可能与_c6xabi_divd 函数无关。

    同样、在您的第二个帖子中、.word 实例不应在那里。 对我来说、这意味着您的程序代码在最初加载后已损坏。

    若要进行调试、请查找通知加载程序自动运行到 main 的设置功能、然后将其关闭。 加载程序、然后检查几个位置的程序存储器、尤其是在您看到损坏程序的位置。 我的期望是一切看起来都很好(没有0块块、它们不属于、也没有与有效代码混合的.word 行)。

    如果可以运行到 main、请执行该操作并重新检查这些位置。 如果损坏是一致的、则可以使用硬件断点来捕获对存储器位置的写入、在为程序空间加载程序后永远不会发生写入。

    根据之后的内容、可能会指示更多调试路径。 但是、将堆栈和堆大小设置为尽可能大的调试技术在这一点上会很有帮助、因为堆栈和堆溢出可能会导致很多奇怪的行为、并且在您开始工作后、您可以轻松地减少这些行为 (并且可以知道使用的最大空间)。

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

    在 CCS 的"LOAD program"子菜单下、有一个"verify program"选项。  您能否检查:

    1.当您到达 main()时,在运行了很多程序之前,“验证程序”是否确认所有内容均已正确加载?

    2.以后当事情发生时,您是否可以再次运行它以验证是否已损坏?

    堆栈溢出通常是我对损坏内存的第一个怀疑。  但是、错误代码也会产生该问题。  您可能需要暂时调整代码、直到程序再次稳定。  这可能有助于您缩小导致问题的任务/功能范围。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    电源 我再次提出 Randy 的建议、即在数据损坏发生时使用数据观察点来"捕获"一致的数据损坏。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Brad Griffies"]

    在 CCS 的"LOAD program"子菜单下、有一个"verify program"选项。  您能否检查:

    1.当您到达 main()时,在运行了很多程序之前,“验证程序”是否确认所有内容均已正确加载?

    [/报价]

    是的。

    C674x_0:C:\git\3\2\1\Code\Debug\0.out 的程序验证成功

    [引用用户="Brad Griffies"]

    2.以后当事情发生时,您是否可以再次运行它以验证是否已损坏?

    [/报价]

    在启动应用程序之前、我初始化一组东西。  其中一个 init 例程在使用的全局结构上执行 memset。  该结构位于 DDR 存储器中。  负载验证似乎已通过、直到我执行该 memset。  

    memset (g_board_values_dac_gain,0x0,NUM_IDX_boards * sizeof (Board_values_dac_gain));

    在 memset 之后、我得到:

    674X_0:文件加载程序:验证失败:地址0x1181FD80处的值不匹配请验证目标存储器和存储器映射。

    memset 似乎正常工作、不会过度运行结构长度、该位置0x1181FD80似乎不会更改 memset 前后的值、如下面图片前后的所示

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    另一个数据点-如果我将该结构(即 memset)重定位到 IRAM (来自 DDR)、程序将在 memset 之后进行验证。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为这与位于 DDR 中的变量/数组/结构的内存集有关。  查看 Debug 窗口中的调用栈、它会在发生一些 DDR 变量的 memset 后丢失其存储器。  

    单步执行一些与 FFT 相关的初始化、如果我在 I_Twiddle ()之前没有执行 memset、那么当我步入其中时、它看起来是这样的

    但是、如果我以前执行 memsets

    然后步入、它看起来如下所示:

    不知道这是过去的历史

    如前所述、这与之前报告的在 DDR 存储器上的早期 memset 之后发生的加载验证故障相结合、意味着如果不是我的问题的原因、它是一个因素。

    所有这些代码在 DSP/BIOS 5.42下都不是问题、所以随着到 SYS-BIOS 的改变、某些东西已经发生了变化。

    Robert

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

    在更新项目后、我终于回到了这个问题、但没有解决问题(但需要/计划了任何方法)。  这次、我跟踪到一个 memset、该 memset 清除用于 FFT 例程的 DDR 中的存储器。

    memset (g_b、0x0、size_FFT_A_B * sizeof (float32_t));

    G_b 是双字对齐的、如前所述、在 DDR 中的位置0xc0218020、长度为"size_FFT_A_B"、即8192。  在执行此 memset 之前、位置0x11810590将填充正常的程序指令:

    0x11810590 0190FDA9 CCCDCCB5 00289A23 E4200802 01A004E8 028C0FD8 20A44120 00114A20

    0x118105B0 01BCE2F4 D28C0FD9 D0114A60 00000000 0210FDA8 021FFCE8 CCCD8D45 264EA246

    0x118105D0 00006000 02288318 00004000 E1800060 043CC2E5 036441A8 03AF9829 062706A7

    0x118105F0 02A0F06B 0336E4E8 00109A23 E1000080 0310C701 039FEA68 00000000 02290E79

    0x11810610 30109AA2 00004000 D0662120 D4108701 C680A358 C2180FD9 D269B82B C63C08F1

    0x11810630 C6B6BD89 ACF58CE5 C29C0FD9 E4000800 D208C1EB C2118E58 D31003E4 0F80002B

    0x11810650 06340FD9 050004FA 20134121 0FBD22F6 301AE811 85069247 20144411 A586B2C7

    0x11810670 0614803A 01864162

    之后、它(和其他程序位置)具有0 (这是 memset 的填充值):

    0x11810590 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

    0x118105B0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

    0x118105D0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

    0x118105F0 00000000 00000000 00000000 00000000 0310C701 039FEA68 00000000 02290E79

    0x11810610 30109AA2 00004000 D0662120 D4108701 C680A358 C2180FD9 D269B82B C63C08F1

    0x11810630 C6B6BD89 ACF58CE5 C29C0FD9 E4000800 D208C1EB C2118E58 D31003E4 0F80002B

    0x11810650 06340FD9 050004FA 20134121 0FBD22F6 301AE811 85069247 20144411 A586B2C7

    0x11810670 0614803A 01864162

    进一步查看 memset、我看到问题出现在这里:

       /*------------------ *

       /*双字填充                          *

       /*------------------ *

       post_bytes = len >0? Len:0;  

       dst2   = dst1 + 8;

       如果(len > 15)

        for (i = 0;i < len >> 4;i++)

        {

          _amemd8 (dst1)= dfill1;dst1 += 16;

          _amemd8 (dst2)= dfill2;dst2 += 16;

          post_bytes -= 16;

        }

       /*------------------ *

       /*完成8、4、2和/或1字节写入的传输          *

       /*------------------ *

       if (post_bytes & 8){_memd8 (dst1)= dfill1;dst1 += 8;}

     

    在进入这个循环之前、post_bytes 为32768 (= 8192 *每个浮点4个字节)、len 为32768、dst1为0xc0218020、dst2为0xc0218028。  之后、post_bytes 为0、dst1为0xc0220020 (数组的一个末尾)、并且 dst2仍位于0xc0218028、这显然是不正确的(因为不会增加)。

    Robert

     

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

    Robert、

    这真的很有趣。  那么、如果您要单步执行该循环、dst2是否永远不会递增?  或者它是否在某个位置/以某种方式重置到其初始值?

    此外、 到0x11810590的连接完全混乱。  如果您在单步执行代码时打开了该存储器窗口、您是否会看到它被覆盖的点?

    一种可能的情况是系统中有其他线程优先于此线程并导致内存损坏。  您可能需要在代码中设置断点、每次在循环的另一个迭代中运行时点击"run"、而不是通过代码执行真正的单步执行。  这是一个很小的区别、但我认为中断在真正的单步执行期间被抑制、但是如果你运行到一个断点、那么你将为一个中断的发生提供一个小窗口。

    同样、您可以显式禁用围绕 memset 调用的中断、以查看该中断是否可以"修复"问题。  (用于诊断目的、而不是作为实际修复!)

    此致、
    Brad

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

    [引用用户="Brad Griffies"]

    这真的很有趣。  那么、如果您要单步执行该循环、dst2是否永远不会递增?  或者它是否在某个位置/以某种方式重置到其初始值?

    [/报价]

    dst2永远不会递增。  在查看与 C 代码并排的反汇编之后、这是有道理的。  反汇编甚至不显示 dst2!或相关操作、如下图所示。  因此、C 和汇编代码看起来并不相同。  有什么想法吗?

    [引用用户="Brad Griffies"]

    此外、 到0x11810590的连接完全混乱。  如果您在单步执行代码时打开了该存储器窗口、您是否会看到它被覆盖的点?

    [/报价]

    我还没有做到。  部分原因是在高字节计数之前不会发生这种情况。  如果我在8192上执行 memset、则不会发生过度写入、但它在16384处发生(原始值为32768)。

    [引用用户="Brad Griffies"]

    一种可能的情况是系统中有其他线程优先于此线程并导致内存损坏。  您可能需要在代码中设置断点、每次在循环的另一个迭代中运行时点击"run"、而不是通过代码执行真正的单步执行。  这是一个很小的区别、但我认为中断在真正的单步执行期间被抑制、但是如果你运行到一个断点、那么你将为一个中断的发生提供一个小窗口。

    同样、您可以显式禁用围绕 memset 调用的中断、以查看该中断是否可以"修复"问题。  (用于诊断目的、而不是作为实际修复!)

    [/报价]

    我已经尝试过、禁用全局中断、并且没有更改。  这实际上是我的应用程序初始化代码的一部分,并且在它之前没有启用 GIE (即使没有明确的_disable_interrupts()尝试)。

    我在数据清除之前和之后都附加了一个。  它实际上不仅位于该位置、而且与 cos()函数以及其他函数相关联、如图所示

    谢谢、

    Robert

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

    感谢您提供大量屏幕截图和详细信息。 这很有用。

    关于 dst2不递增、这几乎肯定只是编译器优化。 您使用的编译器版本是什么?

    您还可以使用万用表在运行时快速测量 CVDD 吗? 它是什么电压?

    您是否还可以使用此"debug GEL file"在运行时打印所有时钟值:

    processors.wiki.ti.com/.../OMAP-L1x_Debug_Gel_Files

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

    [引用用户="Brad Griffies"]

    关于 dst2不递增、这几乎肯定只是编译器优化。 您使用的编译器版本是什么?

    [/报价]

    v8.2.2

    [引用用户="Brad Griffies"]

    您还可以使用万用表在运行时快速测量 CVDD 吗? 它是什么电压?

    [/报价]

    1.218V

    [引用用户="Brad Griffies"]

    您是否还可以使用此"debug GEL file"在运行时打印所有时钟值:

    processors.wiki.ti.com/.../OMAP-L1x_Debug_Gel_Files

    [/报价]

    C674x_0:GEL 输出:|器件信息|

    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:DEV_INFO_00 = 0x1B7D102F
    C674x_0:GEL 输出:DEV_INFO_01 = 0x00000000
    C674x_0:GEL 输出:DEV_INFO_02 = 0x0000000C
    C674x_0:GEL 输出:DEV_INFO_03 = 0x00000005
    C674x_0:GEL 输出:DEV_INFO_04 = 0x00000000
    C674x_0:GEL 输出:DEV_INFO_05 = 0x000003E0
    C674x_0:GEL 输出:DEV_INFO_06 = 0x00000080
    C674x_0:GEL 输出:DEV_INFO_07-DEV_INFO_08-DEV_INFO_09-DEV_INFO_10-DEV_INFO_11-DEV_INFO_12 = 0-0-6526848-15-42-24
    C674x_0:GEL 输出:DEV_INFO_13、DEV_INFO_14、DEV_INFO_15、DEV_INFO_16 = 5、0、6733
    C674x_0:GEL 输出:---
    C674x_0:GEL 输出:DEV_INFO_17 = 0x00030003
    C674x_0:GEL 输出:DEV_INFO_18 = 0x00000000
    C674x_0:GEL 输出:DEV_INFO_19 =C674x_0:GEL 输出:0C674x_0:GEL 输出:0C674x_0:GEL 输出:0C674x_0:GEL 输出:0C674x_0:GEL 输出:0C674x_0:GEL 输出:0C674x_0:
    C674x_0:GEL 输出:---
    C674x_0:GEL 输出:DEV_INFO_20 = 0x303864
    C674x_0:GEL 输出:DEV_INFO_21 = 0x3830306B
    C674x_0:GEL 输出:DEV_INFO_22 = 0x00000000
    C674x_0:GEL 输出:DEV_INFO_23 = 0x00000000
    C674x_0:GEL 输出:---
    C674x_0:GEL 输出:DEV_INFO_24 = 0x0F01802A
    C674x_0:GEL 输出:DEV_INFO_25 = 0x00639780
    C674x_0:GEL 输出:DEV_INFO_06 = 0x00000080
    C674x_0:GEL 输出:DEV_INFO_26 = 0x349A0005
    C674x_0:GEL 输出:

    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:|引导 ROM 信息|
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:ROM ID:d800k008
    C674x_0:GEL 输出:器件修订版本2.1
    C674x_0:GEL 输出:引导引脚:12
    C674x_0:GEL 输出:引导模式:SPI1闪存
    C674x_0:GEL 输出:
    ROM 状态代码:0x00000000
    说明:C674x_0:GEL 输出:无错误
    C674x_0:GEL 输出:
    程序计数器(PC)= 0x11812DA0
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:|时钟信息|
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:配置为利用晶体的 PLL。
    C674x_0:GEL 输出:ASYNC3 = PLL0_SYSCLK2
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:注意:以下 PLL 部分中的所有时钟频率都是基于的
    C674x_0:GEL 输出:关闭 OSCIN = 24MHz。 如果该值与您的硬件不匹配
    C674x_0:GEL 输出:您应该更改 GEL 文件顶部的#define 并将其保存、
    C674x_0:GEL 输出:然后重新加载。
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:| PLL0信息|
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:PLL0_SYSCLK1 = 504MHz
    C674x_0:GEL 输出:PLL0_SYSCLK2 = 252MHz
    C674x_0:GEL 输出:PLL0_SYSCLK3 = 42MHz
    C674x_0:GEL 输出:PLL0_SYSCLK4 = 126MHz
    C674x_0:GEL 输出:PLL0_SYSCLK5 = 168MHz
    C674x_0:GEL 输出:PLL0_SYSCLK6 = 504MHz
    C674x_0:GEL 输出:PLL0_SYSCLK7 = 84MHz
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:| PLL1信息|
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:PLL1_SYSCLK1 = 360MHz
    C674x_0:GEL 输出:PLL1_SYSCLK2 = 180MHz
    C674x_0:GEL 输出:PLL1_SYSCLK3 = 120MHz
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:| PSC0信息|
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:状态解码器:
    C674x_0:GEL 输出:0 = SwRstDisable (复位有效、时钟关闭)
    C674x_0:GEL 输出:1 = SyncReset (已连接复位、时钟打开)
    C674x_0:GEL 输出:2 =禁用(复位取消置位、时钟关闭)
    C674x_0:GEL 输出:3 =使能(复位取消置位、时钟开启)
    C674x_0:GEL 输出:>3 =正在进行转换
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:模块0:EDMA3CC (0)状态= 3
    C674x_0:GEL 输出:模块1:EDMA3 TC0状态= 3
    C674x_0:GEL 输出:模块2:EDMA3 TC1状态= 0
    C674x_0:GEL 输出:模块3:EMIFA (BR7)状态= 3
    C674x_0:GEL 输出:模块4:SPI 0状态= 3
    C674x_0:GEL 输出:模块5:MMC/SD 0状态= 3
    C674x_0:GEL 输出:模块6:AINTC 状态= 0
    C674x_0:GEL 输出:模块7:ARM RAM/ROM 状态= 3
    C674x_0:GEL 输出:模块9:UART 0状态= 3
    C674x_0:GEL 输出:模块10:SCR 0 (br0/1/2/8)状态= 3
    C674x_0:GEL 输出:模块11:SCR 1 (BR4)状态= 3
    C674x_0:GEL 输出:模块12:SCR 2 (BR3/5/6)状态= 3
    C674x_0:GEL 输出:模块13:PRUSS 状态= 0
    C674x_0:GEL 输出:模块14:ARM 状态= 0
    C674x_0:GEL 输出:模块15:DSP 状态= 3
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:| PSC1信息|
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:状态解码器:
    C674x_0:GEL 输出:0 = SwRstDisable (复位有效、时钟关闭)
    C674x_0:GEL 输出:1 = SyncReset (已连接复位、时钟打开)
    C674x_0:GEL 输出:2 =禁用(复位取消置位、时钟关闭)
    C674x_0:GEL 输出:3 =使能(复位取消置位、时钟开启)
    C674x_0:GEL 输出:>3 =正在进行转换
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:模块0:EDMA3CC (1)状态= 0
    C674x_0:GEL 输出:模块1:USB0 (2.0)状态= 3
    C674x_0:GEL 输出:模块2:USB1 (1.1)状态= 3
    C674x_0:GEL 输出:模块3:GPIO 状态= 3
    C674x_0:GEL 输出:模块4:UHPI 状态= 3
    C674x_0:GEL 输出:模块5:EMAC 状态= 3
    C674x_0:GEL 输出:模块6:DDR2和 SCR F3状态= 3
    C674x_0:GEL 输出:模块7:McASP0 + FIFO 状态= 3
    C674x_0:GEL 输出:模块8:SATA 状态= 0
    C674x_0:GEL 输出:模块9:VPIF 状态= 3
    C674x_0:GEL 输出:模块10:SPI 1状态= 3
    C674x_0:GEL 输出:模块11:I2C 1状态= 3
    C674x_0:GEL 输出:模块12:UART 1状态= 3
    C674x_0:GEL 输出:模块13:UART 2状态= 3
    C674x_0:GEL 输出:模块14:McBSP0 + FIFO 状态= 3
    C674x_0:GEL 输出:模块15:McBSP1 + FIFO 状态= 3
    C674x_0:GEL 输出:模块16:LCDC 状态= 3
    C674x_0:GEL 输出:模块17:eHRPWM (全部)状态= 3
    C674x_0:GEL 输出:模块18:MMC/SD 1状态= 3
    C674x_0:GEL 输出:模块19:upp 状态= 3
    C674x_0:GEL 输出:模块20:ECAP (全部)状态= 0
    C674x_0:GEL 输出:模块21:EDMA3 TC2状态= 0
    C674x_0:GEL 输出:模块24:SCR-F0 BR-F0状态= 3
    C674x_0:GEL 输出:模块25:SCR-F1 BR-F1 STATE = 3
    C674x_0:GEL 输出:模块26:SCR-F2 BR-F2状态= 3
    C674x_0:GEL 输出:模块27:SCR-F6 BR-F3状态= 3
    C674x_0:GEL 输出:模块28:SCR-F7 BR-F4 STATE = 3
    C674x_0:GEL 输出:模块29:SCR-F8 BR-F5状态= 3
    C674x_0:GEL 输出:模块30:BR-F7 (DDR 控制器)状态= 3
    C674x_0:GEL 输出:模块31:L3 RAM、SCR-F4、BR-F6状态= 3

    此外、如果有任何用途、这是我每次连接到目标时运行的 GEL:

    C674x_0:输出:清除存储器映射。
    C674x_0:输出:-------------------------------------------------------
    C674x_0:输出:存储器映射设置完成。
    C674x_0:输出:-------------------------------------------------------
    C674x_0:输出:PSC 启用完成。
    C674x_0:输出:-------------------------------------------------------
    C674x_0:输出:针对内核:336MHz、EMIFA:25MHz 完成 PLL0初始化
    C674x_0:输出:mDDR 初始化正在进行中....
    C674x_0:输出:针对 DDR:120MHz 完成 PLL1初始化
    C674x_0:输出:使用 mDDR 设置
    C674x_0:输出:完成120MHz 的 mDDR 初始化
    C674x_0:输出:-------------------------------------------------------
    C674x_0:输出:DSP 唤醒完成。
    C674x_0:输出:-------------------------------------------------------
    C674x_0:输出:清除存储器映射。
    C674x_0:输出:-------------------------------------------------------
    C674x_0:输出:存储器映射设置完成。
    C674x_0:输出:-------------------------------------------------------
    C674x_0:输出:PSC0在域0、LPSC 6上启用验证超时
    C674x_0:输出:PSC 启用完成。
    C674x_0:输出:-------------------------------------------------------
    C674x_0:输出:针对内核:336MHz、EMIFA:25MHz 完成 PLL0初始化
    C674x_0:输出:mDDR 初始化正在进行中....
    C674x_0:输出:针对 DDR:120MHz 完成 PLL1初始化
    C674x_0:输出:使用 mDDR 设置
    C674x_0:输出:完成120MHz 的 mDDR 初始化
    C674x_0:输出:-------------------------------------------------------
    C674x_0:输出:DSP 唤醒完成。
    C674x_0:输出:-------------------------------------------------------
    C674x_0:输出:清除存储器映射。
    C674x_0:输出:-------------------------------------------------------
    C674x_0:输出:存储器映射设置完成。
    C674x_0:输出:-------------------------------------------------------
    C674x_0:输出:PSC0在域0、LPSC 6上启用验证超时
    C674x_0:输出:PSC 启用完成。
    C674x_0:输出:-------------------------------------------------------
    C674x_0:输出:针对内核:336MHz、EMIFA:25MHz 完成 PLL0初始化
    C674x_0:输出:mDDR 初始化正在进行中....
    C674x_0:输出:针对 DDR:120MHz 完成 PLL1初始化
    C674x_0:输出:使用 mDDR 设置
    C674x_0:输出:完成120MHz 的 mDDR 初始化
    C674x_0:输出:-------------------------------------------------------
    C674x_0:输出:DSP 唤醒完成。
    C674x_0:输出:-------------------------------------------------------
    C674x_0:输出:针对内核:336MHz、EMIFA:25MHz 完成 PLL0初始化
    C674x_0:输出:mDDR 初始化正在进行中....
    C674x_0:输出:针对 DDR:120MHz 完成 PLL1初始化
    C674x_0:输出:使用 mDDR 设置
    C674x_0:输出:完成120MHz 的 mDDR 初始化

    谢谢、

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在您的板上、OSCIN 时钟的速度是多少? EVM 上的频率为24MHz。 此注释隐藏在您粘贴的输出中:

    C674x_0:GEL 输出:注意:以下 PLL 部分中的所有时钟频率都是基于的
    C674x_0:GEL 输出:关闭 OSCIN = 24MHz。 如果该值与您的硬件不匹配
    C674x_0:GEL 输出:您应该更改 GEL 文件顶部的#define 并将其保存、
    C674x_0:GEL 输出:然后重新加载。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Brad Griffies">在您的电路板上、OSCIN 时钟的速度是多少? EVM 上的频率为24MHz。 此注释隐藏在您粘贴的输出中:

    C674x_0:GEL 输出:注意:以下 PLL 部分中的所有时钟频率都是基于的
    C674x_0:GEL 输出:关闭 OSCIN = 24MHz。 如果该值与您的硬件不匹配
    C674x_0:GEL 输出:您应该更改 GEL 文件顶部的#define 并将其保存、
    C674x_0:GEL 输出:然后重新加载。

    [/报价]

    它是16MHz (之前的电路板修订版本为24MHz、但出于采样原因进行了更改)。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否要更改 OSCIN 变量并重新运行脚本?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Brad Griffies">您是否要更改 OSCIN 变量并重新运行脚本。

    [/报价]

    ----------------------
    C674x_0:GEL 输出:|器件信息|
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:DEV_INFO_00 = 0x1B7D102F
    C674x_0:GEL 输出:DEV_INFO_01 = 0x00000000
    C674x_0:GEL 输出:DEV_INFO_02 = 0x0000000C
    C674x_0:GEL 输出:DEV_INFO_03 = 0x00000005
    C674x_0:GEL 输出:DEV_INFO_04 = 0x00000000
    C674x_0:GEL 输出:DEV_INFO_05 = 0x000003E0
    C674x_0:GEL 输出:DEV_INFO_06 = 0x00000080
    C674x_0:GEL 输出:DEV_INFO_07-DEV_INFO_08-DEV_INFO_09-DEV_INFO_10-DEV_INFO_11-DEV_INFO_12 = 0-0-6526848-15-42-24
    C674x_0:GEL 输出:DEV_INFO_13、DEV_INFO_14、DEV_INFO_15、DEV_INFO_16 = 5、0、6733
    C674x_0:GEL 输出:---
    C674x_0:GEL 输出:DEV_INFO_17 = 0x00030003
    C674x_0:GEL 输出:DEV_INFO_18 = 0x00000000
    C674x_0:GEL 输出:DEV_INFO_19 =C674x_0:GEL 输出:0C674x_0:GEL 输出:0C674x_0:GEL 输出:0C674x_0:GEL 输出:0C674x_0:GEL 输出:0C674x_0:GEL 输出:0C674x_0:
    C674x_0:GEL 输出:---
    C674x_0:GEL 输出:DEV_INFO_20 = 0x303864
    C674x_0:GEL 输出:DEV_INFO_21 = 0x3830306B
    C674x_0:GEL 输出:DEV_INFO_22 = 0x00000000
    C674x_0:GEL 输出:DEV_INFO_23 = 0x00000000
    C674x_0:GEL 输出:---
    C674x_0:GEL 输出:DEV_INFO_24 = 0x0F01802A
    C674x_0:GEL 输出:DEV_INFO_25 = 0x00639780
    C674x_0:GEL 输出:DEV_INFO_06 = 0x00000080
    C674x_0:GEL 输出:DEV_INFO_26 = 0x349A0005
    C674x_0:GEL 输出:

    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:|引导 ROM 信息|
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:ROM ID:d800k008
    C674x_0:GEL 输出:器件修订版本2.1
    C674x_0:GEL 输出:引导引脚:12
    C674x_0:GEL 输出:引导模式:SPI1闪存
    C674x_0:GEL 输出:
    ROM 状态代码:0x00000000
    说明:C674x_0:GEL 输出:无错误
    C674x_0:GEL 输出:
    程序计数器(PC)= 0x11812DA0
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:|时钟信息|
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:配置为利用晶体的 PLL。
    C674x_0:GEL 输出:ASYNC3 = PLL0_SYSCLK2
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:注意:以下 PLL 部分中的所有时钟频率都是基于的
    C674x_0:GEL 输出:关闭 OSCIN = 24MHz。 如果该值与您的硬件不匹配
    C674x_0:GEL 输出:您应该更改 GEL 文件顶部的#define 并将其保存、
    C674x_0:GEL 输出:然后重新加载。
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:| PLL0信息|
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:PLL0_SYSCLK1 = 504MHz
    C674x_0:GEL 输出:PLL0_SYSCLK2 = 252MHz
    C674x_0:GEL 输出:PLL0_SYSCLK3 = 42MHz
    C674x_0:GEL 输出:PLL0_SYSCLK4 = 126MHz
    C674x_0:GEL 输出:PLL0_SYSCLK5 = 168MHz
    C674x_0:GEL 输出:PLL0_SYSCLK6 = 504MHz
    C674x_0:GEL 输出:PLL0_SYSCLK7 = 84MHz
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:| PLL1信息|
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:PLL1_SYSCLK1 = 360MHz
    C674x_0:GEL 输出:PLL1_SYSCLK2 = 180MHz
    C674x_0:GEL 输出:PLL1_SYSCLK3 = 120MHz
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:| PSC0信息|
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:状态解码器:
    C674x_0:GEL 输出:0 = SwRstDisable (复位有效、时钟关闭)
    C674x_0:GEL 输出:1 = SyncReset (已连接复位、时钟打开)
    C674x_0:GEL 输出:2 =禁用(复位取消置位、时钟关闭)
    C674x_0:GEL 输出:3 =使能(复位取消置位、时钟开启)
    C674x_0:GEL 输出:>3 =正在进行转换
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:模块0:EDMA3CC (0)状态= 3
    C674x_0:GEL 输出:模块1:EDMA3 TC0状态= 3
    C674x_0:GEL 输出:模块2:EDMA3 TC1状态= 0
    C674x_0:GEL 输出:模块3:EMIFA (BR7)状态= 3
    C674x_0:GEL 输出:模块4:SPI 0状态= 3
    C674x_0:GEL 输出:模块5:MMC/SD 0状态= 3
    C674x_0:GEL 输出:模块6:AINTC 状态= 0
    C674x_0:GEL 输出:模块7:ARM RAM/ROM 状态= 3
    C674x_0:GEL 输出:模块9:UART 0状态= 3
    C674x_0:GEL 输出:模块10:SCR 0 (br0/1/2/8)状态= 3
    C674x_0:GEL 输出:模块11:SCR 1 (BR4)状态= 3
    C674x_0:GEL 输出:模块12:SCR 2 (BR3/5/6)状态= 3
    C674x_0:GEL 输出:模块13:PRUSS 状态= 0
    C674x_0:GEL 输出:模块14:ARM 状态= 0
    C674x_0:GEL 输出:模块15:DSP 状态= 3
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:| PSC1信息|
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:状态解码器:
    C674x_0:GEL 输出:0 = SwRstDisable (复位有效、时钟关闭)
    C674x_0:GEL 输出:1 = SyncReset (已连接复位、时钟打开)
    C674x_0:GEL 输出:2 =禁用(复位取消置位、时钟关闭)
    C674x_0:GEL 输出:3 =使能(复位取消置位、时钟开启)
    C674x_0:GEL 输出:>3 =正在进行转换
    C674x_0:GEL 输出:
    C674x_0:GEL 输出:模块0:EDMA3CC (1)状态= 0
    C674x_0:GEL 输出:模块1:USB0 (2.0)状态= 3
    C674x_0:GEL 输出:模块2:USB1 (1.1)状态= 3
    C674x_0:GEL 输出:模块3:GPIO 状态= 3
    C674x_0:GEL 输出:模块4:UHPI 状态= 3
    C674x_0:GEL 输出:模块5:EMAC 状态= 3
    C674x_0:GEL 输出:模块6:DDR2和 SCR F3状态= 3
    C674x_0:GEL 输出:模块7:McASP0 + FIFO 状态= 3
    C674x_0:GEL 输出:模块8:SATA 状态= 0
    C674x_0:GEL 输出:模块9:VPIF 状态= 3
    C674x_0:GEL 输出:模块10:SPI 1状态= 3
    C674x_0:GEL 输出:模块11:I2C 1状态= 3
    C674x_0:GEL 输出:模块12:UART 1状态= 3
    C674x_0:GEL 输出:模块13:UART 2状态= 3
    C674x_0:GEL 输出:模块14:McBSP0 + FIFO 状态= 3
    C674x_0:GEL 输出:模块15:McBSP1 + FIFO 状态= 3
    C674x_0:GEL 输出:模块16:LCDC 状态= 3
    C674x_0:GEL 输出:模块17:eHRPWM (全部)状态= 3
    C674x_0:GEL 输出:模块18:MMC/SD 1状态= 3
    C674x_0:GEL 输出:模块19:upp 状态= 3
    C674x_0:GEL 输出:模块20:ECAP (全部)状态= 0
    C674x_0:GEL 输出:模块21:EDMA3 TC2状态= 0
    C674x_0:GEL 输出:模块24:SCR-F0 BR-F0状态= 3
    C674x_0:GEL 输出:模块25:SCR-F1 BR-F1 STATE = 3
    C674x_0:GEL 输出:模块26:SCR-F2 BR-F2状态= 3
    C674x_0:GEL 输出:模块27:SCR-F6 BR-F3状态= 3
    C674x_0:GEL 输出:模块28:SCR-F7 BR-F4 STATE = 3
    C674x_0:GEL 输出:模块29:SCR-F8 BR-F5状态= 3
    C674x_0:GEL 输出:模块30:BR-F7 (DDR 控制器)状态= 3
    C674x_0:GEL 输出:模块31:L3 RAM、SCR-F4、BR-F6状态= 3

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这些值仍然是相同的。 好的、我将您的值粘贴到 Excel 中、并进行了快速计算、将所有值乘以2/3。

    C674x_0:GEL 输出:PLL0_SYSCLK1 = 336MHz
    C674x_0:GEL 输出:PLL0_SYSCLK2 = 168MHz
    C674x_0:GEL 输出:PLL0_SYSCLK3 = 28MHz
    C674x_0:GEL 输出:PLL0_SYSCLK4 = 84MHz
    C674x_0:GEL 输出:PLL0_SYSCLK5 = 112MHz
    C674x_0:GEL 输出:PLL0_SYSCLK6 = 336MHz
    C674x_0:GEL 输出:PLL0_SYSCLK7 = 56MHz
    C674x_0:GEL 输出:  
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:| PLL1信息|
    C674x_0:GEL 输出:-------------------------------------------------------
    C674x_0:GEL 输出:  
    C674x_0:GEL 输出:PLL1_SYSCLK1 = 240MHz
    C674x_0:GEL 输出:PLL1_SYSCLK2 = 120MHz
    C674x_0:GEL 输出:PLL1_SYSCLK3 = 80MHz
    C674x_0:GEL 输出:  

    我已将这些值与数据手册中的下表进行了比较:

    表6-5. 每个电压运行点的最大内部时钟频率

    我是根据您之前报告的电压查看1.2V 标称值列的。 所有内容似乎都在规格范围内。

    让我再问一次积极的情况。 您是否确定输入时钟仅为16MHz 而不是24MHz? 否则、您的运行速度太快、这肯定会解释这种奇怪的行为! 这可以通过查看 CLKOUT 引脚来验证、以查看其上的频率。 除非有明显的证明、否则我强烈建议您查看(例如、您可以在 TCXO 中直接从封装读取频率等)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Brad Griffies"]

    这些值仍然是相同的。

    [/报价]

    很抱歉、误解。  在这里、它们是在更改该 GEL 文件中的设置(与您的2/3值匹配)之后:

    C674x_0:GEL 输出:

    ----------------------

    C674x_0:GEL 输出:|            器件信息          |

    C674x_0:GEL 输出:-------------------------------------------------------

    C674x_0:GEL 输出:DEV_INFO_00 = 0x1B7D102F

    C674x_0:GEL 输出:DEV_INFO_01 = 0x00000000

    C674x_0:GEL 输出:DEV_INFO_02 = 0x0000000C

    C674x_0:GEL 输出:DEV_INFO_03 = 0x00000005

    C674x_0:GEL 输出:DEV_INFO_04 = 0x00000000

    C674x_0:GEL 输出:DEV_INFO_05 = 0x000003E0

    C674x_0:GEL 输出:DEV_INFO_06 = 0x00000080

    C674x_0:GEL 输出:DEV_INFO_07-DEV_INFO_08-DEV_INFO_09-DEV_INFO_10-DEV_INFO_11-DEV_INFO_12 = 0-0-6526848-15-42-24

    C674x_0:GEL 输出:DEV_INFO_13、DEV_INFO_14、DEV_INFO_15、DEV_INFO_16 = 5、0、6733

    C674x_0:GEL 输出:---

    C674x_0:GEL 输出:DEV_INFO_17 = 0x00030003

    C674x_0:GEL 输出:DEV_INFO_18 = 0x00000000

    C674x_0:GEL 输出:DEV_INFO_19 =C674x_0:GEL 输出:0C674x_0:GEL 输出:0C674x_0:GEL 输出:0C674x_0:GEL 输出:0C674x_0:GEL 输出:0C674x_0:GEL 输出:0C674x_0:

    C674x_0:GEL 输出:---

    C674x_0:GEL 输出:DEV_INFO_20 = 0x303864

    C674x_0:GEL 输出:DEV_INFO_21 = 0x3830306B

    C674x_0:GEL 输出:DEV_INFO_22 = 0x00000000

    C674x_0:GEL 输出:DEV_INFO_23 = 0x00000000

    C674x_0:GEL 输出:---

    C674x_0:GEL 输出:DEV_INFO_24 = 0x0F01802A

    C674x_0:GEL 输出:DEV_INFO_25 = 0x00639780

    C674x_0:GEL 输出:DEV_INFO_06 = 0x00000080

    C674x_0:GEL 输出:DEV_INFO_26 = 0x349A0005

    C674x_0:GEL 输出:

     

    C674x_0:GEL 输出:-------------------------------------------------------

    C674x_0:GEL 输出:|              引导 ROM 信息              |

    C674x_0:GEL 输出:-------------------------------------------------------

    C674x_0:GEL 输出:ROM ID:d800k008

    C674x_0:GEL 输出:器件修订版本2.1

    C674x_0:GEL 输出:引导引脚:12

    C674x_0:GEL 输出:引导模式:SPI1闪存

    C674x_0:GEL 输出:

    ROM 状态代码:0x00000000

    说明:C674x_0:GEL 输出:无错误

    C674x_0:GEL 输出:

    程序计数器(PC)= 0x11812DA0

    C674x_0:GEL 输出:

    C674x_0:GEL 输出:-------------------------------------------------------

    C674x_0:GEL 输出:|            时钟信息            |

    C674x_0:GEL 输出:-------------------------------------------------------

    C674x_0:GEL 输出:

    C674x_0:GEL 输出:配置为利用晶体的 PLL。

    C674x_0:GEL 输出:ASYNC3 = PLL0_SYSCLK2

    C674x_0:GEL 输出:

    C674x_0:GEL 输出:注意:以下 PLL 部分中的所有时钟频率都是基于的

    C674x_0:GEL 输出:关闭 OSCIN = 16MHz。 如果该值与您的硬件不匹配

    C674x_0:GEL 输出:您应该更改 GEL 文件顶部的#define 并将其保存、

    C674x_0:GEL 输出:然后重新加载。

    C674x_0:GEL 输出:

    C674x_0:GEL 输出:-------------------------------------------------------

    C674x_0:GEL 输出:|            PLL0信息            |

    C674x_0:GEL 输出:-------------------------------------------------------

    C674x_0:GEL 输出:

    C674x_0:GEL 输出:PLL0_SYSCLK1 = 336MHz

    C674x_0:GEL 输出:PLL0_SYSCLK2 = 168MHz

    C674x_0:GEL 输出:PLL0_SYSCLK3 = 28MHz

    C674x_0:GEL 输出:PLL0_SYSCLK4 = 84MHz

    C674x_0:GEL 输出:PLL0_SYSCLK5 = 112MHz

    C674x_0:GEL 输出:PLL0_SYSCLK6 = 336MHz

    C674x_0:GEL 输出:PLL0_SYSCLK7 = 56MHz

    C674x_0:GEL 输出:

    C674x_0:GEL 输出:-------------------------------------------------------

    C674x_0:GEL 输出:|            PLL1信息            |

    C674x_0:GEL 输出:-------------------------------------------------------

    C674x_0:GEL 输出:

    C674x_0:GEL 输出:PLL1_SYSCLK1 = 240MHz

    C674x_0:GEL 输出:PLL1_SYSCLK2 = 120MHz

    C674x_0:GEL 输出:PLL1_SYSCLK3 = 80MHz

    C674x_0:GEL 输出:

    C674x_0:GEL 输出:-------------------------------------------------------

    C674x_0:GEL 输出:|            PSC0信息            |

    C674x_0:GEL 输出:-------------------------------------------------------

    C674x_0:GEL 输出:

    C674x_0:GEL 输出:状态解码器:

    C674x_0:GEL 输出:0 = SwRstDisable (复位有效、时钟关闭)

    C674x_0:GEL 输出:1 = SyncReset (已连接复位、时钟打开)

    C674x_0:GEL 输出:2 =禁用(复位取消置位、时钟关闭)

    C674x_0:GEL 输出:3 =使能(复位取消置位、时钟开启)

    C674x_0:GEL 输出:>3 =正在进行转换

    C674x_0:GEL 输出:

    C674x_0:GEL 输出:模块0:   EDMA3CC (0)      状态= 3

    C674x_0:GEL 输出:模块1:   EDMA3 TC0        状态= 3

    C674x_0:GEL 输出:模块2:   EDMA3 TC1        状态= 0

    C674x_0:GEL 输出:模块3:   EMIFA (BR7)      状态= 3

    C674x_0:GEL 输出:模块4:   SPI 0            状态= 3

    C674x_0:GEL 输出:模块5:   MMC/SD 0          状态= 3

    C674x_0:GEL 输出:模块6:   AINTC            状态= 0

    C674x_0:GEL 输出:模块7:   ARM RAM/ROM      状态= 3

    C674x_0:GEL 输出:模块9:   UART 0            状态= 3

    C674x_0:GEL 输出:模块10:  SCR 0 (br0/1/2/8)状态= 3

    C674x_0:GEL 输出:模块11:  SCR 1 (BR4)      状态= 3

    C674x_0:GEL 输出:模块12:  SCR 2 (BR3/5/6)  状态= 3

    C674x_0:GEL 输出:模块13:  PRUSS            状态= 0

    C674x_0:GEL 输出:模块14:  ARM              状态= 0

    C674x_0:GEL 输出:模块15:  DSP             状态= 3

    C674x_0:GEL 输出:

    C674x_0:GEL 输出:-------------------------------------------------------

    C674x_0:GEL 输出:|            PSC1信息            |

    C674x_0:GEL 输出:-------------------------------------------------------

    C674x_0:GEL 输出:

    C674x_0:GEL 输出:状态解码器:

    C674x_0:GEL 输出:0 = SwRstDisable (复位有效、时钟关闭)

    C674x_0:GEL 输出:1 = SyncReset (已连接复位、时钟打开)

    C674x_0:GEL 输出:2 =禁用(复位取消置位、时钟关闭)

    C674x_0:GEL 输出:3 =使能(复位取消置位、时钟开启)

    C674x_0:GEL 输出:>3 =正在进行转换

    C674x_0:GEL 输出:

    C674x_0:GEL 输出:模块0:   EDMA3CC (1)      状态= 0

    C674x_0:GEL 输出:模块1:   USB0 (2.0)        状态= 3

    C674x_0:GEL 输出:模块2:   USB1 (1.1)        状态= 3

    C674x_0:GEL 输出:模块3:   GPIO              状态= 3

    C674x_0:GEL 输出:模块4:   UHPI              状态= 3

    C674x_0:GEL 输出:模块5:   EMAC              状态= 3

    C674x_0:GEL 输出:模块6:   DDR2和 SCR F3  状态= 3

    C674x_0:GEL 输出:模块7:   McASP0 + FIFO    状态= 3

    C674x_0:GEL 输出:模块8:   SATA              状态= 0

    C674x_0:GEL 输出:模块9:   VPIF              状态= 3

    C674x_0:GEL 输出:模块10:  SPI 1            状态= 3

    C674x_0:GEL 输出:模块11:  I2C 1            状态= 3

    C674x_0:GEL 输出:模块12:  UART 1            状态= 3

    C674x_0:GEL 输出:模块13:  UART 2            状态= 3

    C674x_0:GEL 输出:模块14:  McBSP0 + FIFO    状态= 3

    C674x_0:GEL 输出:模块15:  McBSP1 + FIFO    状态= 3

    C674x_0:GEL 输出:模块16:  LCDC              状态= 3

    C674x_0:GEL 输出:模块17:  eHRPWM (全部)      状态= 3

    C674x_0:GEL 输出:模块18:  MMC/SD 1          状态= 3

    C674x_0:GEL 输出:模块19:  upp              状态= 3

    C674x_0:GEL 输出:模块20:  ECAP (全部)        状态= 0

    C674x_0:GEL 输出:模块21:  EDMA3 TC2        状态= 0

    C674x_0:GEL 输出:模块24:  SCR-F0 BR-F0      状态= 3

    C674x_0:GEL 输出:模块25:  SCR-F1 BR-F1      STATE = 3

    C674x_0:GEL 输出:模块26:  SCR-F2 BR-F2      状态= 3

    C674x_0:GEL 输出:模块27:  SCR-F6 BR-F3      状态= 3

    C674x_0:GEL 输出:模块28:  SCR-F7 BR-F4      STATE = 3

    C674x_0:GEL 输出:模块29:  SCR-F8 BR-F5      状态= 3

    C674x_0:GEL 输出:模块30:  BR-F7 (DDR 控制器)状态= 3

    C674x_0:GEL 输出:模块31:  L3 RAM、SCR-F4、BR-F6状态= 3

    根据16MHz OSC、这些都与我们的设计相匹配。

    [引用用户="Brad Griffies"]

    我已将这些值与数据手册中的下表进行了比较:

    表6-5. 每个电压运行点的最大内部时钟频率

    我是根据您之前报告的电压查看1.2V 标称值列的。 所有内容似乎都在规格范围内。

    [/报价]

    相关知识。  在我更改 SYS-BIOS 之前、它们都工作正常。

    [引用用户="Brad Griffies"]

    让我再问一次积极的情况。 您是否确定输入时钟仅为16MHz 而不是24MHz? 否则、您的运行速度太快、这肯定会解释这种奇怪的行为! 这可以通过查看 CLKOUT 引脚来验证、以查看其上的频率。 除非有明显的证明、否则我强烈建议您查看(例如、您可以在 TCXO 中直接从封装读取频率等)。

    [/报价]  

    是的。  但我确实通过并将 OSCIN 路由到 CLKOUT 引脚、并在示波器上再次确认。

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

    Robert、

    感谢您付出额外的努力、确保输入时钟频率与我们预期的完全相同。  这有助于消除大量不确定性。

    我正在尝试考虑可能产生这种影响的任何其他因素。  需要记住的一件事可能是某些恶意外设(如 EDMA)对这些值进行了编号。  如果将该 memset 移至初始化代码的起始位置、这是否可以避免该问题?

    顺便说一下--在您进行任何更改之前,我强烈建议您 准确地提交/保存代码,以防以后重现问题时出现问题。  有时、腐败的位置可能会四处跳动、这会使这些事情难以跟踪。  如果有一段代码以可重现的方式遇到问题、这将非常有帮助。

    此致、
    Brad

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

    [引用用户="Brad Griffies"]

    我正在尝试考虑可能产生这种影响的任何其他因素。  需要记住的一件事可能是某些恶意外设(如 EDMA)对这些值进行了编号。  如果将该 memset 移至初始化代码的起始位置、这是否可以避免该问题?

    [/报价]

    我把它放在 main()的开头,结果相同

    [引用用户="Brad Griffies"]

    顺便说一下--在您进行任何更改之前,我强烈建议您 准确地提交/保存代码,以防以后重现问题时出现问题。  有时、腐败的位置可能会四处跳动、这会使这些事情难以跟踪。  如果有一段代码以可重现的方式遇到问题、这将非常有帮助。

    [/报价]

    好建议。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这真的很奇怪。 当您进入发生损坏的 memset 中的循环时、您能否查看 CPU 寄存器以查看0x11810580地址是否位于其中一个 CPU 寄存器内? 我想、如果我们至少了解该特定存储器范围如何连接到此 memset、这可能会对解决根本问题有很大的帮助。 我想知道、它是否是初始化的"艺术"、其中值恰好位于 CPU 寄存器内部、并且未被覆盖、并且在某种程度上是由此产生的损坏的一部分。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能告诉我 L2CFG 寄存器(地址0x01840000)的值吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在解释 C6000汇编语言方面仍然不够好、但我没有看到任何对用于 memset 的寄存器中损坏位置的引用。  第一张图片是在点击"Go"之前。  第二个是在后面。  只需一个 F5即可执行整个传输。

    L2CFG 位置0x1840000、通篇为0x0101004。

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

    [引用用户="Robert56682"] L2CFG,位置0x1840000,通篇为0x0101004。

    这意味着缓存配置为256KB 操作。  换言之、L2 RAM 为零。  但是、您的屏幕截图显示您在这些地址中放置了代码和数据。  这是一个巨大的问题、即256KB 的内部 RAM 可以由您的应用程序或高速缓存控制器拥有、但不能同时拥有。  缓存配置和/或存储器映射配置错误。  SysBIOS 应自动为您完成此操作、以防止这类双重映射。  您是否在链接器命令文件中手动定义了一些段?

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

    [引用用户="Brad Griffies"]

    Robert56682
    L2CFG 位置0x1840000、通篇为0x0101004。

    这意味着缓存配置为256KB 操作。  换言之、L2 RAM 为零。  但是、您的屏幕截图显示您在这些地址中放置了代码和数据。  这是一个巨大的问题、即256KB 的内部 RAM 可以由您的应用程序或高速缓存控制器拥有、但不能同时拥有。  缓存配置和/或存储器映射配置错误。  SysBIOS 应自动为您完成此操作 、以防止这类双重映射。  您是否在链接器命令文件中手动定义了一些段?

    [/报价]

    在创建自定义平台时、我之前曾被建议将 L2缓存最大化。  我可能错误地将其设置为最大值256K;) 当将其设置为64K 时,现在的情况似乎是正常的!  至少、我不会破坏该 memset 的内存。 我可以看到的最大值。  然后 L2CFG 为0x01010002。

    执行此操作时出现问题-我无法再编辑我的自定义平台。  下面的(编辑过的)图片显示它找不到它、并且它不在下拉列表中。  因此、我必须再次使用较低的 L2高速缓存设置重新创建平台、这是可行的。  希望不必这样做、每次都需要更改平台中的内容

    谢谢、

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、很高兴听到我们正在取得进展!

    对于软件包工具、可能只是存储库路径设置不正确。

    例如、假设您创建了一个名为 my.platform 的平台。 创建此平台将生成一个目录结构 /my/platform. 一旦您构建了该平台(自动发生)、您应该在其中直接有一个"封装"、例如 /my/platform/package. 对于"平台包存储库"、请确保您刚刚拥有 不是 /my 或 /my/platform.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引述 user="Brad Griffies">好的、很高兴听到我们正在取得进展!

    对于软件包工具、可能只是存储库路径设置不正确。

    例如、假设您创建了一个名为 my.platform 的平台。 创建此平台将生成一个目录结构 /my/platform. 一旦您构建了该平台(自动发生)、您应该在其中直接有一个"封装"、例如 /my/platform/package. 对于"平台包存储库"、请确保您刚刚拥有 不是 /my 或 /my/platform.

    [/报价]

    我尝试了所有这些、但运气不好。  此主题的核心问题已经得到解答,让我们获得成功:) 我将为平台问题生成一个新的 TT。  这不是一个大问题、因为预计不会有那么大的变化。

    谢谢、

    Robert

    P.S.  我将 L2高速缓存提升到128K (L2CFG = 0x0101003)、但一切仍然正常。

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

    [引用用户="Robert56682"]P.S.  我将 L2高速缓存提升到128K (L2CFG = 0x0101003)、但一切仍然正常。

    一个快速跟进、以确保我们解决了问题...  这听起来有点像"猜测和检查"。  应该非常清晰...  那么、您是否删除了一些手动创建的段?  调整高速缓存大小时、您是否看到 BIOS 生成的部分?  如果您使用的是 BIOS 生成的部分、则它将始终有效。  唯一可能遇到的问题是、如果分配给内部存储器的内容多于分配的空间、则会出现链接错误。

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

    实际上可能是你问的好,因为看起来我可能已经跳过了一个枪(渴望继续!)。  cos()程序相关代码的清除不再发生,但我将清除一些全局变量,作为类似 memset (非相关全局变量、不同源文件)的一部分。  即使返回32k L2高速缓存也没有帮助(L2CFG = 0x01010000)

    下面我不清楚您的问题。

    [引用用户="Brad Griffies"]

    一个快速跟进、以确保我们解决了问题...  这听起来有点像"猜测和检查"。  应该非常清晰...  那么、您是否删除了一些手动创建的段?  

    [/报价]

    什么类型的手部? 在此过程中、我无法想象任何情况。

    [引用用户="Brad Griffies"]

    调整高速缓存大小时、您是否看到 BIOS 生成的部分?  

    [/报价]

    您将如何通过映射文件进行检查?

    [引用用户="Brad Griffies"]

    如果您使用的是 BIOS 生成的部分、则它将始终有效。  

    [/报价]

    您能不能更详细地解释一下您的意思

    [引用用户="Brad Griffies"]

    唯一可能遇到的问题是、如果分配给内部存储器的内容多于分配的空间、则会出现链接错误。

    [/报价]

    它正在构建、没有链路错误。

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

    最后,我的问题是在创建/编辑平台(LP1SRAM、LD1SRAM)时,我手动修改 Device Memory 行中的长度... 假设这是需要的、因为其中一些是0。 但在调整 L1P 缓存、L1D 缓存和 L2缓存的存储器大小时、SYS-BIOS 会自动设置这些缓存。 允许 SYS-BIOS 在不对其长度进行任何手动编辑的情况下进行该调整是分辨率。