查看: 7025|回复: 20

[求助] FRDM-KL05Z I2C IO 如何设定与使用

[复制链接]

该用户从未签到

6

主题

55

帖子

0

中级会员

Rank: 3Rank: 3

积分
319
最后登录
1970-1-1
发表于 2014-11-19 14:24:39 | 显示全部楼层 |阅读模式
FRDM-KL05Z I/O PTB3,PTB4 (I2C) 该如何使用?

目的想要透过PTB3,PTB4传输给外部资料,或接收外部资料,但是不知如何开启与下指令
官方提供的例程似乎只有读取加速计的,没有i2c io的应用。
我知道答案 目前已有20人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2014-11-19 14:37:36 | 显示全部楼层
    楼主的意思是自己模拟I2C总线,和其他的器件通信吗?还是用做普通的IO口?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    124

    主题

    3600

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5781
    最后登录
    1970-1-1
    发表于 2014-11-19 14:39:18 | 显示全部楼层
    你好,楼主!
    I2C操作外围Slave device,最重要还是按照Slave device的I2C协议进行读,写操作,而例程其实已经已经给出基本的发送,介绍字节的函数,你可以根据这些函数,然后遵照Slave device的I2C协议对其进行操作啊。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6

    主题

    55

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    319
    最后登录
    1970-1-1
     楼主| 发表于 2014-11-19 14:41:51 | 显示全部楼层
    安 发表于 2014-11-19 14:37
    楼主的意思是自己模拟I2C总线,和其他的器件通信吗?还是用做普通的IO口?

    安~你好,
    我的意思是MCU处理完数据透过板上两旁的IO(PTB3,PTB4 IIC)传输资料给另外一块板子的IIC接收

    不晓得这样回答是否你想得到的答案。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6

    主题

    55

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    319
    最后登录
    1970-1-1
     楼主| 发表于 2014-11-19 14:47:12 | 显示全部楼层
    FSL_TICS_ZP 发表于 2014-11-19 14:39
    你好,楼主!
    I2C操作外围Slave device,最重要还是按照Slave device的I2C协议进行读,写操作,而例程其实 ...

    是的,但是我对这部分不太熟悉,不知道如何针对那两脚位进行设定
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2014-11-19 15:04:29 | 显示全部楼层
    另外一个是MCU还是其他的I2C器件?确认双方主从模式.
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    124

    主题

    3600

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5781
    最后登录
    1970-1-1
    发表于 2014-11-19 15:06:00 | 显示全部楼层
    Nella 发表于 2014-11-19 14:47
    是的,但是我对这部分不太熟悉,不知道如何针对那两脚位进行设定

    你好,
    你的意思是如何配置PTB3、PTB4为I2C0_SCL和I2C0_SDA吗?
    如果是,建议可以浏览一下KL05的第11章节,里面有介绍如何配置pin的复用功能。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6

    主题

    55

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    319
    最后登录
    1970-1-1
     楼主| 发表于 2014-11-19 15:22:12 | 显示全部楼层
    FSL_TICS_ZP 发表于 2014-11-19 15:06
    你好,
    你的意思是如何配置PTB3、PTB4为I2C0_SCL和I2C0_SDA吗?
    如果是,建议可以浏览一下KL05的第11章节 ...

    void i2c_set_tx_mode(I2C_MemMapPtr p)
    {
        p->C1 |= I2C_C1_TX_MASK;

    }
    void i2c_set_rx_mode(I2C_MemMapPtr p)
    {
        p->C1 &= ~I2C_C1_TX_MASK;
    }

    void i2c_set_slave_mode(I2C_MemMapPtr p)
    {
        p->C1  &= ~I2C_C1_MST_MASK;
    }
    void i2c_set_master_mode(I2C_MemMapPtr p)
    {
        p->C1  |=  I2C_C1_MST_MASK;
    }

    // i2c general

    void i2c_give_nack(I2C_MemMapPtr p)
    {
        p->C1 |= I2C_C1_TXAK_MASK;
    }
    void i2c_give_ack(I2C_MemMapPtr p)
    {
        p->C1 &= ~I2C_C1_TXAK_MASK;
    }
    void i2c_repeated_start(I2C_MemMapPtr p)
    {
        p->C1     |= 0x04;
    }
    void i2c_write_byte(I2C_MemMapPtr p, uint8 data)
    {
        p->D = data;
    }
    uint8 i2c_read_byte(I2C_MemMapPtr p)
    {
        return p->D;
    }
    void i2c_start(I2C_MemMapPtr p)
    {
        i2c_set_master_mode(p);
        i2c_set_tx_mode(p);
    }
    void i2c_stop(I2C_MemMapPtr p)
    {
        i2c_set_slave_mode(p);
        i2c_set_rx_mode(p);
    }
    void i2c_wait(I2C_MemMapPtr p)
    {
        // wait flag
        while((p->S & I2C_S_IICIF_MASK)==0)
            ;
        // clear flag
        p->S |= I2C_S_IICIF_MASK;
    }
    uint16 i2c_get_ack(I2C_MemMapPtr p)
    {
        if((p->S & I2C_S_RXAK_MASK) == 0)
            return TRUE;
        else
            return FALSE;
    }

    // -------------------------------------------------
    void hal_i2c_init(I2C_MemMapPtr p)
    {
       // SIM_SCGC4 |= SIM_SCGC4_I2C1_MASK;

       SIM_SCGC4 |= SIM_SCGC4_I2C0_MASK;
       
          // configure GPIO for I2C function
        PORTB_PCR3 = PORT_PCR_MUX(2);
        PORTB_PCR4 = PORT_PCR_MUX(2);


       
        p->F  = 0x14; // baudrate
        p->C1 = 0x80; // enable IIC
    }

    void hal_i2c_deinit(I2C_MemMapPtr p)
    {
        p->C1 = 0x00;
       
        SIM_SCGC4 &= ~SIM_SCGC4_I2C0_MASK;
    }

    我后来有看到例程hal_i2c.c已将PTB3,PTB4定义好,但是(I2C_MemMapPtr P)应该如何下参数?

    如果我要写资料传出去是以下这架构吗
    void hal_dev_write_reg(I2C_MemMapPtr p, uint8 devaddr, uint8 addr, uint8 data)
    {  
        i2c_start(p);  
      
        i2c_write_byte(p, devaddr | I2C_WRITE);  
        i2c_wait(p);  
        i2c_get_ack(p);  
      
        i2c_write_byte(p, addr);  
        i2c_wait(p);  
        i2c_get_ack(p);  
      
        i2c_write_byte(p, data);  
        i2c_wait(p);
        i2c_get_ack(p);  
      
        i2c_stop(p);  
        pause();
    }  
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6

    主题

    55

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    319
    最后登录
    1970-1-1
     楼主| 发表于 2014-11-19 15:23:51 | 显示全部楼层
    安 发表于 2014-11-19 15:04
    另外一个是MCU还是其他的I2C器件?确认双方主从模式.

    另一个MCU,想透过IIC传输数据资料
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16

    主题

    705

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1745
    最后登录
    1970-1-1
    发表于 2014-11-19 15:25:02 | 显示全部楼层
    楼主估计是主从机I2C程序不会写,周立功有个KL25I2C主从机的代码,你可以去看看他的配置,KL25和KL05差不了多少:http://www.zlgmcu.com/download/downs.asp?ID=6067
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-20 16:55 , Processed in 0.106337 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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