2011-04-16 78 views
1

继续从我的另一个问题,Help optimising this C (AVR) code? :),我只是意识到,我不知道如何在我的C程序中实现一个ISR程序集的机制。我使用Google搜索,但没有发现任何有用的东西。基本上我想在我的C项目中设置其他所有项(包括寄存器来触发中断),但是我希望中断执行一些我编写的汇编代码。如何在C程序(AVR)中编写程序集ISR?

如果有帮助,我在Windows上使用AVR studio 6。我被告知我需要使用.s文件,但除此之外,我不确定要做什么。基本结构只是以下几点?

#include <avr\io.h> 
TIMER1_COMPA_vect: 
    ; assembly instructions here 

如果我要当TIMER1_COMPA_vect中断发射装配运行(这是在C ISR的名称)。或者我完全偏离轨道?什么是我需要做的基本模板?或者如果这是一个愚蠢的问题,有没有一个链接,我可以找到更多的信息?

+0

的PDF副本出于某种原因,我似乎不能回答我的问题,但我想我找到了我后:HTTP ://www.nongnu.org/avr-libc/user-manual/group__asmdemo.html – Sam 2011-04-16 01:54:32

回答

1

汇编语言艺术(Randall Hyde)有两章关于ISR(17和18,特别是18.5和18.6节可能对你有所帮助)。不久:

  1. 转到IVT(中断向量表),并与你的ISR段修改和偏移,保存旧值
  2. 你应该做一个TSR(终止并驻留)程序,让您的ISR保持驻留到内存中,即使用户关闭窗口
  3. 记得拨打旧ISR你与工作完成后,(这就是所谓的中断链接)
  4. 您的ISR应该重入(因此,如果当ISR仍在运行时,中断再次被触发,pc不会发生爆炸;))

顺便说一句,你可以获取伟大here