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 static/image/common/back.gif
什么中断?
外部中断XINT1和XINT2以gpio0、1为中断源可以实现,以14、15实现不了。 14、15是不是复用了?14-SCIBTX,15-SCIBRX 稀饭先生 发表于 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输入功能吧。 dspic30 发表于 2014-12-18 20:43 static/image/common/back.gif
GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO14 = 0;
...
找找手册看看这两个口里面结构是不是和其他的IO结构不一样
需要外部上下拉什么不 dspic30 发表于 2014-12-18 20:43 static/image/common/back.gif
GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO14 = 0;
...
这样配置是输入,我觉得楼主有没有可能这儿初始化过后,在后面又有串口初始化,这样相当于配置的还是串口。 稀饭先生 发表于 2014-12-19 10:03 static/image/common/back.gif
这样配置是输入,我觉得楼主有没有可能这儿初始化过后,在后面又有串口初始化,这样相当于配置的还是串口 ...
外部中断是应该需要把IO口配置为输入来触发的吧
我也觉得楼主有可能又把串口初始化了的 稀饭先生 发表于 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;
}
这就是程序的后半段,应该没有初始化串口的语句吧。 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]