打印

DigInv会一直进入中断

[复制链接]
1911|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gongche|  楼主 | 2013-11-3 11:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
只是在项目中添加DigInv用户模块,不对它进行任何输入、输出设置,在主程序中开启中断和开始运行该模块(全局中断已开启),结果DigInv会一直进入中断。
沙发
huwr| | 2013-11-3 11:06 | 只看该作者
啊?不是只有在DigInv输出为下降沿时才会产生中断吗?

使用特权

评论回复
板凳
gongche|  楼主 | 2013-11-3 11:07 | 只看该作者
是啊,在配置DigInv中断有什么特别需要注意的地方吗?

使用特权

评论回复
地板
huanghuac| | 2013-11-3 11:09 | 只看该作者
输入的下降沿才会触发DigInv 模块的中断。

使用特权

评论回复
5
冰清玉洁| | 2013-11-3 11:10 | 只看该作者
输入不设置输入然后使能中断,这种状态我没用过。请问你为什么不设置输入?

使用特权

评论回复
6
gongche|  楼主 | 2013-11-3 11:11 | 只看该作者
不是不设置输入,是因为设置输入后,不是按照“输入为下降沿时触发中断”,老是出现错误中断,所以尝试不设置输入,看看会不会是自身控件问题,结果就是不输入也一直产生中断

使用特权

评论回复
7
happy_10| | 2013-11-3 11:13 | 只看该作者
你尝试一下把 DigInv 的输入引脚设置为Pull-up 状态,看会不会出错误中断。

使用特权

评论回复
8
gongche|  楼主 | 2013-11-3 11:15 | 只看该作者
还是会出现错误中断

使用特权

评论回复
9
wenfen| | 2013-11-3 11:17 | 只看该作者
在输入端接入高电平呢

使用特权

评论回复
10
gongche|  楼主 | 2013-11-3 11:19 | 只看该作者
结果一样,会不断进入中断程序。

使用特权

评论回复
11
zhuhuis| | 2013-11-3 11:20 | 只看该作者
可否上传你的代码

使用特权

评论回复
12
gongche|  楼主 | 2013-11-3 11:22 | 只看该作者
#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules

void main(void)
{
         // M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
         // Insert your main routine code here.

        M8C_EnableGInt;                     // Eable the globle interrupt

        PRT2DM0 |=0x80;
         PRT2DM1 &=~0x80;
         PRT2DM2 &=~0x80;
         PRT2DR &= ~0x80;

                DigInv_1_EnableInt();
         DigInv_1_Start();

        
        while(1);                           // Loop forever

}
#pragma interrupt_handler DigInv_1_ISR
void DigInv_1_ISR()
{
         DigInv_1_Stop();
         PRT2DR |= 0x80;

        Timer16_1_WritePeriod(365);  
         Timer16_1_EnableInt();
         Timer16_1_Start();
}

#pragma interrupt_handler Timer16_1_ISR
void Timer16_1_ISR()
{
     BYTE Mask = 0;
         Mask = PRT2DR & 0x80;
         if (Mask!=0)
         {
                 PRT2DR &= ~0x80;
         }
         else
         {
                                 Timer16_1_Stop();
                                 DigInv_1_Start();

        }
}

P2_7连接一个LED灯,Timer16为500ms计时

使用特权

评论回复
13
zhuhuis| | 2013-11-3 11:23 | 只看该作者
我用CY3210验证了一下你的程序,应该没问题。3210有一个连接VCC的button,我用button作为输入信号,输入端接下拉电阻接地,结果没有发现你所说的中断错误。

使用特权

评论回复
14
wenfen| | 2013-11-3 11:25 | 只看该作者
对,用示波器看一下你板子上的输入信号是否有干扰,程序是没问题的

使用特权

评论回复
15
tian111| | 2013-11-3 11:27 | 只看该作者
嗯,重新检查下,应该是输入端有干扰造成的。

使用特权

评论回复
16
gongche|  楼主 | 2013-11-3 11:29 | 只看该作者
嗯,关于PRS24中PRS24_1_INPUT_REG_LSB高四位表示什么,是指输入值还是指与输入端相连接的总线?

使用特权

评论回复
17
宋倩2010| | 2013-11-3 11:30 | 只看该作者
我从PRS24_1.h中找到了定义:
#pragma ioport  PRS24_1_INPUT_REG_LSB:  0x121              //Input register LSB
BYTE            PRS24_1_INPUT_REG_LSB;
#pragma ioport  PRS24_1_INPUT_REG_ISB:  0x125              //Input register ISB
BYTE            PRS24_1_INPUT_REG_ISB;
#pragma ioport  PRS24_1_INPUT_REG_MSB:  0x129              //Input register MSB
既然是输入寄存器,应该是只输入值吧。我也不是很确定。

使用特权

评论回复
18
gongche|  楼主 | 2013-11-3 11:32 | 只看该作者
这个定义我也看过,只是不知道这个输入值的相关操作方法

使用特权

评论回复
19
gongche|  楼主 | 2013-11-3 11:34 | 只看该作者
例如:该输入值与多项式寄存器、移位寄存器的相互关系是什么?

使用特权

评论回复
20
chenho| | 2013-11-3 11:35 | 只看该作者
这个你就得多练练手了

使用特权

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

本版积分规则

768

主题

9410

帖子

2

粉丝