12
返回列表 发新帖
楼主: adarly

[求助] KL03Z IIC SLAVE 不通

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

    连续签到: 1 天

    [LV.6]常住居民II

    26

    主题

    577

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1703
    最后登录
    1970-1-1
     楼主| 发表于 2016-4-20 09:40:10 | 显示全部楼层
    void IIC_Slave_Init(void)
    {
        //SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;

    }
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.6]常住居民II

    26

    主题

    577

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1703
    最后登录
    1970-1-1
     楼主| 发表于 2016-4-20 10:16:33 | 显示全部楼层
    部分代码如下:
    IIC SLAVE 初始化:
    void IIC_Slave_Init(void)
    {
        //SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;    /*PORTA/B的时钟在别的地方有开启*/
        //PORTA_PCR8 = PORT_PCR_MUX(2);
        //PORTA_PCR9 = PORT_PCR_MUX(2);
        PORTB_PCR3 = PORT_PCR_MUX(2);
        PORTA_PCR4 = PORT_PCR_MUX(2);

        #ifdef MCU_CORE_KL03Z      /*这个宏定义了,会走这里*/
         SIM_SCGC4 |= SIM_SCGC4_I2C0_MASK;
         NVIC_EnableIRQ(I2C0_IRQn);
         I2C0_A1 = IIC_SLAVE_ADDRESS;
         I2C0_C1 = I2C_C1_WUEN_MASK | I2C_C1_IICIE_MASK | I2C_C1_IICEN_MASK;
         #else
         SIM_SCGC4 |= SIM_SCGC4_I2C1_MASK;
         enable_irq(INT_I2C1 - 16);
         set_irq_priority(INT_I2C1 - 16, 0);
         I2C1_A1 = IIC_SLAVE_ADDRESS;
         I2C1_C1 = I2C_C1_WUEN_MASK | I2C_C1_IICIE_MASK | I2C_C1_IICEN_MASK;
    }

    中断函数:
    void I2C0_IRQHandler(void)
    {
        if (I2C0_S & I2C_S_IICIF_MASK)
        {
            I2C0_S |= I2C_S_IICIF_MASK;
            if (I2C0_S & I2C_S_ARBL_MASK)
            {
                I2C0_S |= I2C_S_ARBL_MASK;
                if (!(I2C0_S & I2C_S_IAAS_MASK))
                {
                    return;
                }
            }
            if (I2C0_S & I2C_S_IAAS_MASK)
            {
                I2C0_C1 &= ~I2C_C1_TXAK_MASK;

                if (I2C0_S & I2C_S_SRW_MASK)
                {
                      I2C0_C1 |= I2C_C1_TX_MASK;
                      I2C0_D = g_uc_IIC_Tx_Data[g_ucIIC_Tx_Count];
                      g_ucIIC_Tx_Count++;
                }
                else
                {
                     I2C0_C1 &= ~I2C_C1_TX_MASK;
                     Dummy = I2C0_D;
                     m_ucExpectCmd = 1;
                     g_ucIIC_Rx_Count= 1;
                 }
             }
             else
             {
                   if (I2C0_S & I2C_S_SRW_MASK)
                   {
                        if (I2C0_S & I2C_S_RXAK_MASK)
                        {
                             I2C0_C1 &= ~I2C_S_TX_MASK;
                             Dummy = I2C0_D;
                         }
                         else
                         {
                              m_ucRecData = I2C0_D;
                              if (m_ucExpectCmd == 1)
                              {
                                   DecodeCommand(m_ucRecData);    /*解析命令*/
                                   m_ucExpectCmd  = 0;
                                   g_ucIIC_Tx_Count = 0;
                               }
                               else
                               {
                                    g_ucIIC_Rx_Data[g_ucIIC_Tx_Count] = m_ucRecData;  /*接收数据*/
                                    g_ucIIC_Tx_Count++;
                                    if (g_ucIIC_Tx_Count == g_ucIIC_Count_to_Rx)  /*数据接收满*/
                                   {
                                        DecodeData();  /*解析数据*/
                                    }

                                }
                          }
                    }
              }
        }
    }



    一个字一个字敲的真慢。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24874
    最后登录
    2025-7-18
    发表于 2016-4-20 11:05:48 | 显示全部楼层
    本帖最后由 小恩GG 于 2016-4-20 11:08 编辑
    adarly 发表于 2016-4-20 10:16
    部分代码如下:
    IIC SLAVE 初始化:
    void IIC_Slave_Init(void)

    PORTB_PCR3 = PORT_PCR_MUX(2);
         PORTA_PCR4 = PORT_PCR_MUX(2);

    ?
    不是说是PTB3,PTB4的吗?应该是这个:
    PORTB_PCR3 = PORT_PCR_MUX(2);
    PORTB_PCR4 = PORT_PCR_MUX(2);
    口初始化错了。
    你硬件到底接的是哪两个引脚呢?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24874
    最后登录
    2025-7-18
    发表于 2016-4-20 11:08:39 | 显示全部楼层
    初始化中,#endif没有加。
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.6]常住居民II

    26

    主题

    577

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1703
    最后登录
    1970-1-1
     楼主| 发表于 2016-4-20 17:39:43 | 显示全部楼层
    小恩GG 发表于 2016-4-20 11:08
    初始化中,#endif没有加。

    上面是手敲的,是PORTB_PCR4 = PORT_PCR_MUX(2);
    也有#endif
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24874
    最后登录
    2025-7-18
    发表于 2016-4-21 10:41:45 | 显示全部楼层
    adarly 发表于 2016-4-20 17:39
    上面是手敲的,是PORTB_PCR4 = PORT_PCR_MUX(2);
    也有#endif

    好的,我这边有空调试下,等我调试好后,我会给你回复,所以还请耐心等待下,谢谢!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-12-23 09:57
  • 签到天数: 1587 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    5

    主题

    3048

    帖子

    23

    金牌会员

    Rank: 6Rank: 6

    积分
    8416
    最后登录
    2025-4-23
    发表于 2016-4-26 13:20:30 | 显示全部楼层
    验证过例程,可以工作的,请检查硬件和软件代码。
    可以单板不带I2C外设运行一下,用示波器看看波形是否正常。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24874
    最后登录
    2025-7-18
    发表于 2016-4-29 17:08:49 | 显示全部楼层
    楼主你好!
    不好意思,回复迟了。
    我刚测试了下,在FRDM-KL03板子上测试PTB3,PTB4作为I2C slave,是完全可以通信的。
    你可以参考下我们官方的例程KSDK1.3.0的代码。
    http://www.nxp.com/products/soft ... ?tid=redKINETIS_SDK
    安装KSDK1.3.0之后,可以在下面路径找到对应的I2C主机从机代码:
    C:\Freescale\KSDK_1.3.0\examples\frdmkl03z\driver_examples\i2c\i2c_blocking
    工程默认的就是PTB3,PTB4
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-20 04:35 , Processed in 0.095728 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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