Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
NXP 微控制器
【NXP-MCXA153】IIC驱动
发布于 2024-07-12 21:23:50 浏览:233
订阅该版
1、由于官方的源码没有添加I2C的驱动,所以由先要添加drv_i2c.c 其代码如下: ```c /* * Copyright (c) 2006-2024, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2023-04-06 YangXi The first version */ #include
#include "fsl_lpi2c.h" #include "fsl_lpi2c_edma.h" #include "fsl_edma.h" #ifdef RT_USING_I2C enum { #ifdef BSP_USING_I2C0 I2C0_INDEX, #endif #ifdef BSP_USING_I2C1 I2C1_INDEX, #endif #ifdef BSP_USING_I2C2 I2C2_INDEX, #endif }; #define i2c_dbg rt_kprintf struct lpc_i2c_bus { struct rt_i2c_bus_device parent; LPI2C_Type *I2C; clock_attach_id_t clock_attach_id; clock_div_name_t clock_div_name; clock_name_t clock_src; uint32_t baud; char *name; }; struct lpc_i2c_bus lpc_obj[] = { #ifdef BSP_USING_I2C0 { .I2C = LPI2C0, .baud = 100000U, .clock_attach_id = kFRO12M_to_LPI2C0, .clock_div_name = kCLOCK_DivLPI2C0, .clock_src = kCLOCK_Fro12M, .name = "i2c0", }, #endif #ifdef BSP_USING_I2C1 { .I2C = LPI2C1, .baud = 100000U, .clock_attach_id = kFRO12M_to_LPI2C0, .clock_div_name = kCLOCK_DivLPI2C0, .clock_src = kCLOCK_Fro12M, .name = "i2c1", }, #endif #ifdef BSP_USING_I2C2 { .I2C = LPI2C2, .baud = 100000U, .clock_attach_id = kFRO12M_to_FLEXCOMM2, .clock_div_name = kCLOCK_DivFlexcom2Clk, .clock_src = kCLOCK_Fro12M, .name = "i2c2", }, #endif }; static rt_ssize_t lpc_i2c_xfer(struct rt_i2c_bus_device *bus, struct rt_i2c_msg msgs[], rt_uint32_t num) { struct rt_i2c_msg *msg; lpi2c_master_transfer_t xfer = {0}; rt_uint32_t i; rt_ssize_t ret = 0; struct lpc_i2c_bus *lpc_i2c = (struct lpc_i2c_bus *)bus; for (i = 0; i < num; i++) { msg = &msgs[i]; if (msg->flags & RT_I2C_RD) { xfer.slaveAddress = msg->addr; xfer.direction = kLPI2C_Read; xfer.subaddress = 0; xfer.subaddressSize = 0; xfer.data = msg->buf; xfer.dataSize = msg->len; if(i != 0) xfer.flags = kLPI2C_TransferRepeatedStartFlag; else xfer.flags = kLPI2C_TransferDefaultFlag; if (LPI2C_MasterTransferBlocking(lpc_i2c->I2C, &xfer) != kStatus_Success) { i2c_dbg("i2c bus read failed!\n"); return i; } } else { xfer.slaveAddress = msg->addr; xfer.direction = kLPI2C_Write; xfer.subaddress = 0; xfer.subaddressSize = 0; xfer.data = msg->buf; xfer.dataSize = msg->len; if(i == 0) xfer.flags = kLPI2C_TransferNoStopFlag; else xfer.flags = kLPI2C_TransferDefaultFlag; if (LPI2C_MasterTransferBlocking(lpc_i2c->I2C, &xfer) != kStatus_Success) { i2c_dbg("i2c bus write failed!\n"); return i; } } } ret = i; return ret; } static const struct rt_i2c_bus_device_ops i2c_ops = { lpc_i2c_xfer, RT_NULL, RT_NULL }; int rt_hw_i2c_init(void) { int i; lpi2c_master_config_t masterConfig; for(i=0; i
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Lu_盼盼
这家伙很懒,什么也没写!
文章
35
回答
20
被采纳
0
关注TA
发私信
相关文章
1
试贴-消灭0主题
2
LPC M4的一些资料
3
LPC4088的临时分支
4
lpc1788 ad 不稳定
5
1788 LCD控制器缓冲区字节问题
6
一起来学习LPC4088吧
7
上传LPC4088的realtouch主工程
8
RealBoard 4088预定帖 [第一批板子不多,预定提前结束]
9
晒RealBoard LPC4088开箱照啦,速带小板凳前来围观
10
4088主程序需要的SD卡资源
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1518
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部