打印
[ARM入门]

请教一下这段代码

[复制链接]
597|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
luoengineer|  楼主 | 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;
}

使用特权

评论回复

相关帖子

沙发
ughbss| | 2020-5-21 21:46 | 只看该作者
判断AD_I2C->SSPI 的Bit 2是1还是0,是0就while循环

使用特权

评论回复
板凳
wono01| | 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

使用特权

评论回复
地板
luoengineer|  楼主 | 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次比较?

使用特权

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

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

80

帖子

1

粉丝