查看: 1769|回复: 2

[其他] IIC主机读从机数据

[复制链接]

该用户从未签到

5

主题

10

帖子

0

注册会员

Rank: 2

积分
83
最后登录
2016-11-28
发表于 2015-3-10 17:00:15 | 显示全部楼层 |阅读模式
从机IIC中断有两种触发方式,一种寻址从机成功后触发中断(IAAS=1)还有一种是数据发送完毕触发中断(TCF=1)。
if((I2C1_SR & I2C1_SR_IAAS_MASK)!= 0)//寻址从机
{
             Light_Change(Light_Run_PORT,6);//判断是否寻址成功
                  
                 if((I2C1_SR & I2C1_SR_SRW_MASK) == 0)//从机设置为接收方式
                 {
                      I2C1_CR1 &=~I2C1_CR1_TX_MASK;//接收模式
                 }
                else
                 {
                         I2C1_CR1 |=I2C1_CR1_TX_MASK;//发送方式
                 }
}

if((I2C1_CR1 & I2C1_SR_TCF_MASK) != 0)
          {
               
                  Light_Change(Light_Run_PORT,5);
                  
                  if((I2C1_CR1 & I2C1_CR1_TX_MASK)!=0)//判断是否为发送模式
                  {
                          i++;
                          if(i==1)
                          {
                                  I2C1_DATA=0x0024;//如果第一次进且是发送模式直接放数准备发送
                          }
                          else
                          {
                                  i=0;
                            I2C1_CR1 &=~I2C1_CR1_TX_MASK;//第二次直接改为接收模式
                          
                          }
                   }
                  else
                  {
                          k=I2C1_DATA;//接收模式读一下数
                  }

现在此程序就因为多了红色的那段代码,IAAS的那段if程序直接进不去,程序也只能执行一次,请问大神问题出在哪,(主机程序没问题)

我知道答案 目前已有2人回答
回复

使用道具 举报

该用户从未签到

5

主题

10

帖子

0

注册会员

Rank: 2

积分
83
最后登录
2016-11-28
 楼主| 发表于 2015-3-10 17:01:12 | 显示全部楼层
这是我修改过后的程序,能用 但是上面的问题还是想不通
I2C1_SR |=I2C1_SR_IICIF_MASK ;//清中断标志位
       
          Light_Change(Light_Run_PORT,4);
       
        //k=I2C1_DATA;
       
            if((I2C1_SR & I2C1_SR_IAAS_MASK)!= 0)//寻址从机
      {
             Light_Change(Light_Run_PORT,6);//判断是否寻址成功
                  
                 if((I2C1_SR & I2C1_SR_SRW_MASK) == 0)//从机设置为接收方式
                 {
                      I2C1_CR1 &=~I2C1_CR1_TX_MASK;//接收模式
                       k=I2C1_DATA;//为接收做准备
                 }
                 else
                 {
                         I2C1_CR1 |=I2C1_CR1_TX_MASK;//发送方式
                         I2C1_DATA=0x0024;
                 }
                 
      }
            else
            {
                    k=I2C1_DATA;
                    I2C1_CR1 &=~I2C1_CR1_TX_MASK;
            }
       
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

10

帖子

0

注册会员

Rank: 2

积分
83
最后登录
2016-11-28
 楼主| 发表于 2015-3-10 17:02:36 | 显示全部楼层
请各位大神解答一下!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-12 09:59 , Processed in 0.087095 second(s), 23 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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