打印
[PIC®/AVR®/dsPIC®产品]

PIC24FV16KM202 需要使用引脚边沿捕捉触发中断功能如何操作?

[复制链接]
557|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fancychg1|  楼主 | 2019-12-21 15:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 fancychg1 于 2019-12-26 13:04 编辑

PIC24FV16KM202 需要使用引脚边沿捕捉触发中断功能如何操作?
先配置好定时器,再配置CCPxBUFH/CCPxBUFL?
能举个例子?设置过输入引脚方向。初始化了CCP1控制寄存器,设置了中断服务程序,为何引脚有脉冲却未进入中断服务程序?

//Set RA7 as Input of Start Negtive pulse
//Set RB9 as Input of Start Negtive pulse
TRISA = 0xFFF7; // 1 as inputs and 0 as outputs
TRISB = 0xE20F; //


void initCCP1()
{
CCP1TMRH=0;
CCP1TMRL=0;
CCP1CON1Lbits.CCPON=1;
CCP1CON1Lbits.CLKSEL=0;
CCP1CON1Lbits.TMRPS=0;
CCP1CON1Lbits.T32=0;
CCP1CON1Lbits.CCSEL=1;
CCP1CON1Lbits.MOD=0b0010;
CCP1CON1Hbits.TRIGEN=0;
CCP1CON1Hbits.OPS3=0;
CCP1CON1Hbits.TRIGEN=1;
CCP1CON1Hbits.ONESHOT=1;
CCP1CON2Lbits.ASDG=0;
CCP1CON2Hbits.ICS=0;
CCP1STATLbits.TRCLR=1;

IPC0bits.CCP1IP=0b001;                /////////////
IPC0bits.T1IP=0b010;///////////////
IFS0bits.CCP1IF = 0;
IEC0bits.CCP1IE = 1;                 //Enable CCP1 interrupt.

}

void __attribute__((__interrupt__ , auto_psv)) _CCP1Interrupt(void)
    {
        IFS0bits.CCP1IF = 0;
    }



使用特权

评论回复
沙发
21mengnan| | 2019-12-26 16:43 | 只看该作者
上升沿中断和下降沿中断?

使用特权

评论回复
板凳
fancychg1|  楼主 | 2019-12-27 08:53 | 只看该作者
21mengnan 发表于 2019-12-26 16:43
上升沿中断和下降沿中断?

下降沿中断。

使用特权

评论回复
地板
fancychg1|  楼主 | 2019-12-27 08:55 | 只看该作者
本帖最后由 fancychg1 于 2019-12-27 09:19 编辑

我修改了一下设置,也不知道是哪个影响的,能观察到只两次进入了CCP1的中断程序,然后就没进入了。不知CCP1TMRH,CCP1TMRL,CCP1BUFH,CCP1BUFL是何作用。
void initCCP1()
{
CCP1TMRH=0;
CCP1TMRL=0;
CCP1PRH=0xFFFF;
CCP1PRL=0xFFFF;
IEC0bits.CCP1IE = 0;               
CCP1CON1Lbits.CCPON=1;
CCP1CON1Lbits.CLKSEL=0;
CCP1CON1Lbits.TMRPS=0;
CCP1CON1Lbits.T32=1;
CCP1CON1Lbits.CCSEL=1;
CCP1CON1Lbits.MOD=0b0010;
CCP1CON1Hbits.RTRGEN=1;
CCP1CON1Hbits.OPS3=0;
CCP1CON1Hbits.TRIGEN=1;
CCP1CON1Hbits.ONESHOT=0;
CCP1CON2Lbits.ASDG=0;
CCP1CON2Hbits.ICS=0;
CCP1STATLbits.TRSET=1;
//CCP1STATLbits.TRCLR=1;

CCP1CON1Lbits.CCPON=1;
IPC0bits.CCP1IP=0b001;                /////////////////////timer 1中断优先级3
IPC0bits.T1IP=0b010;///////////////
IFS0bits.CCP1IF = 0;
IEC0bits.CCP1IE = 1;                 //Enable CCP1 interrupt.
}
第一次进入CCP1中断程序后:
CCP1BUFH       0xFF02
CCP1BUFL        0xF4FB
CCP1CON1H    0x4080
CCP1CON1L     0xC032
CCP1CON2H    0x0100
CCP1CON2L     0x0000
CCP1CON3H    0x0000
CCP1CON3L     0x0000
CCP1PRH 0x0000
CCP1PRL  0x0000
CCP1RAL 0x0000
CCP1RBL 0x0000
CCP1STATL       0x0081
CCP1TMRH      0x0002
CCP1TMRL       0xF871
第二次进入CCP1中断程序后:
CCP1BUFH       0x0002
CCP1BUFL        0xF4FB
CCP1CON1H    0x4080
CCP1CON1L     0xC032
CCP1CON2H    0x0100
CCP1CON2L     0x0000
CCP1CON3H    0x0000
CCP1CON3L     0x0000
CCP1PRH 0x0000
CCP1PRL  0x0000
CCP1RAL 0x0000
CCP1RBL 0x0000
CCP1STATL       0x0081
CCP1TMRH      0x0005
CCP1TMRL       0x39CB
然后就不再进入了。

使用特权

评论回复
5
fancychg1|  楼主 | 2019-12-30 12:00 | 只看该作者
通过添加读取BUFFER指令后,就能每次进入中断了。为何手册中没提到呢?

使用特权

评论回复
6
asdsfgwsafd| | 2020-1-2 08:46 | 只看该作者
一直没搞明白外部中断和电平变化中断有什么区别

使用特权

评论回复
7
fancychg1|  楼主 | 2020-1-10 12:49 | 只看该作者
烧写到第三块板子里时,捕捉中断工作一会儿后还是停止进入了,奇怪。前面两块是能一直进入捕捉中断的。

使用特权

评论回复
8
fancychg1|  楼主 | 2020-1-14 15:03 | 只看该作者
观察发现似乎是外部触发有干扰造成的,如果无干扰则正常中断。

使用特权

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

本版积分规则

7

主题

20

帖子

0

粉丝