查看: 1328|回复: 1

[原创] 【经验分享】k64的iic

[复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
19947
最后登录
2024-4-19
发表于 2019-12-16 10:40:39 | 显示全部楼层 |阅读模式
A1寄存器(地址寄存器):
  
Bit位
  
含义
注释
7-1
ADDRESS,地址
包含模块作为从期间寻址时使用的地址,该字段用于7位地址和10位地址中的低7位
0
reserved,0
F寄存器(频率分频寄存器):
  
Bit位
  
含义
注释
7-6
MULT,乘数因子
该因子和SCL分频器一起用于生成IIC波特率
5-0
ICR,时钟速率
IIC波特率=IIC 时钟速度/(MUL*SCL分频器)
  
SDA保持时间=IIC时钟周期*MUL*SDA保持值
  
SCL开始保持时间= IIC时钟周期*MUL*SCL开始保持值
  
SCL停止保持时间= IIC时钟周期*MUL*SCL停止保持值
C1寄存器(控制寄存器1):
  
Bit位
  
含义
注释
7
IICEN,iic使能
0:禁用,1使能
6
IICIE,iic中断使能
0:禁用,1使能
5
MST,主机选择模式
0:从机模式,1:主机模式
  
0->1,产生START信号
  
1->0,产生STOP信号
4
TX,发送模式选择
0, 接受模式
  
1, 发送模式
3
TXAK,发送应答使能
SCL保持低电平,直到TXAK被写入。
  
0:在随后接受字节(若FACK 清除)或当前接受字节发送应答(FACK被设置)信号
  
1:不发送
2
RSTA
写1来重复发出START前提
  
是主机
1
WVEN,唤醒使能
当从机地址匹配出现时,IIC模块可以从低功耗模式唤醒MCU
  
0, normal
  
1, 使能唤醒
0
DMA使能
0, 禁用
  
1, 使能
S寄存器(状态寄存器):
  
Bit位
  
含义
注释
7
TCF,传输完成标志,只读
传输完一个字节,TCF就被置位。通过在接收模式读取IIC数据寄存或者在发送模式写入IIC数据寄存器清除TCF
  
0, 正在传输
  
1, 传输完成
6
IAAS,扮演从机
0, 非从机
  
1, 从机
5
BUSY,总线忙,只读
0, 总线空闲
  
1, 总线忙碌
4
ARBL,仲裁丢失
0, 标准总线操作
  
1, 丢失仲裁
3
RAM,范围地址匹配
1、 任何非零召唤地址被接收,地址RA寄存器匹配
  
2、 地址在A1~RA范围之间
  
出现以上情况,该位被置1,C1【IICIE】必须被置1,为了这个位正常设置1
  
0, 非地址
  
1, 扮演从机
2
SRW,从机读写,只读
0, 从收主发
  
1, 从发主收
1
IICIF,IIC中断标志
当中断挂起,该位被设置。必须通过软件写1来清除
  
0, 无中断
  
1, 有中断
0
RXAK,接收应答
0, 应答信号被接收
  
1, 无应答信号被接收
D寄存器(数据寄存器):
  
Bit位
  
含义
注释
7-0
DATA数据
在主机发送模式,当数据写入寄存器,一次数据发送发起,最高有效位先发送。在主机接收模式,读取寄存器发起接收下一个字节数据
C2寄存器(控制寄存器2):
  
Bit位
  
含义
注释
7
GCAEN,通用召唤地址使能
0, 禁用
  
1, 使能
6
ADEXT,地址扩展
0,7位地址
  
1,10位地址
5
HDRS
0, 正常驱动mode
  
1, 高性能驱动
4
SBRC,从机波特率控制
0, 与主机模式一直
  
1, 从机波特率独立于主机模式
3
RMEN,范围地址匹配使能
0, 禁用
  
1, 使能
2-0
AD[10-8]从机地址
用于扩展到10位地址,只有ADEXT位置1才有用
FLT寄存器(可编程输入滤波寄存器):
  
Bit位
  
含义
注释
7
SHEN停止保持使能
0, 停止保持禁用
  
1, 使能
6
Iic总线停止检测标志
0, 无停止信号发生
  
1, 检测到停止信号
  
当硬件置1后,必须写1清除
5
SSIE,iic总线停止或开始中断使能
0, 禁用
  
1, 使能
4
STARTF,开始标志检测
0, 无开始信号发生
  
1, 检测到开始信号
  
当硬件置1后,必须写1清除
3-0
FLT,iic可编程滤波因子
0, 旁路
  
0x01-0x0F,滤波最多15个时钟周期宽度
RA寄存器(范围地址寄存器)
  
Bit位
  
含义
注释
7-1
RAD,从机范围地址
0
Reserved,0
SMB寄存器(SMBus控制和状态寄存器)
  
Bit位
  
含义
注释
7
FACK,快速ACK/NACK使能
0:ACK或NACK在接收字节后发送
  
1:TXAK写0,在接收到字节后产生ACK。写1在接收字节后发送NACK
6
ALERTEN,SMbus警报回应地址使能
0, SMBus警报响应匹配地址禁用
  
1, 使能
5
SIICAEN,发送IIC地址使能
使能或禁用SMBus设备默认地址
  
0, 禁用
  
1, 使能
4
TCKSEL,超市计数时钟选择
0, iic clock/64
  
1, iic clock
3
SLFT,SCL低电平超时FLAG
0, 无超时
  
1, 超时
2
SHTF1,SCL高电平超时FLAG
0, 没有SCL高电平且SDA高电平超时
  
1, 有超时
1
SHTF2,SCL高电平超时
0, 没有SCL高电平且SDA低电平超时
  
1, 有超时
0
SHTF2IE,SHTF2中断使能,使能SCL高电平且SDA低电平超时中断
0, 禁用
  
1, 使能
A2寄存器(地址寄存器):
  
Bit位
  
含义
注释
7-1
SMBus地址
0
Reserved,0
SLTH寄存器(SCL低电平超时寄存器高位)
  
Bit位
  
含义
注释
7-0
SSLT【15-8】
SLTH寄存器(SC低电平超时寄存器低位)
  
Bit位
  
含义
注释
7-0
SSLT【7-0】
编程逻辑
1、 宏定义Driver_I2C0为A
2、 通过A.Initialize()来初始化,内部参数是一个信号事件函数,自行定义
A. PowerControl,配置IIC接口电源
A. Control,配置总线速度
3、 写指令,A.MasterTransmit(设备地址,写的数据,数据大小,是否挂起中断)
等待完成信号,完成信号是之前通过信号事件函数来变化,写的数据可以是{地址,值}
也可以是{值,值,。。。}
4,读指令,首先发送指令A.MasterTransmit(),等待完成信号和应答信号,然后A.MasterReceive(设备地址,接收数据缓存,数据大小,是否挂起中断)
i2c来读取加速度寄存的三轴加速度值
3.png

应该注意的是,代码底层是将地址左移一位,再或上读写位的。
2.PNG
所以定义地址要小心,比如说at24c02.
1.PNG
高位固定是0xa,假设a2,a1,a0是0,那么读地址就是0xa1,写地址就是0xa0,那么定义地址时候不能定义为0xa0,因为地址会被底层左移,所以要定义为0x50

回复

使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2019-12-17 09:48:38 | 显示全部楼层
    现在嵌入式MCU的IIC接口真是五花八门。
    不过,还是LPC系列的MCU的IIC接口使用方便
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-20 18:03 , Processed in 0.117430 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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