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.

[参考译文] TMS320F280038C-Q1:CLK2 -使用 CPU TIMER2进行时钟完整性检查

Guru**** 2467750 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1482818/tms320f280038c-q1-clk2---clock-integrity-check-using-cpu-timer2

器件型号:TMS320F280038C-Q1
Thread 中讨论的其他器件:C2000WARE

工具与软件:

您好、TI 团队。

我对使用 CPU TImer2 (FSM 的 CLK2)进行 clcok 完整性检查有一些疑问。

首先、我已经弹劾了 C2000 5.0.0版本的以下 usin SDL 逻辑。

然而、使用 CPUTimer2的振荡器测试的结果始终失败。
我想知道产生这种结果的原因并获取该问题的解决方案。
如果你们能为这个问题提供一些指导或解决方案、我将不胜感激。

全局 uint16_t HAL_MCUDiag_CLK2_ClockIntegrityCheck (void)

uint16_t u16returnVal = CTL_U_CLR;
STA_User_initOSCTimer2Test ();

STL_OSC_CT_startTest (STA_User_oscTimer2Handle);

u16returnVal = STL_OSC_CT_stopTest (STA_User_oscTimer2Handle);

return u16returnVal;
}
void STA_User_initOSCTimer2Test (void)

STA_User_oscTimer2Obj.minCount = STA_USER_OSC_MIN_COUNT;
STA_User_oscTimer2Obj.maxCount = STA_USER_OSC_MAX_COUNT;
STA_User_oscTimer2Obj.clockSource = CPUTIMER_CLOCK_SOURCE_INTOSC1;
STA_User_oscTimer2Obj.prescaler = CPUTIMER_CLOCK_PRESCALE_1;

STA_User_oscTimer2Handle =&STA_User_oscTimer2Obj;
}


空 STL_OSC_CT_startTest (const STL_OSC_CT_Handle oscTimer2Handle)

//
//停止计时器2。
//
CPUTimer_stopTimer (CPUTIMER2_BASE);

//
//清除溢出标志。
//
CPUTimer_clearOverflowFlag (CPUTIMER2_BASE);

//
//禁用中断。
//
CPUTimer_disableInterrupt (CPUTIMER2_BASE);

//
//将 Timer2周期初始化为最大值。
//
CPUTimer_setPeriod (CPUTIMER2_BASE、STL_OSC_CT_PERIOD);

//
//初始化预分频器计数器以进行1分频(SYSCLKOUT)。
//
CPUTimer_setPreCalibrate (CPUTIMER2_BASE、0U);

//
//重新加载 Timer2计数器。
//
CPUTimer_reloadTimerCounter (CPUTIMER2_BASE);

//
//将预分频器设置为输入预分频器值。
//选择 Timer2时钟源。
//
CPUTimer_selectClockSource (CPUTIMER2_BASE、oscTimer2Handle->clockSource、
oscTimer2Handle->prescaler);

//
//启动 CPU 定时器2。
//
CPUTimer_startTimer (CPUTIMER2_BASE);
}

//
//
// STL_OSC_CT_stopTest (const STL_OSC_CT_Handle oscTimer2Handle)
//
//
uint16_t STL_OSC_CT_stopTest (const STL_OSC_CT_Handle oscTimer2Handle)

uint32_t counterDelta;
uint16_t testStatus;

//
//停止 CPU 计时器2。
//
CPUTimer_stopTimer (CPUTIMER2_BASE);

//
//获取 Timer2计数器增量。
//
counterDelta =(uint32_t) STL_OSC_CT_PERIOD - CPUTimer_getTimerCount (CPUTIMER2_BASE);
//
//检查 Timer2是否溢出或 Timer2计数器是否溢出
//超出范围。
//
if ((counterDelta <= oscTimer2Handle->minCount)||
(counterDelta >= oscTimer2Handle->maxCount)||
(CPUTimer_getTimerOverflowStatus (CPUTIMER2_BASE)> STL_OSC_CT_PERIOD))

//
//设置全局错误标志。
//

STL_Util_setErrorFlag (STL_UTIL_OSC_TIMER2);

TestStatus = STL_OSC_CT_FAIL;
}
设计

TestStatus = STL_OSC_CT_PASS;
}

返回(testStatus);
}

当您需要有关我的逻辑的更多信息时、请告诉我。
提前感谢您。
此致、
李承根

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

    您好!

    您可以检查 C2000Ware 示例以查看是否已正确配置: C:\ti\c2000\C2000Ware_5_03_00_00\driverlib\f28003x\examples\timer  

    或使用 bitfield 示例: C:\ti\c2000\C2000Ware_5_03_00_00\device_support\f2803x\examples\c28\cpu_timer

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

    您好、
    我已经检查了示例。

    但是、您共享的示例中没有有关时钟完整性检查的信息。

    请分享相应的时钟完整性检查示例?

    或者、请查看我有关时钟完整性检查的代码。

    提前感谢您。

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

    您好!

    此代码的示例可在以下位置找到:C:\ti\c2000\C2000Ware_5_04_00_00\libraries\diagnostic\f28003x\examples\test_application。

    此外、您是如何计算最小计数和最大计数值的? 您似乎没有在对开始和停止函数调用的调用之间进行延迟。