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.

[参考译文] TMS320F280049C:调试期间的 SDFM 示例问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/926783/tms320f280049c-sdfm-example-problem-during-debugging

器件型号:TMS320F280049C
主题中讨论的其他器件: C2000WAREAMC1306EVMAMC1303EVM

您好 C2000 Champs!

客户尝试使用两个不同的评估板来运行用于 TI TMS320F280049C (Launchpad) sdfm 函数的 sdfm 示例代码(C2000 Ware 3.02)。
第一个是 AMC1306EMV、第二个是 AMC1306EMV、两者都没有曼彻斯特编码。

以下配置用于测试 c2000ware 中提供的示例。

-      SDFM 示例代码1

-      具有外部 CLK (10MHz)的 AMC1306EVM 使用示波器测量的位流、发现正常。

-      AMC1303EVM 是使用示波器测量的位流、发现正常。

-      ADC 的模拟输入连接至 GND

-      ADC 的 CLK 连接到 GPIO 25 (板上的引脚31、滤波器1)

-       ADC 的数据输出连接到 GPIO 24 (电路板上的引脚55、TI 提供的错误文档、滤波器1)

      -过滤器2、3和4未连接。
        在第二个配置中、我们检查了所有4个数据和 CLK 滤波器输入彼此连接。
        第三种配置类似于第一种配置、但排除了滤波器2、3和4的所有明显代码。

-      设置了示例注释中提到的断点

-      上述引脚配置在代码注释中给出

-      C2000ware 版本3.02

问题:

代码在调试会话中暂停、并在 while (1)循环中最多找到。

有时、它在 sdfm1ErrorISR 中断中、没有明显的原因。

我们观察到了变量 filter1Result、但未获取任何数据。

