OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5250|回复: 12

无OS,多器件共用一个I2C,操作各器件定时器的中断优先级不同,如何利用互斥信号?

[复制链接]

48

主题

135

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2017-8-29
在线时间
89 小时
发表于 2020-10-28 11:20:18 | 显示全部楼层 |阅读模式
1金钱
如题,
器件I2C读、写操作是否一直等待互斥信号释放,才可以正常读、写?
无OS系统,可以利用while循环等待吗?

不自行,向各位大佬请教一下。谢谢!!!

最佳答案

查看完整内容[请看2#楼]

你都无OS了不用担心这些事情,处理时记得关中断,操作完成开中断
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4480
金钱
4480
注册时间
2013-4-22
在线时间
337 小时
发表于 2020-10-28 11:20:19 | 显示全部楼层
hu25886 发表于 2020-10-29 10:06
我想,如果I2C正在向器件1写1byte数据,刚写了4bit;此时优先级高的处理函数过来,使用该I2C向器件2写数 ...

你都无OS了不用担心这些事情,处理时记得关中断,操作完成开中断
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4480
金钱
4480
注册时间
2013-4-22
在线时间
337 小时
发表于 2020-10-28 13:15:40 | 显示全部楼层
IIC操作本身不需要
回复

使用道具 举报

48

主题

135

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2017-8-29
在线时间
89 小时
 楼主| 发表于 2020-10-29 10:06:38 | 显示全部楼层
三叶草 发表于 2020-10-28 13:15
IIC操作本身不需要

我想,如果I2C正在向器件1写1byte数据,刚写了4bit;此时优先级高的处理函数过来,使用该I2C向器件2写数据;待执行权又回到器件1时,它是能够记住自己已经发送了4bit,继续发送?还是重新开始发送起始位,然后发送数据直到结束?还是未知的(因为它的时序已经乱了)?
回复

使用道具 举报

9

主题

100

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2019-8-15
在线时间
425 小时
发表于 2020-10-29 10:41:43 | 显示全部楼层
你I2C是dma的吗?
回复

使用道具 举报

3

主题

808

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3888
金钱
3888
注册时间
2017-3-7
在线时间
1694 小时
发表于 2020-10-29 11:26:51 | 显示全部楼层
无操作怎么做到优先级任务的?
回复

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3348
金钱
3348
注册时间
2013-5-28
在线时间
468 小时
发表于 2020-10-29 13:38:18 | 显示全部楼层
你的考虑属于原子操作,这是硬件所不允许的,一个BYTE它得发完再发送下一个,所以写入前你要么先判断下是否发射空状态,要么保证高优先级处理数据时能吃掉一个BYTE的时钟
回复

使用道具 举报

15

主题

109

帖子

0

精华

高级会员

Rank: 4

积分
614
金钱
614
注册时间
2014-8-14
在线时间
184 小时
发表于 2020-10-29 14:06:07 | 显示全部楼层
完全不建议在中断里边去使用i2c总线读写数据。
在中断里置位标志位,在大循环去处理
回复

使用道具 举报

48

主题

135

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2017-8-29
在线时间
89 小时
 楼主| 发表于 2020-11-11 10:10:31 | 显示全部楼层
好的,谢谢各位。我会去验证一下。
回复

使用道具 举报

48

主题

135

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2017-8-29
在线时间
89 小时
 楼主| 发表于 2020-11-11 10:12:06 | 显示全部楼层
a5820736 发表于 2020-10-29 11:26
无操作怎么做到优先级任务的?

每个定时器中断当做一个任务,中断优先级不同。
回复

使用道具 举报

48

主题

135

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2017-8-29
在线时间
89 小时
 楼主| 发表于 2020-11-11 10:13:59 | 显示全部楼层
Cindre鞡 发表于 2020-10-29 14:06
完全不建议在中断里边去使用i2c总线读写数据。
在中断里置位标志位,在大循环去处理

之前设计的架构就是将各定时器中断作为一个任务。 后续会考虑您的建议
回复

使用道具 举报

48

主题

135

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2017-8-29
在线时间
89 小时
 楼主| 发表于 2020-11-11 10:14:54 | 显示全部楼层
聚东风 发表于 2020-10-29 13:38
你的考虑属于原子操作,这是硬件所不允许的,一个BYTE它得发完再发送下一个,所以写入前你要么先判断下是否发 ...

这个吃的还不是很透。不是很理解
回复

使用道具 举报

48

主题

135

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2017-8-29
在线时间
89 小时
 楼主| 发表于 2020-11-11 10:15:25 | 显示全部楼层

没走DMA
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 00:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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