Dear,
在使用CY8C4126AZI-S433的时候,需要通过一个GPIO实现一个私有的单线通信协议,协议大体如图
在实现是发现通过Pin_write(1);CydelayCycle(4);Pin_write(0);的方式驱动GPIO实际速度无法符合通信协议要求,所以想了解一下有没有直接写GPIO output data register的方法,能不能满足这个协议的要求。具体这个通信协议请查阅附件文档。
谢谢。
Best Regards
Simon
已解决! 转到解答。
直接写寄存器
for(;;)
{
Pin_1_DR = 0xff;
Pin_1_DR =0x00;
}
这样得出的截图如下:
上升沿截图:
下降沿截图:
根据上面的图分析从硬件上面是可以做到你给出的时序图的,不过具体的问题还是要具体分析。
Hi Lingling,
我测试了一下,直接赋值Pin_DR在速度上是够快的,时间小于300ns,但是当我尝试不改变这个port其他IO的值的时候,发现时间就会非常紧张,测试code如下:
for(;;)
{
Pin_1_DR = Pin_1_DR|0x00000001;
Pin_1_DR = Pin_1_DR&0xfffffff0;
CY_NOP;
CY_NOP;
CY_NOP;
CY_NOP;
CY_NOP;
CY_NOP;
CY_NOP;
CY_NOP;
CY_NOP;
CY_NOP;
}
先至高,然后置低的时间我通过逻辑分析仪测试在380ns左右,
这个时间能否进一步缩短呢?
Best Regards
Simon
Simon,
按照我的理解,不改变这个port其他IO的值的时候,CY8C4126AZI-S433,380ns已经是最快的时间了,没有方式可以缩小了。