打印
[AVR单片机]

IAR中断写法:SIGNAL(),INTERRUPT()

[复制链接]
4352|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ATmega32L|  楼主 | 2008-4-2 09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#ifndef __IAR_SIGNAL_H__
#define __IAR_SIGNAL_H__

#include <intrinsics.h>

#define sei() __enable_interrupt()
#define cli() __disable_interrupt()

#define _PRAGMA_STR(A) _Pragma(#A)
#define PRAGMA_STR(A) _PRAGMA_STR(A)
#define __VECTOR__(A) vector=A

#define SIGNAL(A)
PRAGMA_STR(__VECTOR__(A))
__interrupt void SIGNAL##_##A(void)

#define INTERRUPT(A)
PRAGMA_STR(__VECTOR__(A))
__nested __interrupt void SIGNAL##_##A(void)


#define SIGNAL_NAKED(A)
PRAGMA_STR(__VECTOR__(A))
__raw __interrupt void SIGNAL##_##A(void)


#define INTERRUPT_NAKED(A)
PRAGMA_STR(__VECTOR__(A))
__raw __nested __interrupt void SIGNAL##_##A(void)

#define SIG_INTERRUPT0            INT0_vect
#define SIG_INTERRUPT1        INT1_vect    
#define SIG_OUTPUT_COMPARE2    TIMER2_COMP_vect    
#define SIG_OVERFLOW2            TIMER2_OVF_vect
#define SIG_INPUT_CAPTURE1    TIMER1_CAPT_vect     
#define SIG_OUTPUT_COMPARE1A    TIMER1_COMPA_vect        
#define SIG_OUTPUT_COMPARE1B    TIMER1_COMPB_vect
#define SIG_OVERFLOW1        TIMER1_OVF_vect            
#define SIG_OVERFLOW0        TIMER0_OVF_vect        
#define SIG_SPI            SPI_STC_vect
#define SIG_USART_RECV        USART_RXC_vect
#define SIG_UART_RECV        USART_RXC_vect
#define SIG_USART_DATA        USART_UDRE_vect
#define SIG_UART_DATA        USART_UDRE_vect
#define SIG_USART_TRANS        USART_TXC_vect
#define SIG_UART_TRANS        USART_TXC_vect
#define SIG_ADC            ADC_vect
#define SIG_EEPROM_READY    EE_RDY_vect    
#define SIG_COMPARATOR        ANA_COMP_vect        
#define SIG_2WIRE_SERIAL    TWI_vect
#define SIG_INTERRUPT2        INT2_vect
#define SIG_OUTPUT_COMPARE0    TIMER0_COMP_vect
#define SIG_SPM_READY        SPM_RDY_vect

#endif


相关帖子

沙发
ATmega32L|  楼主 | 2008-4-2 09:28 | 只看该作者

如定时器0溢出中断写法:

如定时器0溢出中断写法: 

SIGNAL(SIG_OVERFLOW0)   //定时器0溢出中断 



INTERRUPT(SIG_OVERFLOW0)  //定时器0溢出中断,快速开中断 



SIGNAL_NAKED(SIG_OVERFLOW0)   //定时器0溢出中断,裸中断,不进行断点现场保护 



INTERRUPT_NAKED(SIG_OVERFLOW0)   //定时器0溢出中断,裸中断,快速开中断且不进行断点现场保护 


使用特权

评论回复
板凳
qjy_dali| | 2008-4-4 17:25 | 只看该作者

IAR的没用过,怎么看着像GCC,呵呵

使用特权

评论回复
地板
hxh_8555| | 2008-4-9 08:39 | 只看该作者

iar

#pragma vector = TIMER0_OVF_vect
__interrupt void timer0_ovf_isr(void)
{
   //中断程序
}

使用特权

评论回复
5
Lxueqiang| | 2008-4-23 17:04 | 只看该作者

还是使用楼上的多些

hxh_8555 提到的!

使用特权

评论回复
6
ATmega32L|  楼主 | 2008-4-27 17:46 | 只看该作者

更喜欢用SIGNAL

#pragma vector = TIMER0_OVF_vect
__interrupt void timer0_ovf_isr(void)
{
   //中断程序
}

换成
SIGNAL(TIMER0_OVF_vect)
{
   //中断程序
}

使用特权

评论回复
7
hotpower| | 2008-5-2 22:03 | 只看该作者

晕~~~用着IAR想着GCC~~~而且用着M3也想着GCC~~~

使用特权

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

本版积分规则

144

主题

376

帖子

0

粉丝