TI中文支持网
TI专业的中文技术问题搜集分享网站

F28035外部中断不响应

将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的外部中断入口吧?

赞(0)
未经允许不得转载:TI中文支持网 » F28035外部中断不响应
分享到: 更多 (0)