查看: 3709|回复: 6

[求助] MAPS之KL46的I2C

[复制链接]

该用户从未签到

8

主题

38

帖子

0

中级会员

Rank: 3Rank: 3

积分
227
最后登录
1970-1-1
发表于 2015-3-3 22:59:20 | 显示全部楼层 |阅读模式
         今天搞到了KL46的硬件I2C,那先来普及一下I2C吧:
I2CInterIntegratedCircuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。I2C 总线支持任何IC 生产过程(CMOS、双极性)。通过串行数据(SDA)线和串行时钟SCL)线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址识别(无论是微控制器——MCULCD 驱动器、存储器或键盘接口),而且都可以作为一个发送器或接收器(由器件的功能决定)。LCD 驱动器只能作为接收器,而存储器则既可以接收又可以发送数据。除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机(见表1)。主机是初始化总线的数据传输并产生允许传输的时钟信号的器件。此时,任何被寻址的器件都被认为是从机。
这次我使用的是KL46的硬件I2C,与之相对应的还有软件I2C,硬件I2C效率高。比软件模拟出来的I2C好很多。
首先第一步,我要选定作为硬件I2C的管脚,我这里选择了I2C0模块的PTE24PTE25作为I2CSCLSDA,如下面数据手册的截图:
QQ截图20141218234229.png
初始化I2C引脚的代码如下:
void hal_i2c0_init(I2C_MemMapPtr p)   //Acelerometro
{
  
  SIM_SCGC4 |= SIM_SCGC4_I2C0_MASK;//打开I2C0的时钟
  SIM_SCGC5 |= SIM_SCGC5_PORTE_MASK;//打开PTE的时钟
  PORTE_PCR24 = PORT_PCR_MUX(5);//PTE24复用为SCL
  PORTE_PCR25 = PORT_PCR_MUX(5);//PTE25复用为SDA
  
  p->F  = 0x14; // baudrate
  p->C1 = 0x80; // enable IIC

}
打开时钟的这里我就不多说了。
管脚复用这里大家要注意一下。通过数据手册的管脚复用表,我们可以知道I2C的复用脚是ALT5模式,也就是把PORTx_PCRn中的8~10位配置成101(也就是MUXAlternative 5模式,例如把PTE24设为SCL的例子是: PORTE_PCR24 = PORT_PCR_MUX(5);,如下面的数据手册的图:
QQ截图20141218235051.png
PORTx_PCRn寄存器的MUX位;
QQ截图20141218235608.png
接下来就是,对MPU6050配置了;在配置中,需要I2C的协议通信。下面就有几个子函数了;
首先是I2C开始,源代码:
void i2c_start(I2C_MemMapPtr p)
{
    p->C1  |=  I2C_C1_MST_MASK;
    p->C1 |= I2C_C1_TX_MASK;
}

这里就是对I2Cx_C1寄存器的配置了,主要配置MSTTX这两位,MST是设置I2C是主模式还是从模式对这位写1就是主模式,写0就是从模式。TX是设置发送还是接受,对这位写1就是发送模式,写0就是接受模式。如参考手册的截图:
QQ截图20141219000516.png
QQ截图20141219000540.png
接下来就是写一个字节的函数了:
void i2c_write_byte(I2C_MemMapPtr p, uint8data)
{
   p->D = data;
}
读一个字节的函数
uint8 i2c_read_byte(I2C_MemMapPtr p)
{
   return p->D;
}
对这位写就是发送数据了,读就是接受数据了
停止函数
void i2c_stop(I2C_MemMapPtr p)
{
p->C1  &= ~I2C_C1_MST_MASK;
p->C1 &= ~I2C_C1_TX_MASK;
}
这个就是对I2Cx_C1MSTTX这两位写0
下面的几个函数我就不多说了,大家可以去看参考手册,E文也不是很难看懂。
下面测试图:
IMG_20141219_010411.jpg IMG_20141219_010428.jpg IMG_20141219_010444.jpg IMG_20141219_010457.jpg
IMG_20141219_010515.jpg
源代码:
I2C.zip (520.38 KB, 下载次数: 21)
IMG_20141219_010152.jpg
回复

使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13258
    最后登录
    2019-1-27
    发表于 2015-3-4 09:52:15 | 显示全部楼层
    一下子三篇 ~ 牛气了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    38

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    227
    最后登录
    1970-1-1
     楼主| 发表于 2015-3-4 11:06:31 | 显示全部楼层
    小七 发表于 2015-3-4 09:52
    一下子三篇 ~ 牛气了

    谢谢支持
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    8

    帖子

    0

    注册会员

    Rank: 2

    积分
    60
    最后登录
    2015-4-17
    发表于 2015-3-24 17:40:14 | 显示全部楼层
    3号都拿到板卡,折腾起来了呀 ,牛
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7

    主题

    107

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    444
    最后登录
    2019-3-7
    发表于 2015-4-25 08:22:04 | 显示全部楼层
    这貌似是MAPS四色板吧,楼主是拿到了一整套么,想知道那个接OLED的矩形板子是四色套中的吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    31

    主题

    253

    帖子

    20

    金牌会员

    Rank: 6Rank: 6

    积分
    1547
    最后登录
    2021-7-20
    发表于 2015-4-25 09:34:34 | 显示全部楼层
    楼主试过硬件IIC连续读写吗?之前我用KE02时没搞明白。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    38

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    227
    最后登录
    1970-1-1
     楼主| 发表于 2015-5-5 20:03:15 | 显示全部楼层
    laotui 发表于 2015-4-25 09:34
    楼主试过硬件IIC连续读写吗?之前我用KE02时没搞明白。

    有时间试试
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-9-2 09:06 , Processed in 0.101828 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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