6900|10

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请问IARSTM8的中断程序怎么搞?最好能提供个范本,谢谢! [复制链接]

                                 请问IAR STM8的中断程序怎么搞?最好能提供个范本,谢谢!
此帖出自stm32/stm8论坛

最新回复

                                 找到原因了,中断里没有清SR1的UIF标志位。  详情 回复 发表于 2010-7-28 02:44
点赞 关注
 

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 


#pragma vector=TIM4_OVR_UIF_vector
__interrupt void TIM4_UPD_OVF_IRQHandler(void)
{
   ………………
}
此帖出自stm32/stm8论坛
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 


#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)
{
   …………
}
此帖出自stm32/stm8论坛
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 用不了!有没有中断完整项目的例子?
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
stm8_3in1 css

stm8_3in1.rar (24.8 KB)

此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

6
 
行了!谢谢!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");
        }
            }
        }
}
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 还会有这种事情,延时时间和编译器有关?
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

8
 
                                 在官网上下个例程,仔细琢磨下,仿照着写,再调试下就OK乐
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

9
 
中断
声明一个中断向量,说明如下:

#pragma vector=0x02
__interrupt void interrupt_handler(void)




说明:
#pragma vector
IAR中断向量指令
=0x02 :
其数字代表中断向量编号。STM8的地址是从0x00800开始,IAR的中断编号从0开始。中断向量号依次按照中断地址递增。如:
复位向量是0x008000,中断向量号是0x00
TRAP的中断地址是0x008004中断向量号是0x01
SPI中断号是0x0C;详细见下表
__interrupt void interrupt_handler
(void):
是声明一个中断函数,注意interrupt是两个下划线,interrupt_handler是中断函数名字,可自己定义。


int_map.JPG



此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

10
 
#pragma vector=TIM4_OVR_UIF_vector
__interrupt void TIM4_UPD_OVF_IRQHandler(void)
{
   ………………
}
我在这里进中断后执行完中断程序后又进中断了,应该怎么设置?
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

11
 
                                 找到原因了,中断里没有清SR1的UIF标志位。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表