您能帮助找出根本原因吗?

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

    DJ、

    一些可帮助我们找出问题根源的调试问题...

    1) 1)遇到故障时、SDIFLG 寄存器(32位十六进制寄存器)的内容是什么? 您是否看到调制器标志设置?

    2) 2)您是否确保设置了主滤波器使能位(MFE 位)?

    3) 3)您是否确保设置了滤波器使能位(FEN 位)?

    4) 4)您是否能够提供0x5E00 - 0x5E7F 的内容转储?

    5) 5)您是否正在运行 C2000Ware 中提供的示例代码?

    此致、

    曼诺伊

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

    Manoj、您好!

    DJ 帮我解决了问题、所以我会直接回答您的问题。  

    [引用用户="Manoj Santha Mohan"]

    1) 1)遇到故障时、SDIFLG 寄存器(32位十六进制寄存器)的内容是什么? 您是否看到调制器标志设置?

    [/报价]

    SDIFLG 寄存器内容为 :0x80001E00。

    因此、对于滤波器2-4 、调制器故障标志置1、对于滤波器1、确认标志置1。  

    [引用用户="Manoj Santha Mohan"]

    2) 2)您是否确保设置了主滤波器使能位(MFE 位)?

    [/报价]

    设置 MFE。

    [引用用户="Manoj Santha Mohan"]

    3) 3)您是否确保设置了滤波器使能位(FEN 位)?

    [/报价]

    FEN 也被置位。

    [引用用户="Manoj Santha Mohan"]

    4) 4)您是否能够提供0x5E00 - 0x5E7F 的内容转储?

    [/报价]

    这是来自所有 SDFM 寄存器的内容:

    R Sdfm1Regs_SDIFLG 0x0000000B 0x80001E00
    R Sdfm1Regs_SDIFLGCLR 0x0000000B 0x00000000
    R Sdfm1Regs_SDCTL 0x0000000F 0x2000
    R Sdfm1Regs_SDMFILEN 0x0000000F 0x0800
    R Sdfm1Regs_SDSTATUS 0x0000000F 0x0000
    R Sdfm1Regs_SDCTLPARM1 0x0000000F 0x0000
    R Sdfm1Regs_SDDFPARM1 0x0000000F 0x0F7F
    R Sdfm1Regs_SDDPARM1 0x0000000F 0x3800
    R Sdfm1Regs_SDCMPH1 0x0000000F 0x0000
    R Sdfm1Regs_SDCMPL1 0x0000000F 0x0000
    R Sdfm1Regs_SDCPARM1 0x0000000F 0x039F
    R Sdfm1Regs_SDDATA1 0x0000000B 0xFFF10000
    R Sdfm1Regs_SDDATFIFO1 0x0000000B 0x00000000
    R Sdfm1Regs_SDCDATA1 0x0000000F 0x0000
    R Sdfm1Regs_SDCMPHZ1 0x0000000F 0x0000
    R Sdfm1Regs_SDFIFOCTL1 0x0000000F 0x0000
    R Sdfm1Regs_SDSYNC1 0x0000000F 0x0400
    R Sdfm1Regs_SDCTLPARM2 0x0000000F 0x0000
    R Sdfm1Regs_SDDFPARM2 0x0000000F 0x0F7F
    R Sdfm1Regs_SDDPARM2 0x0000000F 0x3800
    R Sdfm1Regs_SDCMPH2 0x0000000F 0x0000
    R Sdfm1Regs_SDCMPL2 0x0000000F 0x0000
    R Sdfm1Regs_SDCPARM2 0x0000000F 0x039F
    R Sdfm1Regs_SDDATA2 0x0000000B 0x00000000
    R Sdfm1Regs_SDDATFIFO2 0x0000000B 0x00000000
    R Sdfm1Regs_SDCDATA2 0x0000000F 0x0000
    R Sdfm1Regs_SDCMPHZ2 0x0000000F 0x0000
    R Sdfm1Regs_SDFIFOCTL2 0x0000000F 0x0000
    R Sdfm1Regs_SDSYNC2 0x0000000F 0x0400
    R Sdfm1Regs_SDCTLPARM3 0x0000000F 0x0000
    R Sdfm1Regs_SDDFPARM3 0x0000000F 0x0F7F
    R Sdfm1Regs_SDDPARM3 0x0000000F 0x3800
    R Sdfm1Regs_SDCMPH3 0x0000000F 0x0000
    R Sdfm1Regs_SDCMPL3 0x0000000F 0x0000
    R Sdfm1Regs_SDCPARM3 0x0000000F 0x039F
    R Sdfm1Regs_SDDATA3 0x0000000B 0x00000000
    R Sdfm1Regs_SDDATFIFO3 0x0000000B 0x00000000
    R Sdfm1Regs_SDCDATA3 0x0000000F 0x0000
    R Sdfm1Regs_SDCMPHZ3 0x0000000F 0x0000
    R Sdfm1Regs_SDFIFOCTL3 0x0000000F 0x0000
    R Sdfm1Regs_SDSYNC3 0x0000000F 0x0400
    R Sdfm1Regs_SDCTLPARM4 0x0000000F 0x0000
    R Sdfm1Regs_SDDFPARM4 0x0000000F 0x0F7F
    R Sdfm1Regs_SDDPARM4 0x0000000F 0x3800
    R Sdfm1Regs_SDCMPH4 0x0000000F 0x0000
    R Sdfm1Regs_SDCML4 0x0000000F 0x0000
    R Sdfm1Regs_SDCPARM4 0x0000000F 0x039F
    R Sdfm1Regs_SDDATA4 0x0000000B 0x00000000
    R Sdfm1Regs_SDDATFIFO4 0x0000000B 0x00000000
    R Sdfm1Regs_SDCDATA4 0x0000000F 0x0000
    R Sdfm1Regs_SDCMPHZ4 0x0000000F 0x0000
    R Sdfm1Regs_SDFIFOCTL4 0x0000000F 0x0000
    R Sdfm1Regs_SDSYNC4 0x0000000F 0x0400

    [引用用户="Manoj Santha Mohan"]

    5) 5)您是否正在运行 C2000Ware 中提供的示例代码

    [/报价]

    是的,这是 C2000Ware (sdfm_ex1_filter_sync_cpuread)的示例。  

    感谢你的帮助。 我希望这只是一个简单的问题。  

    Phillip  

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

    Phillip、

    感谢您回答所有问题。 现在、我更清楚地了解了这个问题。

    根据 SDIFLG 寄存器、很明显 filter1正在生成数据确认事件、而 Filter2/3/4正在获取调制器时钟故障。 您在滤波器2/3/4上会遇到调制器时钟故障、因为您没有为滤波器2/3/4提供时钟。 这是预期的。 SDDATA1寄存器显示了 SD 调制器接地模拟输入的有效滤波器数据0xFFF1。

    由于我看到数据确认标志(AF1置位)、我假设 sdfmDR1ISR 中断服务例程确实会被触发、并且您会停留在 while 循环的下方。 我是对的吗?

       while ((HWREG (SDFM1_base + SDFM_O_SDIFLG)& 0xF000U)!= 0xF000U)
       {
       }

    如果是、这是因为、示例代码假定时钟和数据并馈送到 SDFM 中的所有四个滤波器通道。 while 环路等待所有滤波器通道生成数据确认事件。 由于它仅从 filter1接收到数据确认事件、因此它会在无限循环中等待。

    如果您希望仅使用 filter1、请按如下所示修改代码。 这允许将滤波器结果填充到 filter1Result 缓冲器中。

       while ((HWREG (SDFM1_base + SDFM_O_SDIFLG)& 0xF000U)!= 0x1000U)
       {
       }

    此致、

    曼诺伊

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

    您好、Manoj、  

    现在一切都好了、谢谢。

    Phillip