搜索

[ARM入门] 请教一下这段代码

[复制链接]
135|4
 楼主 | 2020-5-21 17:20 | 显示全部楼层 |阅读模式

请教一下下面标红的这句代码是什么意思:

unsigned char I2C_Slv_Putch(unsigned char ch)
{
   while(((AD_I2C->SSPI & 0x02) == 0x02)==0);
                AD_I2C->SSPIC = 0x02;
                AD_I2C->SSPTX = ch;
   if((AD_I2C->SSPCON1 & 0x40) == 0x40)      //return last byte ack signal
                return 1;
   else
                return 0;
}

使用特权

评论回复
| 2020-5-21 21:46 | 显示全部楼层
判断AD_I2C->SSPI 的Bit 2是1还是0,是0就while循环

使用特权

评论回复
| 2020-5-22 09:51 | 显示全部楼层
while(((AD_I2C->SSPI & 0x02) == 0x02)==0);
直接看(AD_I2C->SSPI & 0x02) 这个就是取这个寄存器的0x02bit位
((AD_I2C->SSPI & 0x02) == 0x02)这里判断这个bit位是否为1
(((AD_I2C->SSPI & 0x02) == 0x02)==0)这里不为1就循环等待
综上,就是判断某个状态寄存器是否变成1了,不是就等状态寄存器变成1

使用特权

评论回复
 楼主 | 2020-5-25 09:59 | 显示全部楼层
wono01 发表于 2020-5-22 09:51
while(((AD_I2C->SSPI & 0x02) == 0x02)==0);
直接看(AD_I2C->SSPI & 0x02) 这个就是取这个寄存器的0x02bit ...

那写成 while(!(AD_I2C->SSPI & 0x02))不就行了吗,干嘛要做2次比较?

使用特权

评论回复
| 2020-5-25 10:10 | 显示全部楼层
本帖最后由 wono01 于 2020-5-25 10:12 编辑
luoengineer 发表于 2020-5-25 09:59
那写成 while(!(AD_I2C->SSPI & 0x02))不就行了吗,干嘛要做2次比较?

谁知道写代码当时咋想的,只不过上面==0更清晰可以看出目的。实际工程中代码以清晰为标准。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /5 下一条

在线客服 快速回复 返回顶部 返回列表