
RT1052的LPI2C配置
发布日期:2021-05-07 22:29:21
浏览次数:30
分类:精选文章
本文共 4194 字,大约阅读时间需要 13 分钟。
开发平台
- Board:野火RT1052-MINI
- IDE:Keil 5.28
再来说说I2C
I2C是由 Phiilps提出的,目前被广泛应用在系统内多个IC间的通讯。I2C是一个能够支持多个设备的总线,包含一条双向串行数据线SDA,一条串行时钟线SCL。每个连接到总线的设备都有一个独立的地址,主机可以通过该地址来访问不同设备。主机通过SDA线发送设备地址(SLAVE_ADDRESS)查找从机,SLAVE_ADDRESS可以是7位或10位,紧跟着SLAVE_ADDRESS的一个数据位用来表示数据传输方向,即第8位或11位。为0时表示写数据,为1时表示读数据。
相关时序:
什么是LPI2C
em…LPI2C是啥呢?I2C倒是经常听经常用,那LPI2C又是什么鬼?翻译一下就是LPI2C(Low Power I2C),直译就是低功耗I2C。所以,其实它是能兼容标准I2C协议的。RT1052 的 I2C 外设可用作通讯的主机及从机,支持标准模式 100Kbit/s、快速模式
400Kbit/s、高速模式 3.4Mbit/s 以及超高速模式 5Mbit/s 的传输速率,支持 7 位、10 位设备地址,支持 DMA 数据传输,并具有数据校验功能。LPI2C的初始化代码
void I2C_Init(void){ lpi2c_master_config_t masterConfig; /* * @时钟配置 * LPI2C1的时钟来源于,选择0:来自PLL3,选择1:来自osc_clk * 由于这里选择0---来自PLL3(480MHz),所以分频系数选择5,即(6-1) */ CLOCK_SetMux(kCLOCK_Lpi2cMux, 0); CLOCK_SetDiv(kCLOCK_Lpi2cDiv,(6-1)); /* IO复用配置 */ IOMUXC_SetPinMux(I2C_SCL_MUX,1U); IOMUXC_SetPinMux(I2C_SDA_MUX,1U); /* IO PAD配置 */ IOMUXC_SetPinConfig(I2C_SCL_MUX,I2C_PAD_CONFIG_DATA); IOMUXC_SetPinConfig(I2C_SDA_MUX,I2C_PAD_CONFIG_DATA); /* 获取默认配置 */ LPI2C_MasterGetDefaultConfig(&masterConfig); /* 配置LPI2C速度400k */ masterConfig.baudRate_Hz = 400000; LPI2C_MasterInit(I2Cx, &masterConfig, I2C_CLOCK);}
I2C通讯接口
bool I2C_WriteByte(uint8_t SalveAddr,uint8_t RegAddr,uint8_t *DateByte){ lpi2c_master_transfer_t transfer; status_t err_flag; /* * @data :要发送的数据 * @datasize :发送的数据个数 * @direction :读写模式选择 * @flags :传输失败的标志位 * @slaveAaddress:从机地址 * @subaddress :寄存器/内存地址 * @subaddressSize:地址寄存器大小 */ transfer.data = DateByte; transfer.dataSize = 1; transfer.direction = kLPI2C_Write; transfer.flags = kLPI2C_TransferDefaultFlag; transfer.slaveAddress =(SalveAddr>>1); transfer.subaddress = RegAddr; transfer.subaddressSize = 0x01; err_flag = LPI2C_MasterTransferBlocking(LPI2C1,&transfer); if(err_flag != kStatus_Success) return false; return true;}
bool I2C_ReadByte(uint8_t SalveAddr,uint8_t RegAddr,uint8_t *DateByte){ lpi2c_master_transfer_t transfer; status_t err_flag; /* * @data :发送、接受的数据 * @datasize :发送的数据个数 * @direction :读写模式选择 * @flags :传输失败的标志位 * @slaveAaddress:从机地址 * @subaddress :寄存器/内存地址 * @subaddressSize:地址寄存器大小 */ transfer.data = DateByte; transfer.dataSize = 1; transfer.direction = kLPI2C_Read; transfer.flags = kLPI2C_TransferDefaultFlag; transfer.slaveAddress =(SalveAddr>>1); transfer.subaddress = RegAddr; transfer.subaddressSize = 0x01; err_flag = LPI2C_MasterTransferBlocking(LPI2C1,&transfer); if(err_flag != kStatus_Success) return false; return true;}
bool I2C_WriteBuffer(uint8_t SalveAddr,uint8_t RegAddr,uint8_t *DateByte,uint32_t DataNum){ lpi2c_master_transfer_t transfer; status_t err_flag; /* * @data :要发送的数据 * @datasize :发送的数据个数 * @direction :读写模式选择 * @flags :传输失败的标志位 * @slaveAaddress:从机地址 * @subaddress :寄存器/内存地址 * @subaddressSize:地址寄存器大小 */ transfer.data = DateByte; transfer.dataSize = DataNum; transfer.direction = kLPI2C_Write; transfer.flags = kLPI2C_TransferDefaultFlag; transfer.slaveAddress =(SalveAddr>>1); transfer.subaddress = RegAddr; transfer.subaddressSize = 0x01; err_flag = LPI2C_MasterTransferBlocking(LPI2C1,&transfer); if(err_flag != kStatus_Success) return false; return true;}
bool I2C_ReadBuffer(uint8_t SalveAddr,uint8_t RegAddr,uint8_t *DateByte,uint32_t DataNum){ lpi2c_master_transfer_t transfer; status_t err_flag; /* * @data :发送、接受的数据 * @datasize :发送的数据个数 * @direction :读写模式选择 * @flags :传输失败的标志位 * @slaveAaddress:从机地址 * @subaddress :寄存器/内存地址 * @subaddressSize:地址寄存器大小 */ transfer.data = DateByte; transfer.dataSize = DataNum; transfer.direction = kLPI2C_Read; transfer.flags = kLPI2C_TransferDefaultFlag; transfer.slaveAddress =(SalveAddr>>1); transfer.subaddress = RegAddr; transfer.subaddressSize = 0x01; err_flag = LPI2C_MasterTransferBlocking(LPI2C1,&transfer); if(err_flag != kStatus_Success) return false; return true;}
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月01日 21时07分42秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
SNMP介绍及使用,超有用,建议收藏!
2021-05-09
HDU5589:Tree(莫队+01字典树)
2021-05-09
不停机替换线上代码? 你没听错,Arthas它能做到
2021-05-09
Python开发之序列化与反序列化:pickle、json模块使用详解
2021-05-09
采坑 - 字符串的 "" 与 pd.isnull()
2021-05-09
无序列表 - 链表
2021-05-09
Matplotlib绘制漫威英雄战力图,带你飞起来!
2021-05-09
机器学习是什么
2021-05-09
《小王子》里一些后知后觉的道理
2021-05-09
《你当像鸟飞往你的山》总结
2021-05-09
《我是猫》总结
2021-05-09
《抗糖化书》总结
2021-05-09
apache虚拟主机配置
2021-05-09
PHP官方网站及PHP手册
2021-05-09
mcrypt加密以及解密过程
2021-05-09
go等待N个线程完成操作总结
2021-05-09
ReactJs入门教程-精华版
2021-05-09
Python 之网络式编程
2021-05-09
MySql5.5安装步骤及MySql_Front视图配置
2021-05-09