您好!
我们将配置 DCC 模块、以使用 counter1作为测量 counter0的时钟源的基准。 当 counter1达到零时、DCC 会冻结计数器。
测试正常、但有时当 counter1为1而不是0时状态变为1。 您对此有何看法?
此致、
马尔西奥

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.
您好!
我们将配置 DCC 模块、以使用 counter1作为测量 counter0的时钟源的基准。 当 counter1达到零时、DCC 会冻结计数器。
测试正常、但有时当 counter1为1而不是0时状态变为1。 您对此有何看法?
此致、
马尔西奥

尊敬的 Marcio:
我怀疑此问题是由于勘误表 DCC#24:

*RM57Lx 微控制器芯片勘误表(芯片修订版 B)(TI.com)
您是否在单次模式下使用?
--
谢谢。此致、
Jagadish。
Jagadish、您好!
这似乎是一个不同的问题、因为我们将 DCC1设置为在计数器1达到0时停止、如 SPNU562A–2018年3月的第15.2.2节"当计数器1达到零时冻结计数器:"中所述。
在图片中、我们可以看到 Stat=1 (失败) Cnt0!= 0和 Cnt1=1。 我希望看到 Stat=2 (Done) Cnt0 != 0和 Cnt1=0。
此致、
Marcio。
谢谢 Jagadish。
我可以提供一段与测试相关的代码。
typedef unsigned short WORD;
typedef unsigned int DWORD;
// DCC Clock0 Counter Seed value configuration (ONCIN=16MHz).
// Maximum Detection Time (MDT) = 2500 microseconds = (2.5*10^-3)seconds
// CNT0_SEED = (OSC x MDT) = (16*10^6) * (2.5*10^-3) = 40000
const DWORD CNT0_SEED = 40000U;
// DCC Clock1 Counter Seed value configuration (EXTCLKIN1=1MHz).
// Maximum Detection Time (MDT) = 2500 microseconds = (2.5*10^-3)seconds
// CNT1_SEED = (EXTCLK1 x MDT) = (1*10^6) * (2.5*10^-3) = 2500
const DWORD CNT1_SEED = 2500U;
// DCC Clock0 Counter Seed value configuration (ONCIN=16MHz).
const DWORD DCC_CNT0_SEED_VALUE = (2 * CNT0_SEED)-4;
// DCC Clock0 Valid Counter Seed value configuration.
const DWORD DCC_VALID0_SEED_VALUE = 4U;
// DCC Clock1 Counter Seed value configuration (EXTCLKIN1=1MHz).
const DWORD DCC_CNT1_SEED_VALUE = CNT1_SEED;
// Clock Drift (55ppm for 16MHz)
// Variation [in Hz] = (frequency [in Hz] * frequency variation [in ppm]) / 10^6
// Variation [in Hz] = ((16*10^6) * (55)) / 10^6 = 880Hz
// Maximum Detection Time (MDT) = 2500 microseconds = (2.5x10^-3)seconds
// CLOCK0_COUNTER_OFFSET = (Variation x MDT) = (880 * (2.5x10^-3)) = 2.2
//const WORD CLOCK0_COUNTER_OFFSET = (DWORD)2U;
const WORD CLOCK0_COUNTER_OFFSET = (DWORD)50U;
//DCC Clock0 Counter: Default Value and Thresholds.
const WORD CLOCK0_COUNTER_DEFAULT = (DWORD)(CNT0_SEED); // Default value.
const WORD CLOCK0_COUNTER_LOWER = (DWORD)(CLOCK0_COUNTER_DEFAULT - CLOCK0_COUNTER_OFFSET); // Lower bound.
const WORD CLOCK0_COUNTER_UPPER = (DWORD)(CLOCK0_COUNTER_DEFAULT + CLOCK0_COUNTER_OFFSET); // Upper bound.
void StartTest (void)
{
// Configure DCC1.
// Configure the clock sources.
REG_DCC_1->CNT0CLKSRC = DCC1_CNT0_CLKSRC_OSCIN;
REG_DCC_1->CNT1CLKSRC = DCC1_CNT1_CLKSRC_EXTCLKIN1;
// Set counters seeds.
REG_DCC_1->CNT0SEED = DCC_CNT0_SEED_VALUE;
REG_DCC_1->VALID0SEED = DCC_VALID0_SEED_VALUE;
REG_DCC_1->CNT1SEED = DCC_CNT1_SEED_VALUE;
// DCC1 Global Control Register configuration.
REG_DCC_1->GCTRL = (DWORD)0x5U | // Disable DCC1.
(DWORD)((DWORD)0x5U << 4U) | // Disable Error Interrupt.
(DWORD)((DWORD)0xBU << 8U) | // Enable Single Shot mode.
(DWORD)((DWORD)0x5U << 12U); // Disable Done Interrupt.
// Clear the Done and Error flags.
REG_DCC_1->STAT = 0x03;
// Enable DCC1.
REG_DCC_1->GCTRL = (REG_DCC_1->GCTRL & 0xFFFFFFF0U) | 0xAU;
}
void TestWorker (void)
{
DWORD status = REG_DCC_1->STAT;
if (status > 0)
{
DWORD counter0 = Dcc1GetCounter0();
DWORD counter1 = Dcc1GetCounter1();
// Test.
if ((counter0 <= CLOCK0_COUNTER_UPPER) && (counter0 >= CLOCK0_COUNTER_LOWER))
{
// Good
// Clear the Done and Error flags.
REG_DCC_1->STAT = 0x03;
// Enable DCC1.
REG_DCC_1->GCTRL = (REG_DCC_1->GCTRL & 0xFFFFFFF0U) | 0xAU;
}
else
{
// Error.
FatalError();
}
}
}
尊敬的 Marcio:
很抱歉我的回复出现延迟!
下面是一个我的更新。
我在 RM57L853 Launchpad 上采用了与您相同的设置进行了测试
下面是我的测试代码:
e2e.ti.com/.../DCC_5F00_TEST_5F00_RM57.zip
在该代码中、我还使用 ETPWM1A 生成了1MHz 板载信号、然后将同一信号连接到 EXTCLKIN1并用于 DCC。
这是调试结果: 
我测试了几乎20次、得到了相同的结果、却看不到 Cnt1值为"1"。
因此、我想与您确认以下事项:
1.您得到 Cnt1值1的频率有多高,而得到 Cnt1值的次数是多少?
2.从何处施加1MHz 信号?
3.您能测试我的代码吗,让我知道结果;您只需要用 B5 (EXTCLKIN1)短接控制器的 D9 (ePWM1A)引脚。
--
谢谢。此致、
Jagadish。
感谢您的答复 Jagadish。
1.您得到 Cnt1值1的频率有多高,而得到 Cnt1值的次数是多少?
大约每30秒1次、当 counter1为1而不是0时该状态变为1。 我们使测试重复运行、直到错误发生。
2.从何处施加1MHz 信号?
EXTCLKIN1是一个1MHz 的独立晶体振荡器。 OSCIN 是16MHz Chrystal。
ETPWM1A 输出是否与 OSCIN 同步?
3.您能测试我的代码吗,让我知道结果;您只需要用 B5 (EXTCLKIN1)短接控制器的 D9 (ePWM1A)引脚。
好的。 我´ll 执行它并将结果返回给您。
谢谢。此致、
Marcio。
尊敬的 Marcio:
同时将 EXTCLKIN1连接到波形发生器。
我在开发板上的应用程序无法重现此问题。
那么、您能将您的应用与我的代码进行比较吗、您能指出我们的代码中存在的任何差异吗?
--
谢谢。此致、
Jagadish。
您好 Jagadish:
没有太多的区别。 DCC 配置参数相同。 您的 dccInit 也会配置 DCC2、种子在之后进行配置。 我的应用程序没有配置 DCC2。 您的程序将保持在循环中、等待结果。 我的应用程序启动测试,做很多其他事情(包括处理其他的 perifherals ),比测试本身需要更多的时间,然后返回检查测试结果。
我会将测试代码移至我的应用、并在我们的电路板上运行它、然后将结果发布到该主题中。 硬件团队还参与检查 EXTCLKIN1 输入。
谢谢。此致、
Marcio。
尊敬的 Marcio:
我将测试代码移至我的应用程序并在我们的电路板上运行,然后将结果发布在此主题中。 硬件团队还参与检查 EXTCLKIN1 输入。
我想说这是一个好主意。
--
谢谢。此致、
Jagadish。