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.

[参考译文] TMS320F2808:看门狗定时器计算问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1040690/tms320f2808-watchdog-timer-calculation-issue

器件型号:TMS320F2808

我目前正在尝试实现一个计时器中断来为看门狗复位提供服务。 我将看门狗设置为1.3107ms、并将计时器中断设置为1ms。 但是、当测试以确保 WD 重置 F2808时、我将计时器中断设置为>WD 值 1.31072ms、并且没有复位。 似乎我必须将计时器中断设置为比 WD 值大10倍的幅度、这样我就认为 WD 值 计算不正确。  

为什么计时器中断需要比 WD 大10倍-我在计算中缺少什么? (我相信 OSCCLK 是100MHz 的 INCLK 值)

/* WDCR
*位字段说明
* 15-8保留
7 WDFLAG 看门狗复位状态标志位
* 6 WDDIS 看门狗禁用位1 =禁用
* 5-3 WDCHK 看门狗检查。 始终写入1、0、1、否则将发生复位
* 2-0 WDPS 看门狗预分频。
*   000 WDCLK = OSCCLK/512/1 (缺省值)
*   001 WDCLK = OSCCLK/512/1
*   010 WDCLK = OSCCLK/512/2
*   011 WDCLK = OSCCLK/512/4
*   100 WDCLK = OSCCLK/512/8
*   101 WDCLK = OSCCLK/512/16
*   110 WDCLK = OSCCLK/512/32
*   111 WDCLK = OSCCLK/512/64
*启用0x0028
* 0000 0000 00'10 1'000
* OSCCLK    PS  100/(512*PS) 1 WD Clk   WD Reset Timeout After 256 WD CLKS
* 100、000、000 、000 1  195312.5   0.00000512  0.00131072 <-如果没有 WDKEY 更新、预期复位时间
*        2  97656.25   0.00001024  0.00262144
*        4  48828.125  0.00002048  0.00524288
*        8  24414.063   0.00004096  0.01048576
*        16  12207.031   0.00008192  0.02097152
*        32  6103.5156   0.00016384  0.04194304
*        64  3051.7578   0.00032768  0.08388608
*
空 EnableDog (空)

EALLOW;
SysCtrlRegs.WDCR= 0x0028;//预分频(WDPS)为100M/512/2,因此 值应为 0.00131072
EDIS;


ConfigCpuTimer (&CpuTimer0
、100、13200);// 13.2mSec to TRIP 安全装置????

空 ConfigCpuTimer (struct CPUTIME_VARS *定时器、浮点频率、浮点周期)

uint32温度;

//初始化计时器周期:
Timer->CPUFreqInMHz =频率;
Timer->PeriodInUSec =周期;
temp =(long)(Freq * period);
Timer->RegsAddr->PRD.All = temp;

//将预分频计数器设置为1分频(SYSCLKOUT):
Timer->RegsAddr->TPR.All = 0;
Timer->RegsAddr->TPRH。ALL = 0;

//初始化计时器控制寄存器:
timer->RegsAddr->TCR.bit.TSS = 1;// 1 =停止计时器,0 =启动/重新启动计时器
timer->RegsAddr->TCR.bit.TRB = 1;// 1 =重新加载计时器
Timer->RegsAddr->TCR.bit.Soft = 1;
Timer->RegsAddr->TCR.bit.FREE = 1;//计时器自由运行
Timer->RegsAddr->TCR.bit.tie = 1;// 0 =禁用/ 1 =启用计时器中断

//复位中断计数器:
Timer->InterruptCount = 0;

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

    Jeff、

                   不确定您的目标到底是什么。 看门狗本身可以触发中断,因此我不理解为什么要使用“计时器中断服务看门狗复位”。 我是否应该将您的帖子的第一行解释为"我当前正在尝试实现计时器中断来定期为看门狗提供服务、以防止看门狗复位"?  

    OSCCLK 为10MHz、而不是100MHz。 OSCCLK 是 PLL 之前器件的输入时钟等 数学现在是否有意义?

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

    您的解释是正确的-我的措辞不正确。 您能否让我指出 F2808 (100MHz 器件)文档中指示 OSCCLK 为10MHz 的位置? 我找到的这对数表示它等于 INCLK。

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

    Jeffrey、

                   OSCCLK 是 PLL 的输入时钟、而数据表中的多个位置都提到了器件的工作频率。  

    第39页的脚注:OSCCLK 要么是片上振荡器的输出、要么是外部振荡器的输出。

     第126页的图9-26:请注意 CLKIN 是 CPU 的输入时钟(因此也是工作频率)。  

    第127页的表9-32。 第128页的表9-33

    图9-30显示了作为 WD 模块输入的 OSCCLK。

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

    因此、我查看了您指出的内容、但仍然看不到任何指示  OSCCLK = 10MHz 的内容。 (没有显示 CLKIN 与 OSCCLK 之间关系的特殊转换表。)

    但是、如果 OSCCLK 依赖于输入时钟、这会引起另一个问题、因为目前底座采用20MHz 晶体设计。 当系统实际使用100MHz 输入时钟时、这会如何改变时序? 这里的简单答案就足够了。

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

    我意识到我误解了 OSCCLK 为10MHz。 我检查了控制卡的原理图、它有一个20MHz 的输入时钟。 我有一个(内部)测试板、其频率为10MHz、并错误地假设 controlCARD 的频率也为10MHz。 抱歉。

    [引用 userid="352848" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1040690/tms320f2808-watchdog-timer-calculation-issue/3849825 #3849825"]没有显示 CLKIN 与 OSCCLK 之间关系的特殊转换表。

    我不赞同。 请参阅 SPRU712H 第48页的表3-8。 它清楚地表明 CLKIN 与 SYSCLKOUT 相同、并且显示了针对不同 PLLCR 值的 CLKIN 和 OSCCLK 之间的关系。

    [如果 OSCCLK 依赖于输入时钟、请引用 userid="352848" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1040690/tms320f2808-watchdog-timer-calculation-issue/3849825 #3849825"]

    OSCCLK 不依赖于输入时钟。 OSCCLK输入时钟。 也许这是你打算说的,但我认为我应该澄清。

    [引用 userid="352848" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1040690/tms320f2808-watchdog-timer-calculation-issue/3849825 #3849825"]当系统实际使用100MHz 输入时钟时,这会如何改变计时? [/报价]

    您是说、当您将100 MHz 时钟直接馈入芯片(绕过 PLL)时? 唯一需要改变的是 OSCCLK 值、现在为100MHz

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

    Jeff、

      如果我在电话中的解释澄清了您的问题、请关闭此帖子。 我们将继续解决 eCAN 问题。

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

    坞站上的20MHz 晶体启动过程和 OSCCLK、然后使用 PLLCR 和 CLKINDIV 获取  SYSCLKOUT。 所有看门狗计时器计算都基于20MHz 的 OSCCLK