[其他ST产品] st7 外部中断问题???

[复制链接]
3665|15
 楼主| siler 发表于 2007-11-5 16:22 | 显示全部楼层 |阅读模式
这是建立工程后自带的vector.c文件 我将外部中断1,对应中断向量地址0xFFF6。
在main.c中建立了中断服务函数,但是我无法进入中断,

/*    BASIC INTERRUPT VECTORS TABLE FOR ST7 devices
 *    Copyright (c) 2002 STMicroelectronics
 */

#ifndef NULL
#define NULL    (void *)0
#endif

extern void _stext();        /* startup routine */  
extern  void ei1_Int();//外部中断1服务函数

/* Interrupt vector table, to be linked at the address 0xFFE0 (in ROM) */ 
void (* const _vectab[])() = {
    NULL,              /* 0xFFE0 */
    NULL,            /* 0xFFE2 */
    NULL,            /* 0xFFE4 */
    NULL,            /* 0xFFE6 */
    NULL,            /* 0xFFE8 */
    NULL,            /* 0xFFEA */
    NULL,            /* 0xFFEC */
    NULL,            /* 0xFFEE */
    NULL,            /* 0xFFF0 */
    NULL,            /* 0xFFF2 */
    NULL,            /* 0xFFF4 */
    ei1_Int,            /* 0xFFF6 */
    NULL,            /* 0xFFF8 */
    NULL,            /* 0xFFFA */
    NULL,            /* Trap vector */
    _stext,            /* Reset Vector */
};
 楼主| siler 发表于 2007-11-5 16:27 | 显示全部楼层

??

我使用的是st7flite09,

这个mcu是不是没有中断标志位。
浪淘沙 发表于 2007-11-5 16:28 | 显示全部楼层

你是否指定了外部中断引脚?你是否初始化了外部中断引脚

是否定义了外部中断的触发条件?
 楼主| siler 发表于 2007-11-5 16:34 | 显示全部楼层

???

我设置了EICR,把ei1设成了falling edge
 楼主| siler 发表于 2007-11-5 16:38 | 显示全部楼层

是不是还应该对cc寄存器的 I 位进行操作呀

浪淘沙 发表于 2007-11-5 16:47 | 显示全部楼层

当然要对CC寄存器的“I”位进行操作

 楼主| siler 发表于 2007-11-5 16:52 | 显示全部楼层

我设置了I还是不行

我用了 
#asm
 rim
#endasm       不行
还需要设置其他的吗?
谢谢        
浪淘沙 发表于 2007-11-5 16:54 | 显示全部楼层

我在3楼提出的问题你是如何做的?

 楼主| siler 发表于 2007-11-5 17:01 | 显示全部楼层

我设置了 EICR

设置EICR 选择了 下降沿触发 

不是这个嘛,还有其他需要设置吗
浪淘沙 发表于 2007-11-5 17:10 | 显示全部楼层

请看ST7FLite0的数据手册的10.5节

你需要通过DDR和OR寄存器选择和配置相应的I/O口。
 楼主| siler 发表于 2007-11-5 17:14 | 显示全部楼层

这是我的外部中断1初始化函数,你说的应该是这个

void Ei1_Init(void)//初始化ei1
{
 PADDR    = 0x1f;    //pa0--pa4为输出,pa7为输入
 PAOR    = 0x9f;    //pa0--pa4为out_push-pull,pa7为input中断
 EICR    = 0x08;    //中断控制寄存器,ex1为下降沿触发
}

 楼主| siler 发表于 2007-11-5 17:25 | 显示全部楼层

这是我的中断服务程序,请帮忙谢谢

@interrupt void ei1_Int(void)//ex1中断服务函数
{
 PADR=0x1f;
}
浪淘沙 发表于 2007-11-5 17:47 | 显示全部楼层

用示波器量一下你的PA7引脚是否有输入或电平变化

从你的设置来看应该在PA7引脚下降沿出现时产生中断,除非你的电路有问题或有更高级的中断阻碍了PA7的中断。
 楼主| siler 发表于 2007-11-5 17:58 | 显示全部楼层

莫名其妙的好使了。。??

我只是删掉了一些注释,程序没有改动,他就又好使了。

谢谢各位给我回帖

继续努力,搞定st
浪淘沙 发表于 2007-11-5 18:05 | 显示全部楼层

哈哈,上帝之手

请楼主还是能找找原因,否则下次又要怪罪上帝了。
 楼主| siler 发表于 2007-11-5 18:24 | 显示全部楼层

god is fair

我正在找原因,不过还没找到。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

38

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部