IO模拟一种2线接口(类似I2C, 但略有不同),请问一个细节如何实现为好
使用STC32F12K54
操作一种类似MDIO/MDC的接口,读写一种交换机芯片的寄存器。类似I2C但有细微差异,因此不能直接用I2C, 用GPIO模拟 CLK 和 双向DATA
问题是,在读时序中, 有个周期要切换输出为高阻输入,然后外部设备回发1个0和多位数据, 建议的CLK为200ns, 即5M时钟。
请问如何设置IO配置,特别是如何切换IO的输入输出模式,能够更好的符合建议的时钟频率和时序
时序图如下:
实际测试,GPIO输出CLK, 可以稳定工作在2.5MHz左右(56M主频, WTST = 1; 如56M, WTST=0, IRC驱动,芯片无法工作)
P4M0 &= ~0x20; P4M1 &= ~0x20;//P4.5设置准双向口
/*P4PU &= ~0x20;*/ P4NCS &= ~0x20; /*P4IE |= 0x20;*/
P4SR &= ~0x20;
// P4DR &= ~0x20;
P45 = 1;
SETSMCK:
P45 ^= 1;
_nop_(); //取消NOP, GPIO 输出CLK频率约在3MHz
// _nop_();
// _nop_();
// _nop_();
goto SETSMCK;
将I/O设置为 【开漏模式】,打开内部上拉电阻 | 或外部加上拉电阻
===【开漏工作模式】,对外设置输出为1,等同于 【高阻输入】
===【开漏工作模式】,【打开内部上拉电阻 | 或外部加上拉电阻】,简单等同于 【准双向口】
请问为何56M主时钟,2倍指令时长(WTST = 1),GPIO的速率却只有2~3M, 这个速率是受什么制约造成的? 请问
1.ICache的大小是多大,能否知道特定程序是否进入了ICache
2.有没有方式让程序加载到SRAM(edata)中去运行, 从而跑到更高的速率?
我想通过一些优化, 让GPIO的翻转速率更高 > 5Mbps(目前是3Mbps) STC32F12K54建议最高主频跑 52MHz 以下
STC32F12K54, 由于 iCache的关系,时钟如在 18MHz ~ 52MHz, 都将 WTST = 1;
时钟不要高于52MHz, 这个STC32F是我们首次使用iCache 的 MCU, 还在改进中,会发展到 CPU@200MHz
神农鼎 发表于 2023-12-12 11:10
STC32F12K54建议最高主频跑 52MHz 以下
这个回答没有回答任何提问, 兄弟,虽然是贴规格书但没有啥意义 用STCH8K64U会更好,使用40MHZ外部晶振。 更正:是STC8H8K64U.
此类简单任务,用8位机更好。此所谓:尺有所短,寸有所长。
用STM32的M3也很难完成。 这么高的频率,CLK应该设为推挽输出