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);
}
当您需要有关我的逻辑的更多信息时、请告诉我。
提前感谢您。
此致、
李承根