当前位置:首页 > 单片机 > 单片机
[导读]按IAR的规矩中断向量要加2,如PA口的中断向量为3,那么在IAR程序中应写成#pragma vector=0x05。而PD7和PD其他端口不一样,PD7后面拖了个小尾巴TLI,TLI拥有芯片最高级别中断,享有独立专用的中断向量号0,因此,按IA

按IAR的规矩中断向量要加2,如PA口的中断向量为3,那么在IAR程序中应写成#pragma vector=0x05。而PD7和PD其他端口不一样,PD7后面拖了个小尾巴TLI,TLI拥有芯片最高级别中断,享有独立专用的中断向量号0,因此,按IAR的规矩,向量号加2,程序改成#pragma vector=0x02,而不是PD口的其他中断号0x08.

另外在STM8L15X.H中 有以下宏定义 

#ifdef _IAR_
#define STRINGVECTOR(x) #x
#define VECTOR_ID(x) STRINGVECTOR( vector = (x) )
#define INTERRUPT_HANDLER( a, b )
_Pragma( VECTOR_ID( (b)+2 ) )
__interrupt void (a)( void )
#define INTERRUPT_HANDLER_TRAP(a)
_Pragma( VECTOR_ID( 1 ) )
__interrupt void (a) (void)
#endif

所以我们在IAR下编写程序时,无需再关心向量表,可以如同STVD下自动产生的中断函数一样去写

INTERRUPT_HANDLER(USART1_RX_TIM5_CC_IRQHandler, 28)

{

}

所以上官移植的stm8l的OS_CPU.A的文件中,TIMER4的中断接口为27,如下

//TIME4 interrupt25+2
//应该是_interrupt_xx作为汇编定义中断服务程序入口地址的关键字,对应连接到中断向量表中;这里的中断号xx是中断映射表的中断向量号+2
PUBLIC _interrupt_27
SECTION `.far_func.text`:CODE:NOROOT(0)
_interrupt_27:
SIM
BRES0x52E5, #0

INT_SAVE_REGS

SAVE_OLD_STK_PTR

CALLFOSIntEnter
CALLFOSTimeTick
CALLFOSIntExit

INT_RESTORE_REGS
END

在这个中断中,调用了OSTimeTick,实现任务的切换


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