当然,所有的8051都拉胯,不是CH552的自己的问题,所有对性能有一定追求的场合,8051都是不合适的。代码很简单
while(TRUE)
{
P17=1;
P17=0;
}
//实际编译成汇编以后只有三条指令
//L0: SETB P17
// CLR P17
// SJMP L0
SETB和CLR各需要2个周期,SJMP是5个周期,加起来总共9个周期,16M主频下,最高反转频率不超过2MHz。
各种调试器的TCK频率都会有这个限制,相比之下,USB的速度并不是什么瓶颈。硬件SPI能到8M,不过限制就多了,很多场合用不了,比如有2条SDO信号的地方。CH552实现的各种调试器,只能说能凑合用。
离线
@echo
是的,比如高云的FPGA要求flash编程模式TCK稳定输出一个频率范围,IO自己可以打出来,但是带上USB控制IO就打不出来需要的最小频率了。所以我的实现(以及Diodep的实现)都用了T2产生时钟,外部并起来,靠选择性高阻的方式实现SPI/TCK复用。当然,T2打波只能出时钟,不能出数据,所以只能reset或者run-test-idle。
离线
@echo
我觉得这么说CH552有失偏颇,循环开销高的话大可循环展开,靠牺牲一点点flash来换取低循环开销。同步接口时钟不稳定也不是什么大问题。
另外如果不介意上汇编优化,JZ JNZ好像比SJMP快 (测了一下好像一样快。)
最近编辑记录 iamseer (2021-10-29 14:53:12)
离线
@iamseer
任何对性能有要求的场合都不应该考虑8051,这个评价是很准确的,不用怀疑。
离线
@iamseer
任何对性能有要求的场合都不应该考虑8051,这个评价是很准确的,不用怀疑。
51不就是追求便宜好用么。一般51的外设也比较弱,确实也没办法。
离线
补充下:其实拉胯的是执行速度,本身IO还可以,CH552使用SPI输出8M时钟毫无问题。
离线
补充下:其实拉胯的是执行速度,本身IO还可以,CH552使用SPI输出8M时钟毫无问题。
但是没有fifo和dma,维持不了8M码率。
离线
echo 说:补充下:其实拉胯的是执行速度,本身IO还可以,CH552使用SPI输出8M时钟毫无问题。
但是没有fifo和dma,维持不了8M码率。
CH552号称有一个字节的FIFO,不过聊胜于无吧,不要再难为一颗只有16M主频的8051了。
离线