zxcv1973 发表于 2023-12-12 20:52:44

把主频设为36M,WTST = 0试试

13918210822 发表于 2023-12-13 10:09:41

社区闲人 发表于 2023-12-12 18:12
用STCH8K64U会更好,使用40MHZ外部晶振。

STC8H8K虽然是8位, GPIO的翻转速率实际能到多少? 是否有经验数据?

13918210822 发表于 2023-12-13 10:10:37

zxcv1973 发表于 2023-12-12 20:46
这么高的频率,CLK应该设为推挽输出

实际测试, 打开smith触发器情况下, 由于接收端输入阻抗比较大, 准双向和推挽对于波形和速率均无差异

13918210822 发表于 2023-12-13 10:16:59

本帖最后由 13918210822 于 2023-12-13 10:40 编辑

zxcv1973 发表于 2023-12-12 20:52
把主频设为36M,WTST = 0试试
之前测试, WTST=0, 最高实际测试能跑到32M, 超过后MCU内核不启动.
偶尔启动,不到1s跑飞.

由于看手册GPIO SFR赋值是单周期. 但是实际上只有理论速度1/10左右.
所有,我想找到原因. 看看是否可以优化.

社区闲人 发表于 2023-12-13 10:45:59

13918210822 发表于 2023-12-13 10:09
STC8H8K虽然是8位, GPIO的翻转速率实际能到多少? 是否有经验数据?

2019年时,我用刚刚出来的stc8h1k08做类似案子,IO口模拟SPI,4MHZ完成通信。使用32MHZ外部晶振。
现在STC8H8K64U的频率可达45MHZ, IO口模拟SPI,可实现5MHZ以上的速率完成通信。

zxcv1973 发表于 2023-12-13 10:58:05

13918210822 发表于 2023-12-13 10:16
之前测试, WTST=0, 最高实际测试能跑到32M, 超过后MCU内核不启动.
偶尔启动,不到1s跑飞.



把P45 ^= 1改为P45 = ~P45
      

社区闲人 发表于 2023-12-13 11:15:44

不要迷信带ICache的高主频MCU。尤其是STM32F103之类.
在IO翻转之类应用中,用8位机是最优选择。

13918210822 发表于 2023-12-13 11:54:00

zxcv1973 发表于 2023-12-13 10:58
把P45 ^= 1改为P45 = ~P45

看了一个反汇编, 感觉有戏, 稍后好好测试一下.

; line 100:         P45 = 1;
      SETB   P45
; line 101:
; line 102: SETSMCK:
SETSMCK:
      CPL      P45                        ; Cycle 1
; line 103: //        P45 ^= 1;
; line 104:   P45 = ~P45;   
; line 105:         _nop_();
      NOP                                      ; Cycle 1, seize for sda cycle.
; line 106: //        _nop_();
; line 107: //        _nop_();
; line 108: //        _nop_();
; line 109:         goto SETSMCK;
      SJMP   SETSMCK                ; Cycle 2, Total 4 Cycles in single loop
               

; line 100:         P45 = 1;
      SETB   P45
; line 101:
; line 102: SETSMCK:
SETSMCK:
      MOV      C,P45                        ; Cycle 2
      CPL      C                                ; Cycle 1
      MOV      P45,C                        ; Cycle 2
; line 103:         P45 ^= 1;
; line 104: //    P45 = ~P45;   
; line 105:         _nop_();
      NOP                                      ; Cycle 1
; line 106: //        _nop_();
; line 107: //        _nop_();
; line 108: //        _nop_();
; line 109:         goto SETSMCK;
      SJMP   SETSMCK                ; Cycle 2, Total Cycle 8 in single loop.

13918210822 发表于 2023-12-13 12:00:22

社区闲人 发表于 2023-12-13 11:15
不要迷信带ICache的高主频MCU。尤其是STM32F103之类.
在IO翻转之类应用中,用8位机是最优选择。 ...

有空找个STC8H 8位开发板实际测试下, 但是,按照我对硬件的理解,IO速度在那里(如果规格书的数据是准确的),制约应该在Core上的指令序列和总线之类的。

神农鼎 发表于 2023-12-13 12:00:28

I/O的速度最快 20MHz ~ 30MHz
页: 1 [2] 3
查看完整版本: IO模拟一种2线接口(类似I2C, 但略有不同),请问一个细节如何实现为好