BS_good200xy 发表于 2019-10-15 08:09:23

请教:M88 1MHz T0中断为何做不到13us的响应时间?

本帖最后由 BS_good200xy 于 2019-10-15 08:11 编辑

   用ATmega88PA做红外发射程序时,发现1MHz主频时,T0中断响应时间完全做不到13us,只能到50us左右,不知什么原因?
我的红外发射思路是: 让T0每13us发出一次中断,进而产生38Khz方波驱动IR LED. 并且对13us中断次数进行计数,用于对其它所需的脉冲宽度进行定时,最终产生正确的红外发射时序.
将M88主频提高到8MHz后,就OK了.但还是想用1MHz主频来工作,不知如何才能让T0中断在1MHz下实现13us响应时间?

sunnyqd 发表于 2019-10-15 08:16:20

只要葫芦不要葫芦叶是不对的

wye11083 发表于 2019-10-15 08:16:40

中断不可能做到那么快。你应该用汇编+nop

ilikemcu 发表于 2019-10-15 08:21:07

1M主频的13uS就是13个机器周期,虽然AVR是大部分指令支持单周期,但是区区13个时钟,要完成进站出站,还有中断跳转和返回,你还要做那么多操作,时间上CPU来不及处理是根本原因,你也说了提高到8M就可以了。

norman33 发表于 2019-10-15 08:22:40

1M主频要做到楼主得要求就算手工汇编优化也几乎不可能

BS_good200xy 发表于 2019-10-15 08:24:32

ilikemcu 发表于 2019-10-15 08:21
1M主频的13uS就是13个机器周期,虽然AVR是大部分指令支持单周期,但是区区13个时钟,要完成进站出站,还有 ...

多谢指教,看来我对avr中断响应过程还理解不够.

polarbear 发表于 2019-10-15 08:52:39

加个与门, 一路定时器产生38K的载波信号, 一路是调制信号,这个不是更靠谱么

xyq1943rr 发表于 2019-10-15 09:01:08

ETC 上下高速也要减速了,楼主难为人了哈哈。

BS_good200xy 发表于 2019-10-15 09:14:30

polarbear 发表于 2019-10-15 08:52
加个与门, 一路定时器产生38K的载波信号, 一路是调制信号,这个不是更靠谱么 ...

这个一定行.但为了硬件尽量简洁,功耗更低才想全部用单片机内部资源来完成.

polarbear 发表于 2019-10-15 09:55:26

BS_good200xy 发表于 2019-10-15 09:14
这个一定行.但为了硬件尽量简洁,功耗更低才想全部用单片机内部资源来完成. ...

外加与门调制的话这样做的话功耗更加低吧, 因为CPU 由定时器 硬件产生载波信号, 这样CPU的频率可以用更低因为不用占用CPU的资源去实现载波调制功能;

硬件与门电路其实也不复杂, 用2个三极管,一个NPN 控制GND,   一个PNP控制VCC, 实现载波与调制了;

tomzbj 发表于 2019-10-15 10:08:43

polarbear 发表于 2019-10-15 09:55
外加与门调制的话这样做的话功耗更加低吧, 因为CPU 由定时器 硬件产生载波信号, 这样CPU的频率可以用更 ...

加一个74LVC1G08呗,更简单了。

RAMILE 发表于 2019-10-15 10:19:34

本帖最后由 RAMILE 于 2019-10-15 10:20 编辑

这个NC设计,应该用两个定时器,一个生成载波,一个处理脉宽

BS_good200xy 发表于 2019-10-15 13:02:43

RAMILE 发表于 2019-10-15 10:19
这个NC设计,应该用两个定时器,一个生成载波,一个处理脉宽

我感觉我的设计思路都会有些怪癖,就是想把软硬件资源及功耗都省到极致

t3486784401 发表于 2019-10-15 20:27:02

中断响应时间,在 C 层面上大致受制于中断内的复杂程度:

1. 中断里有整数运算:需要使用寄存器,C进入中断前需要保存寄存器(进栈),会浪费一些时间;

2. 中断里有局部变量:一样需要进栈,会浪费时间;

3. 中断里有浮点运算:咋不上天...

你这个用定时中断的方法,基本上运行路径是确定的,建议改为查询 TOV 标志位的顺序 C 代码,放弃中断;
原因在于后者也是确切的执行路径,并且更加可控(不会后台入栈出栈寄存器)。

BS_good200xy 发表于 2019-10-16 19:01:26

t3486784401 发表于 2019-10-15 20:27
中断响应时间,在 C 层面上大致受制于中断内的复杂程度:

1. 中断里有整数运算:需要使用寄存器,C进入中 ...

非常感谢你的指教,授益非浅! 打算用两种方式来改一下程序,争取在AVR 1MHz主频下能正确发送红外时序,并且不另加硬件.
1.不用中断,只用顺序程序实现.
2.用汇编写中断,让主程序调用.

shiva_shiva 发表于 2019-10-16 19:16:25

polarbear 发表于 2019-10-15 08:52
加个与门, 一路定时器产生38K的载波信号, 一路是调制信号,这个不是更靠谱么 ...

这是正常思路。。。

Gorgon_Meducer 发表于 2019-10-16 19:27:31

全用CPU来做而不借助外设,功耗不一定更低。让外设来做事情,CPU能休眠就休眠(或者周期性休眠)才是低功耗的正道。
页: [1]
查看完整版本: 请教:M88 1MHz T0中断为何做不到13us的响应时间?