打印

关于DigInv的中断

[复制链接]
7186|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hyg0753|  楼主 | 2012-3-16 16:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我遇到的情况:
    只是在项目中添加DigInv用户模块,不对它进行任何输入、输出设置,在主程序中开启中断和开始运行该模块(全局中断已开启),结果DigInv会一直进入中断。

我的理解:
    不是只有在DigInv输出为下降沿时才会产生中断吗?同时,请问在配置DigInv中断有什么特别需要注意的地方吗?先在此谢过了!由于没有积分,只能对各位说拜托了
沙发
hisong| | 2012-3-16 17:09 | 只看该作者
学习的路过

使用特权

评论回复
板凳
hyg0753|  楼主 | 2012-3-16 17:22 | 只看该作者
路过的不要错过

使用特权

评论回复
地板
PSoC小子| | 2012-3-17 00:08 | 只看该作者
输入的下降沿才会触发DigInv 模块的中断。
输入不设置输入然后使能中断,这种状态我没用过。请问您为什么不设置输入?

使用特权

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

使用特权

评论回复
6
PSoC小子| | 2012-3-18 17:46 | 只看该作者
你尝试一下把 DigInv 的输入引脚设置为Pull-up 状态,看会不会出错误中断。

使用特权

评论回复
7
hyg0753|  楼主 | 2012-3-19 10:57 | 只看该作者
6# PSoC小子

还是会出现错误中断,同时我也尝试在输入端接入高电平,结果一样,会不断进入中断程序。我是用PSoC Designer5.2 芯片是CY8C29466

使用特权

评论回复
8
PSoC小子| | 2012-3-19 14:19 | 只看该作者
可否上传你的代码

使用特权

评论回复
9
hyg0753|  楼主 | 2012-3-19 14:29 | 只看该作者
#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计时

使用特权

评论回复
10
PSoC小子| | 2012-3-19 20:57 | 只看该作者
我用CY3210验证了一下你的程序,应该没问题。3210有一个连接VCC的button,我用button作为输入信号,输入端接下拉电阻接地,结果没有发现你所说的中断错误。
你用示波器看一下你板子上的输入信号是否有干扰,程序是没问题的

使用特权

评论回复
11
hyg0753|  楼主 | 2012-3-20 11:03 | 只看该作者
10# PSoC小子

    谢谢  PSoC小子  耐心的解答,我重新检查了一遍,应该是输入端有干扰造成的。

    在此还有个问题想请教一下,关于PRS24中PRS24_1_INPUT_REG_LSB高四位表示什么,是指输入值还是指与输入端相连接的总线?

使用特权

评论回复
12
PSoC小子| | 2012-3-20 15:58 | 只看该作者
我从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
既然是输入寄存器,应该是只输入值吧。我也不是很确定。

使用特权

评论回复
13
hyg0753|  楼主 | 2012-3-21 14:46 | 只看该作者
13# PSoC小子

这个定义我也看过,只是不知道这个输入值的相关操作方法,例如:该输入值与多项式寄存器、移位寄存器的相互关系是什么?

使用特权

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

本版积分规则

0

主题

16

帖子

0

粉丝