查看: 3138|回复: 8

[已解决] KL02Z IIC求助(已解决)

[复制链接]
  • TA的每日心情
    开心
    2017-4-27 08:44
  • 签到天数: 64 天

    连续签到: 1 天

    [LV.6]常住居民II

    26

    主题

    577

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1703
    最后登录
    1970-1-1
    发表于 2014-6-25 13:37:26 | 显示全部楼层 |阅读模式
      KL02Z的mcu 使用2路IIC,IIC0配置成master与Sensor通信,IIC1配置成slave与其他外围芯片通信。
    其中IIC0工作正常,但是IIC1无法通信。量波形时发现,外围设备给mcu发送完地址之后,没有收到ACK。。。
    请问,IIC0和IIC1能同时工作吗?还是IIC0运行的时候,IIC1不能运行?
    下面是IIC1的初始化及中断函数
     
    void IIC_Slave_Init( void )
    {
        SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK; // enable PORTA clock
        PORTA_PCR8 = PORT_PCR_MUX(2);
        PORTA_PCR9 = PORT_PCR_MUX(2);
     
        SIM_SCGC4 |= SIM_SCGC4_I2C1_MASK;  // enable IIC1 clock
        enable_irq(INT_I2C1 - 16);
        I2C1_A1 = IIC_SLAVE_ADDRESS;
        I2C1_C1 = I2C_C1_WUEN_MASK | I2C_C1_IICIE_MASK | I2C_C1_IICEN_MASK;
    }
     
    void IIC_Irq( void )
    {
        if( I2C1_S & I2C_S_IICIF_MASK )
        {
            I2C1_S |= I2C_S_IICIF_MASK;
            if( I2C1_S & I2C_S_ARBL_MASK )
            {
                I2C1_S |= I2C_S_ARBL_MASK;
                if( !(I2C1_S & I2C_S_IAAS_MASK) )
                {
                    // IIAAS is 0
                    return;
                }
            }
            if( I2C1_S & I2C_S_IAAS_MASK )
            {
                I2C1_C1 &= ~I2C_C1_TXAK_MASK;
     
                if( I2C1_S & I2C_S_SRW_MASK )
                {
                    // slave send data
                    I2C1_C1 |= I2C_C1_TX_MASK;
                    g_ucIIC_Tx_Count = 0;
                    I2C1_D = g_ucIIC_Tx_Data[g_ucIIC_Tx_Count];
                    g_ucIIC_Tx_Count++;
                }
                else
                {
                    I2C1_C1 &= ~I2C_C1_TX_MASK;
                    Dummy = I2C1_D;
                    m_ucExpectCmd = 1;
                    g_ucIIC_Rx_Count = 0;
                }
            }
            else
            {
                if( I2C1_S & I2C_S_SRW_MASK )
                {
                    // if require ACK from master
                    if( I2C1_S & I2C_S_RXAK_MASK )
                    {
                        // no receive the ACK
                        I2C1_C1 &= ~I2C_C1_TX_MASK;
                        Dummy = I2C1_D;
                        // switch to RX
                    }
                    else
                    {
                        I2C1_D = g_ucIIC_Tx_Data[g_ucIIC_Tx_Count];
                        g_ucIIC_Tx_Count++;
                    }
                }
                else
                {
                    m_ucRecData = I2C1_D;
                    if ( m_ucExpectCmd == 1)
                    {// Slave Receive (Command decode)
                        DecodeCommand(m_ucRecData);
                        m_ucExpectCmd = 0;
                    }
                    else
                    {// Slave Receive
                        g_ucIIC_Rx_Data[g_ucIIC_Rx_Count] = m_ucRecData;
                        g_ucIIC_Rx_Count++;
                        if (g_ucIIC_Rx_Count == g_ucIIC_Count_to_Rx)
                        {
                            DecodeData();
                        }
                    }//endif  ( m_ucExpectCmd == 1)        
                }//endif ( I2C0_S & I2C_S_SRW_MASK )
            }
        }
    }
      iic.jpg
     
    原来是RESET_b管脚拉低,导致不停进入NMI中断,优先级比iic中断高,导致进入不了iic中断
    我知道答案 目前已有7人回答
    iic.jpg
    回复

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2014-6-25 13:45:57 | 显示全部楼层

    RE:KL02Z IIC求助

    I2C0和I2C2模块是可以同时工作的,你说没有收到ACK信号,那是接收失败吗?
    能否也贴出你的测试波形。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-4-27 08:44
  • 签到天数: 64 天

    连续签到: 1 天

    [LV.6]常住居民II

    26

    主题

    577

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1703
    最后登录
    1970-1-1
     楼主| 发表于 2014-6-25 14:23:47 | 显示全部楼层

    RE:KL02Z IIC求助

    额,示波器不在了,波形也没了。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-4-27 08:44
  • 签到天数: 64 天

    连续签到: 1 天

    [LV.6]常住居民II

    26

    主题

    577

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1703
    最后登录
    1970-1-1
     楼主| 发表于 2014-6-25 19:29:39 | 显示全部楼层

    RE:KL02Z IIC求助

    请问,如果mcu slvae的地址设置为I2C1_A1 = IIC_SLAVE_ADDRESS;,其中IIC_SLAVE_ADDRESS定义为0xB0,那么我外围设备想和此slave通信,发送的地址要的设成多少?也是0xB0吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2014-6-26 15:00:11 | 显示全部楼层

    RE:KL02Z IIC求助

    如果你设置的是0XB0,那么通信的地址就是0XB0的前7位,然后你读写的时候要在第8位加上你的读写位。
    楼主如果还不行,还是争取把示波器的波形放出来给我哦。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-4-27 08:44
  • 签到天数: 64 天

    连续签到: 1 天

    [LV.6]常住居民II

    26

    主题

    577

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1703
    最后登录
    1970-1-1
     楼主| 发表于 2014-6-26 15:23:52 | 显示全部楼层

    回复:KL02Z IIC求助

    波形已经贴上来了。帮忙看下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    147

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    343
    最后登录
    1970-1-1
    发表于 2014-6-26 16:53:41 | 显示全部楼层

    RE:KL02Z IIC求助

    看着是没有响应呢,那楼主你有没有试过用芯片自己的两个I2C通信呢?
    I2C0主机,I2C1从机,自己和自己通信可以吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-4-27 08:44
  • 签到天数: 64 天

    连续签到: 1 天

    [LV.6]常住居民II

    26

    主题

    577

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1703
    最后登录
    1970-1-1
     楼主| 发表于 2014-6-26 17:50:59 | 显示全部楼层

    回复:KL02Z IIC求助

    I2Cx_C2寄存器中的bit[SBRC]改如何理解?
    Slave Baud Rate Control
    Enables independent slave mode baud rate at maximum frequency, which forces clock stretching on SCL
    in very fast I2C modes. To a slave, an example of a "very fast" mode is when the master transfers at 40
    kbit/s but the slave can capture the master's data at only 10 kbit/s.
    0 The slave baud rate follows the master baud rate and clock stretching may occur
    1 Slave baud rate is independent of the master baud rate
    主设备发送的速率是不是不能太快?Slave这边最快的速率只能是10 kbit/s?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    147

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    343
    最后登录
    1970-1-1
    发表于 2014-6-27 10:09:56 | 显示全部楼层

    RE:KL02Z IIC求助

    我认为这里只是举例,说明了从机速度是主机的1/4,但是的确感觉你的I2C时钟太快了。你的bus和system时钟是多少呢?在I2C章节最开始的地方看到:
    The inter-integrated circuit (I2C, I2C, or IIC) module provides a method of
    communication between a number of devices. The interface is designed to operate up to
    100 kbit/s with maximum bus loading and timing. The I2C device is capable of operating
    at higher baud rates, up to a maximum of clock/20, with reduced bus loading. The
    maximum communication length and the number of devices that can be connected are
    limited by a maximum bus capacitance of 400 pF.
    你通信频率降到小于100K看能通信吗?
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-20 08:05 , Processed in 0.105498 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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