打印

只是在项目中添加DigInv用户模块

[复制链接]
918|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
renyaq|  楼主 | 2017-8-12 13:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DigInv会一直进入中断,不对它进行任何输入、输出设置,在主程序中开启中断和开始运行该模块(全局中断已开启),结果DigInv会一直进入中断。
沙发
supernan| | 2017-8-12 13:48 | 只看该作者

啊?不是只有在DigInv输出为下降沿时才会产生中断吗?

使用特权

评论回复
板凳
renyaq|  楼主 | 2017-8-12 13:50 | 只看该作者
是啊,在配置DigInv中断有什么特别需要注意的地方吗?

使用特权

评论回复
地板
xxrs| | 2017-8-12 13:52 | 只看该作者
输入的下降沿才会触发DigInv 模块的中断。

使用特权

评论回复
5
houcs| | 2017-8-12 13:54 | 只看该作者

输入不设置输入然后使能中断,这种状态我没用过。请问你为什么不设置输入?

使用特权

评论回复
6
renyaq|  楼主 | 2017-8-12 13:57 | 只看该作者

不是不设置输入,是因为设置输入后,不是按照“输入为下降沿时触发中断”,老是出现错误中断,所以尝试不设置输入,看看会不会是自身控件问题,结果就是不输入也一直产生中断

使用特权

评论回复
7
liuzaiy| | 2017-8-12 14:01 | 只看该作者

你尝试一下把 DigInv 的输入引脚设置为Pull-up 状态,看会不会出错误中断。

使用特权

评论回复
8
renyaq|  楼主 | 2017-8-12 14:03 | 只看该作者
还是会出现错误中断

使用特权

评论回复
9
pangb| | 2017-8-12 14:05 | 只看该作者

在输入端接入高电平呢

使用特权

评论回复
10
renyaq|  楼主 | 2017-8-12 14:07 | 只看该作者

结果一样,会不断进入中断程序。

使用特权

评论回复
11
chenjunt| | 2017-8-12 14:10 | 只看该作者

可否上传你的代码

使用特权

评论回复
12
renyaq|  楼主 | 2017-8-12 14:11 | 只看该作者
#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
ousj| | 2017-8-12 14:15 | 只看该作者

我用CY3210验证了一下你的程序,应该没问题。3210有一个连接VCC的button,我用button作为输入信号,输入端接下拉电阻接地,结果没有发现你所说的中断错误。

使用特权

评论回复
14
morrisk| | 2017-8-12 14:17 | 只看该作者


对,用示波器看一下你板子上的输入信号是否有干扰,程序是没问题的

使用特权

评论回复
15
zyf部长| | 2017-8-12 14:21 | 只看该作者
嗯,重新检查下,应该是输入端有干扰造成的。

使用特权

评论回复
16
renyaq|  楼主 | 2017-8-12 14:23 | 只看该作者

嗯,关于PRS24中PRS24_1_INPUT_REG_LSB高四位表示什么,是指输入值还是指与输入端相连接的总线?

使用特权

评论回复
17
xxmmi| | 2017-8-12 14:25 | 只看该作者
我从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
renyaq|  楼主 | 2017-8-12 14:30 | 只看该作者
这个定义我也看过,只是不知道这个输入值的相关操作方法

使用特权

评论回复
19
renyaq|  楼主 | 2017-8-12 14:32 | 只看该作者
例如:该输入值与多项式寄存器、移位寄存器的相互关系是什么?

使用特权

评论回复
20
kangzj| | 2017-8-12 14:34 | 只看该作者

这个你就得多练练手了

使用特权

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

本版积分规则

700

主题

10138

帖子

4

粉丝