Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
红岛
rt-thread
提交
ec539bc9
R
rt-thread
项目概览
红岛
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
ec539bc9
编写于
4月 11, 2022
作者:
Dozingfiretruck
提交者:
GitHub
4月 11, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix:修复i2c异常问题 (#5794)
* fix:修复i2c异常问题 * add:格式化代码格式
上级
35e266cb
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
23 addition
and
4 deletion
+23
-4
bsp/airm2m/air105/libraries/HAL_Driver/Src/core_i2c.c
bsp/airm2m/air105/libraries/HAL_Driver/Src/core_i2c.c
+21
-4
bsp/airm2m/air105/libraries/rt_drivers/drv_i2c.c
bsp/airm2m/air105/libraries/rt_drivers/drv_i2c.c
+2
-0
未找到文件。
bsp/airm2m/air105/libraries/HAL_Driver/Src/core_i2c.c
浏览文件 @
ec539bc9
...
...
@@ -20,7 +20,7 @@
*/
#include "user.h"
//#define IIC_DBG(X,Y...)
#define IIC_DBG DBG
enum
{
...
...
@@ -81,10 +81,18 @@ static int32_t prvI2C_DummyCB(void *pData, void *pParam)
static
void
I2C_IrqHandle
(
int32_t
IrqLine
,
void
*
pData
)
{
int32_t
result
=
ERROR_NONE
;
I2C_TypeDef
*
I2C
=
prvI2C
.
RegBase
;
uint32_t
Source
=
I2C
->
IC_TX_ABRT_SOURCE
;
uint32_t
State
=
I2C
->
IC_RAW_INTR_STAT
;
uint32_t
RegValue
=
I2C
->
IC_CLR_INTR
;
if
(
Source
&
0x0000ffff
)
{
result
=
-
ERROR_OPERATION_FAILED
;
goto
I2C_DONE
;
}
switch
(
prvI2C
.
State
)
{
case
I2C_STATE_WRITE_ADDRESS
:
...
...
@@ -144,20 +152,29 @@ static void I2C_IrqHandle(int32_t IrqLine, void *pData)
}
break
;
default:
// IIC_DBG("%x, %u", State, prvI2C.State);
break
;
}
return
;
I2C_DONE:
I2C
->
IC_INTR_MASK
=
0
;
prvI2C_Done
(
ERROR_NONE
);
prvI2C_Done
(
result
);
}
static
void
I2C_IrqHandleRegQueue
(
int32_t
IrqLine
,
void
*
pData
)
{
int32_t
result
=
ERROR_NONE
;
I2C_TypeDef
*
I2C
=
prvI2C
.
RegBase
;
uint32_t
Source
=
I2C
->
IC_TX_ABRT_SOURCE
;
uint32_t
State
=
I2C
->
IC_RAW_INTR_STAT
;
uint32_t
RegValue
=
I2C
->
IC_CLR_INTR
;
if
(
Source
&
0x0000ffff
)
{
result
=
-
ERROR_OPERATION_FAILED
;
goto
I2C_DONE
;
}
if
(
State
&
I2C_IT_TXE
)
{
if
(
prvI2C
.
DataBuf
.
Pos
>=
prvI2C
.
DataBuf
.
MaxLen
)
...
...
@@ -189,7 +206,7 @@ static void I2C_IrqHandleRegQueue(int32_t IrqLine, void *pData)
return
;
I2C_DONE:
I2C
->
IC_INTR_MASK
=
0
;
prvI2C_Done
(
ERROR_NONE
);
prvI2C_Done
(
result
);
}
void
I2C_GlobalInit
(
void
)
...
...
bsp/airm2m/air105/libraries/rt_drivers/drv_i2c.c
浏览文件 @
ec539bc9
...
...
@@ -112,6 +112,8 @@ int air105_hw_i2c_init(void)
prv_air105_i2c
.
ops
=
&
air105_i2c_ops
;
prv_air105_i2c
.
priv
=
0
;
I2C_MasterSetup
(
0
,
400000
);
GPIO_Iomux
(
GPIOE_06
,
2
);
GPIO_Iomux
(
GPIOE_07
,
2
);
#ifdef I2C_BUS_NAME
rt_i2c_bus_device_register
(
&
prv_air105_i2c
,
I2C_BUS_NAME
);
#else
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录