dspic30 发表于 2014-12-17 21:49

28335,中断在gpio0-7上可以实现,在14,15上不能实现,求解。

28335,中断在gpio0-7上可以实现,在14,15上不能实现,求解。
代码如下:
   PieCtrlRegs.PIECTRL.bit.ENPIE = 1;         
   PieCtrlRegs.PIEIER1.bit.INTx4 = 1;         
   PieCtrlRegs.PIEIER1.bit.INTx5 = 1;            
   IER |= M_INT1;                              
   EINT;                                    
      
   EALLOW;
   GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;      
   GpioCtrlRegs.GPADIR.bit.GPIO0 = 0;         
   GpioCtrlRegs.GPAQSEL1.bit.GPIO0 = 0;      

   GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;         
   GpioCtrlRegs.GPADIR.bit.GPIO1 = 0;         
   GpioCtrlRegs.GPAQSEL1.bit.GPIO1 = 0;      
   GpioCtrlRegs.GPACTRL.bit.QUALPRD0 = 0x02;   
   EDIS;

// GPIO0 is XINT1, GPIO1 is XINT2
   EALLOW;
   GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 0;   
   GpioIntRegs.GPIOXINT2SEL.bit.GPIOSEL = 1;   
   EDIS;

// Configure XINT1
   XIntruptRegs.XINT1CR.bit.POLARITY = 1;      
   XIntruptRegs.XINT2CR.bit.POLARITY = 1;      
   
// Enable XINT1 and XINT2   
   XIntruptRegs.XINT1CR.bit.ENABLE = 1;      
   XIntruptRegs.XINT2CR.bit.ENABLE = 1;      
在gpio0、1上可以实现;

   PieCtrlRegs.PIECTRL.bit.ENPIE = 1;         
   PieCtrlRegs.PIEIER1.bit.INTx4 = 1;         
   PieCtrlRegs.PIEIER1.bit.INTx5 = 1;            
   IER |= M_INT1;                              
   EINT;                                    
      
   EALLOW;
   GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;      
   GpioCtrlRegs.GPADIR.bit.GPIO14 = 0;         
   GpioCtrlRegs.GPAQSEL1.bit.GPIO14 = 0;      

   GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 0;         
   GpioCtrlRegs.GPADIR.bit.GPIO15 = 0;         
   GpioCtrlRegs.GPAQSEL1.bit.GPIO15 = 0;      
   GpioCtrlRegs.GPACTRL.bit.QUALPRD1 = 0x02;   
   EDIS;

// GPIO0 is XINT1, GPIO1 is XINT2
   EALLOW;
   GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 14;   
   GpioIntRegs.GPIOXINT2SEL.bit.GPIOSEL = 15;   
   EDIS;

// Configure XINT1
   XIntruptRegs.XINT1CR.bit.POLARITY = 1;      
   XIntruptRegs.XINT2CR.bit.POLARITY = 1;      
   
// Enable XINT1 and XINT2   
   XIntruptRegs.XINT1CR.bit.ENABLE = 1;      
   XIntruptRegs.XINT2CR.bit.ENABLE = 1;
在gpio14、15上不能进中断,求各位大神指点!

wangch_sh 发表于 2014-12-18 10:16

什么中断?

dspic30 发表于 2014-12-18 15:35

wangch_sh 发表于 2014-12-18 10:16 static/image/common/back.gif
什么中断?

外部中断XINT1和XINT2以gpio0、1为中断源可以实现,以14、15实现不了。

稀饭先生 发表于 2014-12-18 16:17

14、15是不是复用了?14-SCIBTX,15-SCIBRX

dspic30 发表于 2014-12-18 20:43

稀饭先生 发表于 2014-12-18 16:17 static/image/common/back.gif
14、15是不是复用了?14-SCIBTX,15-SCIBRX

   GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;      
   GpioCtrlRegs.GPADIR.bit.GPIO14 = 0;         
   GpioCtrlRegs.GPAQSEL1.bit.GPIO14 = 0;
程序中这样配置应该是io输入功能吧。

zhangmangui 发表于 2014-12-18 21:59

dspic30 发表于 2014-12-18 20:43 static/image/common/back.gif
GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;      
   GpioCtrlRegs.GPADIR.bit.GPIO14 = 0;         
   ...

找找手册看看这两个口里面结构是不是和其他的IO结构不一样
需要外部上下拉什么不

稀饭先生 发表于 2014-12-19 10:03

dspic30 发表于 2014-12-18 20:43 static/image/common/back.gif
GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;      
   GpioCtrlRegs.GPADIR.bit.GPIO14 = 0;         
   ...

这样配置是输入,我觉得楼主有没有可能这儿初始化过后,在后面又有串口初始化,这样相当于配置的还是串口。

nowherenick 发表于 2014-12-22 10:18

