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.
您好 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