打印
[DSP编程]

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

[复制链接]
1691|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dspic30|  楼主 | 2014-12-17 21:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
什么中断?

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

使用特权

评论回复
地板
稀饭先生| | 2014-12-18 16:17 | 只看该作者
14、15是不是复用了?14-SCIBTX,15-SCIBRX

使用特权

评论回复
5
dspic30|  楼主 | 2014-12-18 20:43 | 只看该作者
稀饭先生 发表于 2014-12-18 16:17
14、15是不是复用了?14-SCIBTX,15-SCIBRX

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

使用特权

评论回复
6
zhangmangui| | 2014-12-18 21:59 | 只看该作者
dspic30 发表于 2014-12-18 20:43
GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;        
   GpioCtrlRegs.GPADIR.bit.GPIO14 = 0;         
   ...

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

使用特权

评论回复
7
稀饭先生| | 2014-12-19 10:03 | 只看该作者
dspic30 发表于 2014-12-18 20:43
GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;        
   GpioCtrlRegs.GPADIR.bit.GPIO14 = 0;         
   ...

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

使用特权

评论回复
8
nowherenick| | 2014-12-22 10:18 | 只看该作者
稀饭先生 发表于 2014-12-19 10:03
这样配置是输入,我觉得楼主有没有可能这儿初始化过后,在后面又有串口初始化,这样相当于配置的还是串口 ...

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

使用特权

评论回复
9
dspic30|  楼主 | 2014-12-22 21:44 | 只看该作者
稀饭先生 发表于 2014-12-19 10:03
这样配置是输入,我觉得楼主有没有可能这儿初始化过后,在后面又有串口初始化,这样相当于配置的还是串口 ...

// 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;
}


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

使用特权

评论回复
10
dspic30|  楼主 | 2014-12-22 21:45 | 只看该作者
nowherenick 发表于 2014-12-22 10:18
外部中断是应该需要把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;
}

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

使用特权

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

本版积分规则

16

主题

60

帖子

0

粉丝