完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
|
|
相关推荐
1个回答
|
|
|
日常工作中,遇到过如题的问题,当时不知道原因,今天在代码仿真的时候,无意中发现了如题的不良现象,如下是keil 仿真的GPIO模拟I2C的结果
void CH450_Write(unsigned short cmd) //I2C写CH450 两个字节命令 { CH450_I2c_Start(); /*I2C start函数调用*/ CH450_I2c_WrByte((unsigned char)(CH450_GET_KEY>>7)&CH450_I2C_MASK|CH450_I2C_ADDR1); /*南京沁恒推荐CH450代码,与规格书存在一层转换*/ CH450_I2c_WrByte(cmd); /*写命令字第八位字节命令*/ CH450_I2c_Stop(); /*I2C stop函数调用*/ } 放大以后波形(测量时间间隔为33.5us,在24M 晶振对应12个机器指令周期,1个机器指令周期0.5us的条件下,对应67个机器指令周期) 打开调试命令按钮,查看汇编代码: 循环前(0x0982到0x0984):3个指令周期; 循环体(0x0985到098B):有8个指令周期;循环次数是7次,循环一共有56个指令周期; 其他(0x098C~0x0993):有8个指令周期 T total=3+56+8=67个指令周期,因此从start信号结束到第一个I2C_CLK 拉高,理论时间为33.5us,数据刚好符合 【改善对策】 根据CH450的规格书,我们可以对问题的代码,在芯片规格书的要求下进行优化,第一个字节数据直接用规格数上的0x48,0x4F,0x64,0x66,0x68,0x6A,0x6C,0x6E 来直接定位,而不是用复杂的语句来表示。 【实际效果】 对比之前的33.5us的时间间隔,调整以后的时间间隔缩短到8us以内,改善效果明显。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
1599 浏览 0 评论
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
4738 浏览 0 评论
4229 浏览 9 评论
3822 浏览 16 评论
4398 浏览 1 评论
4209浏览 3评论
2379浏览 0评论
3393浏览 0评论
1158浏览 0评论
2843浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 18:39 , Processed in 0.620106 second(s), Total 74, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
9673