请问IAR STM8的中断程序怎么搞?最好能提供个范本,谢谢!
#pragma vector=TIM4_OVR_UIF_vector
__interrupt void TIM4_UPD_OVF_IRQHandler(void)
{
………………
}
#ifndef __IAR_INTERRUPT_H__
#define __IAR_INTERRUPT_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 ISR##_##A(void)
#define INTERRUPT(A)\
PRAGMA_STR(__VECTOR__(A))\
__nested __interrupt void ISR##_##A(void)
#define ISR(A)\
PRAGMA_STR(__VECTOR__(A))\
__interrupt void ISR##_##A(void)
#define ISR_ATTR_NAKED(A)\
PRAGMA_STR(__VECTOR__(A))\
__raw __interrupt void ISR##_##A(void)
#define ISR_ATTR_CRITICAL(A)\
PRAGMA_STR(__VECTOR__(A))\
__monitor __interrupt void ISR##_##A(void)
#define ISR_ATTR_NONCRITICAL(A)\
PRAGMA_STR(__VECTOR__(A))\
__nested __interrupt void ISR##_##A(void)
#define ISR_ATTR_CRITICAL_NAKED(A)\
PRAGMA_STR(__VECTOR__(A))\
__raw __monitor __interrupt void SIGNAL##_##A(void)
#define ISR_ATTR_NONCRITICAL_NAKED(A)\
PRAGMA_STR(__VECTOR__(A))\
__raw __nested __interrupt void SIGNAL##_##A(void)
#endif
中断写法:
ISR(TIM4_OVR_UIF_vector)
{
…………
}
行了!谢谢!IAR的中断定义够怪的!
同一个程序,软件廷时,LED闪烁的速度竟然不一样?
程序代码:
Raisonance 到0x814A(60ms)
IAR 到0x81BD(108ms)
COSMIC 到0x81CE(46ms)
程序设计的定时间是:50ms,只有OCSMIC比较接近!晕!
void delay_ms(unsigned int timer_xs)
{
unsigned char tmp0, tmp1;
for (; timer_xs > 0; timer_xs--)
{
//1010us+(1+1+2)*1/4=1011us*timer_xs
for (tmp1 = 10; tmp1 > 0; tmp1--)
{
//100us+(1+1+2)*1/4=101us*10=1010us
for (tmp0 = 40; tmp0 > 0; tmp0--) //减,比较,跳转
{
//1+1+2+6=10*1/4=2.5us*40=100us
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
}
}
}
在官网上下个例程,仔细琢磨下,仿照着写,再调试下就OK乐
#pragma vector=TIM4_OVR_UIF_vector
__interrupt void TIM4_UPD_OVF_IRQHandler(void)
{
………………
}
我在这里进中断后执行完中断程序后又进中断了,应该怎么设置?