将GPIO10配置为外部中断口,程序可以正常响应外部中断,但是改为GPIO20作为外部中断口之后程序不能响应外部中断了,请问这是什么原因?好像只有GPIO0-10配置为外部中断口时程序可以正常响应外部中断。部分代码如下:
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.XINT1 = &xint1_isr;
EDIS;
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // Enable PIE Gropu 1 INT4
IER |= M_INT1; // Enable CPU INT1
EINT;
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 0; // GPIO
GpioCtrlRegs.GPADIR.bit.GPIO20 = 0; // input
GpioCtrlRegs.GPAQSEL2.bit.GPIO0 = 0; // XINT1 Synch to SYSCLKOUT only
EDIS;
EALLOW;
GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 20; // XINT1 is GPIO20
EDIS;
XIntruptRegs.XINT1CR.bit.POLARITY = 0; // Falling edge interrupt
mangui zhang:
你好 注意外部引脚对应和区分
http://www.ti.com.cn/general/cn/docs/lit/getliterature.tsp?genericPartNumber=tms320f28335&fileType=pdf
将GPIO10配置为外部中断口,程序可以正常响应外部中断,但是改为GPIO20作为外部中断口之后程序不能响应外部中断了,请问这是什么原因?好像只有GPIO0-10配置为外部中断口时程序可以正常响应外部中断。部分代码如下:
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.XINT1 = &xint1_isr;
EDIS;
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // Enable PIE Gropu 1 INT4
IER |= M_INT1; // Enable CPU INT1
EINT;
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 0; // GPIO
GpioCtrlRegs.GPADIR.bit.GPIO20 = 0; // input
GpioCtrlRegs.GPAQSEL2.bit.GPIO0 = 0; // XINT1 Synch to SYSCLKOUT only
EDIS;
EALLOW;
GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 20; // XINT1 is GPIO20
EDIS;
XIntruptRegs.XINT1CR.bit.POLARITY = 0; // Falling edge interrupt
囧:
Eric,
从你的程序看,好像没有使能XIntruptRegs.XINT1CR.bit.Enable位,这一位是使能外部中断源的,你还可以参考controlsuite中的device support的F2803X Externalinterrupt中断,这个例程是用GPIO34的高输出来触发GPIO30,31的上升沿以及下降沿中断。
将GPIO10配置为外部中断口,程序可以正常响应外部中断,但是改为GPIO20作为外部中断口之后程序不能响应外部中断了,请问这是什么原因?好像只有GPIO0-10配置为外部中断口时程序可以正常响应外部中断。部分代码如下:
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.XINT1 = &xint1_isr;
EDIS;
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // Enable PIE Gropu 1 INT4
IER |= M_INT1; // Enable CPU INT1
EINT;
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 0; // GPIO
GpioCtrlRegs.GPADIR.bit.GPIO20 = 0; // input
GpioCtrlRegs.GPAQSEL2.bit.GPIO0 = 0; // XINT1 Synch to SYSCLKOUT only
EDIS;
EALLOW;
GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 20; // XINT1 is GPIO20
EDIS;
XIntruptRegs.XINT1CR.bit.POLARITY = 0; // Falling edge interrupt
Eric*:
回复 囧:
囧,
我的程序里有这条使能语句的,在这个帖子里面忘了粘上了,您说的那个例程我之前看过了,我的程序就是参考那个例程做的~
不知道还有没有其他的参考意见?谢谢~
现在的问题是仅仅换了一个外部中断口程序就不动作了,难道外部中断中端口对GPIO口配置有要求吗?可是我看F28035的技术手册写的是XINT1-3可以任意配置GPIO0-31作为外部中断口~
将GPIO10配置为外部中断口,程序可以正常响应外部中断,但是改为GPIO20作为外部中断口之后程序不能响应外部中断了,请问这是什么原因?好像只有GPIO0-10配置为外部中断口时程序可以正常响应外部中断。部分代码如下:
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.XINT1 = &xint1_isr;
EDIS;
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // Enable PIE Gropu 1 INT4
IER |= M_INT1; // Enable CPU INT1
EINT;
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 0; // GPIO
GpioCtrlRegs.GPADIR.bit.GPIO20 = 0; // input
GpioCtrlRegs.GPAQSEL2.bit.GPIO0 = 0; // XINT1 Synch to SYSCLKOUT only
EDIS;
EALLOW;
GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 20; // XINT1 is GPIO20
EDIS;
XIntruptRegs.XINT1CR.bit.POLARITY = 0; // Falling edge interrupt
Eric*:
回复 mangui zhang:
mangui zhang,
你好,F28035只有三个外部中断源吧?
XINT1-3,可以接收GPIO0-31的中断输入。
我现在使用的是XINT1,那么正常情况下GPIO0-31中的任意一个端口都可以配置为XINT1的外部中断入口吧?