搜索
bottom↓
回复: 4

GD32模拟IIC使用宏与自定义函数操作IO口需要不同的延时?

[复制链接]

出0入0汤圆

发表于 2023-11-10 09:05:25 | 显示全部楼层 |阅读模式
如下
//使用宏控制
#define I2c_Set_SDA()  Port_WritePin(PB_11, STD_HIGH)

//使用自定义函数控制
void I2c_SetSDA()
{
        Port_WritePin(PB_11, STD_HIGH);
}
对于其他IO端口操作与上述无二
但是使用宏控制端口时,使用2us的延时可以正确的收到应答,正确的读取数据;
改用自定义函数时,使用2us的延时可以正确的收到应答,但是无法读取数据,将延时加长到3us时,就可以正确读取数据;
这是为什么??

出0入16汤圆

发表于 2023-11-10 09:19:10 | 显示全部楼层
驱动什么芯片 ,3.3V 的话, 一般的EEPROM普通I2C无法达到500Khz,按理说宏比函数快,但也可能函数编译器直接优化掉了

出0入0汤圆

 楼主| 发表于 2023-11-10 10:07:40 | 显示全部楼层
初音之恋 发表于 2023-11-10 09:19
驱动什么芯片 ,3.3V 的话, 一般的EEPROM普通I2C无法达到500Khz,按理说宏比函数快,但也可能函数编译器直 ...
(引用自2楼)

驱动的是时钟芯片INS5699S,手册描述最大频率为400khz,但是很多描述都说实际使用的频率可以更高,我的理解是使用宏可能因为执行效率高而需要更多的延时,但是尝试后却是截然相反的结果,或许确实与编译器优化有关

出0入16汤圆

发表于 2023-11-10 10:55:36 | 显示全部楼层
本帖最后由 初音之恋 于 2023-11-10 10:59 编辑
8u9527 发表于 2023-11-10 10:07
驱动的是时钟芯片INS5699S,手册描述最大频率为400khz,但是很多描述都说实际使用的频率可以更高,我的理 ...
(引用自3楼)


严格遵守数据手册并保持余量,设计得严谨,是高低电平都延时2us吗

出0入0汤圆

 楼主| 发表于 2023-11-10 11:12:06 | 显示全部楼层
初音之恋 发表于 2023-11-10 10:55
严格遵守数据手册并保持余量,设计得严谨,是高低电平都延时2us吗
(引用自4楼)

是的,高低电平都是延时2us,因为有实时系统,延时太长好像会导致任务超时异常终止,所以想要使用更低的延时才发现了这个奇怪的问题
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 23:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表