STC32F12 到底速度有多快?
01 执行速度
一、前言
昨天测试单片机STC32F软件的时候, 碰到一个问题。 也就是当设置单片机 IRC 频率高于 32MHz 的时候, 单片机不运行。 最后才发现是在 程序初始化的时候 设置 WTST 寄存器引起的。 ·这个寄存器是单片机到FLASH取指令所需要的等待时间。 下面对此进行测试。
二、测试结果
1、WTST寄存器
这里将 WTST的设置命令去除, 在程序里不在设置 WTST, 在程序运行前, 将WTST寄存器的缺省值输出。 这是输出信息, 可以看到WTST被设置为 2。
在 STC ISP 程序中, 单片机 IRC 运行频率选择 64 MHz, 此时运行在单片机最高速状态下。 在主程序中, 通过 P2.0 输出一个方波信号。 测量该信号的波形可以判断程序是否运行, 并且可以测量程序运行的时间 延迟。 通过修改 WTST的值, 可以看到, 只要当WTST 的值大于等于 1时, STC32F 单片机才能够运行在 64MHz下, ·如果 WTST的值设置等于0, 在64MHz下, STC32F无法运行。 -只有当 IRC 频率小于等于 32MHz时, STC32F才能够运行。
2、连续端口操作命令
在主程序中, LED 对应的 P2.0, 通过连续的 ON,OFF 宏指令改变它的状态。 利用示波器测量 P2.0 电压波形, 可以测量指令执行时间。 这是在主频 64MHz, WTST等于1 的情况下,测量的结果。 这里测量端口上下改变 6 次状态之间的时间, 总时间为 140 ns。 执行了 ON, OFF 六次指令。 对应每次指令执行时间大约 23.3 ns。 是 64MHz下指令周期的1.5倍。 这说明这六条指令 使用了9个指令时间。 ·从另一方面说明了, 在这个过程中存在着三次取指等待时间。
这里将 WTST 的 取指改为 2, 重新测量 P2.0 的波形, 可以看到它低电平明显增加了。 在这三个脉冲之间的时间间隔大约为 148ns, 对应着 5条指令, 执行时间长度大约为 64MHz 下的周期的 9.5倍。 这说明两点, 一是WTST可以影响每条指令的实际执行时钟数字, 二是这个增加时钟数字似乎还存在着半个时钟周期的情况。 具体原因不详。
3、最大等待时间
在 STC32F 数据手册上, 对于WTST数值可以设置等待 0 到 7 个时钟, 后面写作保留。 那么问题来了, 这个保留是否是指不能够设置呢? 下面测试一下 WTST最大可以设置多少, 这里将 WTST设置为 0xff。 重新测量连续端口操作命令, 可以看到低电平的时间增加到 4 微秒。 它等于 64 MHz 时钟周期的 256 倍。 可以看出 STC32F是在两次命令下才对外取指一次, 延迟了 256 个时钟周期。 这只是个测试, 谁也不会真的浪费这么多的等待周期。
※ 结论 ※
本文对于 STC32F单片机在时钟64MHz下的速度进行测量, 通过实际测试可以看到 WTST 只能够取大于等于 1 以上的数值。 如果等 0 则只能在 时钟 32MHz 以内 执行。 那么问题来了, 虽然STC32F号称单指令单片机, 时钟可以高达 64MHz, 但取值需要等待至少 1 个指令周期以上, ·那么单片机实际指令速度只能小于 32 MIPS。 这个64MHz的时钟速度的意义又在哪里呢?
■ 相关文献链接: