Thread 中讨论的其他器件:C2000WARE
工具与软件:
软件诊断库中的自检应用示例(文件"sta_tests.c")使用此代码片段中的代码对 CPU 计时器进行测试

用于获取比较系统节拍所经过的延迟 STL_Util_delayUS ()、
static inline void STL_Util_delayUS(uint32_t microseconds){ uint32_t delay = (uint32_t)(((((float32_t)microseconds * 1000.0f) / (float32_t)STL_UTIL_CPU_RATE) - 9.0f) / 5.0f);
SysCtl_delay(delay);}
具体取决于 STL_UTIL_CPU_RATE 、在"stl_util.h"中定义为
//// Defines//#define STL_UTIL_CPU_RATE 8.33f // for a 120MHz CPU clock speed (SYSCLKOUT)//#define STL_UTIL_CPU_RATE 10.00f // for a 100MHz CPU clock speed (SYSCLKOUT)//#define STL_UTIL_CPU_RATE 11.111f // for a 90MHz CPU clock speed (SYSCLKOUT)//#define STL_UTIL_CPU_RATE 12.500f // for a 80MHz CPU clock speed (SYSCLKOUT)//#define STL_UTIL_CPU_RATE 16.667f // for a 60MHz CPU clock speed (SYSCLKOUT)//#define STL_UTIL_CPU_RATE 20.000f // for a 50MHz CPU clock speed (SYSCLKOUT)//#define STL_UTIL_CPU_RATE 25.000f // for a 40MHz CPU clock speed (SYSCLKOUT)//#define STL_UTIL_CPU_RATE 33.333f // for a 30MHz CPU clock speed (SYSCLKOUT)//#define STL_UTIL_CPU_RATE 41.667f // for a 24MHz CPU clock speed (SYSCLKOUT)//#define STL_UTIL_CPU_RATE 50.000f // for a 20MHz CPU clock speed (SYSCLKOUT)//#define STL_UTIL_CPU_RATE 66.667f // for a 15MHz CPU clock speed (SYSCLKOUT)//#define STL_UTIL_CPU_RATE 100.000f // for a 10MHz CPU clock speed (SYSCLKOUT)
120 MHz 的有效数字为正 范围之内 、适用于大数字和严格范围、如中的示例所示 STL_OSC_CT_stopTest ()也是 粗调 精度。
可用于测试 失败 -这发生在我的设置。
解决方案可以用更多的数字(如8.3333f)更改#define、但它仍是 C2000Ware 标头的一部分。
在我的案例中,我选择避免完全 STL_Util_delayUS,直接使用 SysCtl_delay,并计算延迟与(甚至更安全)整数算术。 我最终得到了一些表现类似的代码
uint32_t delay_counts = (((STA_USER_OSC_MIN_COUNT + STA_USER_OSC_MAX_COUNT) / 2u) - 9u) / 5u; SysCtl_delay(delay_counts);
可对象的是上面的代码甚至不引用 CPU 时钟频率。 但是、即使是原始代码也不会:它只是将其隐藏在宏中(以及8.33f 幻数中)