打印

中断与模拟总线的多任务处理

[复制链接]
3030|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lookf|  楼主 | 2011-8-17 23:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人的系统主控使用的是c8051f040单片机,程序中处理的任务主要有:1.通过串口与PC通信,中断方式;
2.模拟iic设备读写;
3.模拟io总线设备读写。
程序大部分时间主要是处理模拟io设备与串口通信部分,
其中串口通信有实时响应要求,模拟io总线设备读写的时序又不能受到中断的干扰,但这样的需求似乎是一对矛盾体。
本人在模拟io总线的时序的时间内将中断关闭,这样又造成了串口通信响应很慢,有时根本响应不了;如果不关闭中断,又会影响总线设备的正常工作。
搞了好久搞不定。。。
这个程序流程应该怎样规划才能解决这个问题呢?或者有其他办法?
望高手不吝赐教!感谢!

相关帖子

沙发
teddeng| | 2011-8-18 00:02 | 只看该作者
到了几个实时要求都很高的多任务应用时,在指定条件下就要具体问题具体分析了。实际应用场景,CPU速度,模拟I/O时序严格程度,模拟I/O能不能利用片上已有的硬件资源等等都要考虑,不是所有的要求靠技巧就能实现的,要不出那么多不同外设的单片机干嘛。你不把具体指标写出来,也就只能泛泛而谈了。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
草履虫 + 1 说的很好.
板凳
草履虫| | 2011-8-18 00:16 | 只看该作者
一看LS就是老鸟了.

使用特权

评论回复
地板
刘前辈| | 2011-8-18 09:13 | 只看该作者
很简单:串口中断如若9600 bps的话。一字节大概1ms。
那么你模拟一帧IIC如果小于2ms,关中断后再开,就不会丢失串口中断。否则你只好加快IIC或者减慢串口中断一帧时间。

还有,既然串口至少1ms一帧,IIC又是模拟的,那么只要在IIC时钟中间插入查询RI串口接收信号,存储SBUF就行了。几个us的事。

2者同步开始也是不错的方案。



、、

使用特权

评论回复
5
ayb_ice| | 2011-8-18 10:02 | 只看该作者
什么总线模拟不能受中断影响,除非1WIRE,SPI,IIC是没有影响的

使用特权

评论回复
6
刘前辈| | 2011-8-18 12:09 | 只看该作者
支持5楼。IIC因为时钟可以有任意误差,2个时钟之间电平可以拉长(其间可以发生中断),所以,无论标准或模拟IIC,都可以打开中断,无所谓的。

倒是人为关闭了中断,对实时ISR肯定会有影响了。


、、

使用特权

评论回复
7
airwill| | 2011-8-18 13:11 | 只看该作者
不支持楼上的说法, IIC 的时钟是允许误差, 但也不能随意中断. 如果中断一段时间, 会出现超时错误而导致传输失败.
针对这个具体问题, 本人觉得这有多个办法好解决. 上面(比如4楼)就说了不错的办法.
我先说一个. 就是尽可能把占长时间的任务拆开, 分成小段来进行.
比如: 模拟iic设备读写, 把整块数据的读写拆开, 变成单字节数据的传输. 传输完单字节后, 开中断.这时候允许串口中断做下处理. 然后完成中断再继续 模拟iic设备读写.
当然如果串口中断里有较耗时的任务, 可能导致模拟iic设备读写打断后出现错误, 那就尽可能精简中断服务. 比如串口中断, 只是更新一下数据缓冲(软件 FIFO). 数据和协议处理, 可以交给主循环来进行.

使用特权

评论回复
8
airwill| | 2011-8-18 13:15 | 只看该作者
另外还有一个办法.
介于 c8051f040 单片机较快的性能. 如果模拟 I2C 的频率不高的话. 由于 i2c 的模拟软件中消耗了很多的等待时间. 可以采用定时中断来进行 模拟 I2C 的电平变换处理. 也就把模拟 I2C 的等待时间拿出来执行其他的任务了.

使用特权

评论回复
9
hotpower| | 2011-8-18 13:17 | 只看该作者
i2c为何老是模拟呢???晕

使用特权

评论回复
10
lookf|  楼主 | 2011-8-18 23:00 | 只看该作者
感谢各位大哥建言,四楼和七楼的高手说得很对,看来小弟还是搞得不够细。。。
先试验试验看。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

13

帖子

0

粉丝