稀饭先生 发表于 2014-12-19 10:03 static/image/common/back.gif
这样配置是输入,我觉得楼主有没有可能这儿初始化过后,在后面又有串口初始化,这样相当于配置的还是串口 ...

外部中断是应该需要把IO口配置为输入来触发的吧
我也觉得楼主有可能又把串口初始化了的

dspic30 发表于 2014-12-22 21:44

稀饭先生 发表于 2014-12-19 10:03 static/image/common/back.gif
这样配置是输入,我觉得楼主有没有可能这儿初始化过后,在后面又有串口初始化,这样相当于配置的还是串口 ...

// GPIO14 and GPIO15 are inputs         
   EALLOW;
   GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;         // GPIO
   GpioCtrlRegs.GPADIR.bit.GPIO14 = 0;          // input
   GpioCtrlRegs.GPAPUD.bit.GPIO14= 1;
   GpioCtrlRegs.GPAQSEL1.bit.GPIO14 = 0;      // Xint1 Synch to SYSCLKOUT only

   GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 0;         // GPIO
   GpioCtrlRegs.GPADIR.bit.GPIO15 = 0;          // input
   GpioCtrlRegs.GPAPUD.bit.GPIO15= 0;
   GpioCtrlRegs.GPAQSEL1.bit.GPIO15 = 2;      // XINT2 Qual using 6 samples
   GpioCtrlRegs.GPACTRL.bit.QUALPRD1 = 0xFF;   // Each sampling window is 510*SYSCLKOUT
   EDIS;

// GPIO14 is XINT1, GPIO15 is XINT2
   EALLOW;
   GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 14;   // Xint1 is GPIO14
   GpioIntRegs.GPIOXINT2SEL.bit.GPIOSEL = 15;   // XINT2 is GPIO15
   EDIS;

// Configure XINT1
   XIntruptRegs.XINT1CR.bit.POLARITY = 0;      // Falling edge interrupt
   XIntruptRegs.XINT2CR.bit.POLARITY = 1;      // Rising edge interrupt
   
// Enable XINT1 and XINT2   
   XIntruptRegs.XINT1CR.bit.ENABLE = 1;      // Enable Xint1
   XIntruptRegs.XINT2CR.bit.ENABLE = 1;      // Enable XINT2

// Step 6. IDLE loop:       
   for(;;)
   {}
}


interrupt void xint1_isr(void)
{
        // Acknowledge this interrupt to get more from group 1
        PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}

interrupt void xint2_isr(void)
{
        // Acknowledge this interrupt to get more from group 1
        PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}


这就是程序的后半段,应该没有初始化串口的语句吧。

dspic30 发表于 2014-12-22 21:45

nowherenick 发表于 2014-12-22 10:18 static/image/common/back.gif
外部中断是应该需要把IO口配置为输入来触发的吧
我也觉得楼主有可能又把串口初始化了的 ...

// GPIO14 and GPIO15 are inputs         
   EALLOW;
   GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;         // GPIO
   GpioCtrlRegs.GPADIR.bit.GPIO14 = 0;          // input
   GpioCtrlRegs.GPAPUD.bit.GPIO14= 1;
   GpioCtrlRegs.GPAQSEL1.bit.GPIO14 = 0;      // Xint1 Synch to SYSCLKOUT only

   GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 0;         // GPIO
   GpioCtrlRegs.GPADIR.bit.GPIO15 = 0;          // input
   GpioCtrlRegs.GPAPUD.bit.GPIO15= 0;
   GpioCtrlRegs.GPAQSEL1.bit.GPIO15 = 2;      // XINT2 Qual using 6 samples
   GpioCtrlRegs.GPACTRL.bit.QUALPRD1 = 0xFF;   // Each sampling window is 510*SYSCLKOUT
   EDIS;

// GPIO14 is XINT1, GPIO15 is XINT2
   EALLOW;
   GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 14;   // Xint1 is GPIO14
   GpioIntRegs.GPIOXINT2SEL.bit.GPIOSEL = 15;   // XINT2 is GPIO15
   EDIS;

// Configure XINT1
   XIntruptRegs.XINT1CR.bit.POLARITY = 0;      // Falling edge interrupt
   XIntruptRegs.XINT2CR.bit.POLARITY = 1;      // Rising edge interrupt
   
// Enable XINT1 and XINT2   
   XIntruptRegs.XINT1CR.bit.ENABLE = 1;      // Enable Xint1
   XIntruptRegs.XINT2CR.bit.ENABLE = 1;      // Enable XINT2

// Step 6. IDLE loop:       
   for(;;)
   {}
}


interrupt void xint1_isr(void)
{
        // Acknowledge this interrupt to get more from group 1
        PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}

interrupt void xint2_isr(void)
{
        // Acknowledge this interrupt to get more from group 1
        PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}

这是程序后半段,应该没有初始化串口程序吧。
页: [1]
查看完整版本: 28335,中断在gpio0-7上可以实现,在14,15上不能实现,求解。