Other Parts Discussed in Thread: CONTROLSUITE
Tool/software: Code Composer Studio
I want to use three external interrupt(XINT1,XINT2,XINT3) at the HVPSFB project.
So , I write flollowing code.
////////////////////////////////////main////////////////////////////////////////////
EALLOW;
PieVectTable.XINT1 = & XINT1_ISR;
GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 0x10; // trigger select is GPIO16
EDIS;
PieCtrlRegs.PIEIER1.bit.INTx4 = 1;
XIntruptRegs.XINT1CR.bit.POLARITY = 0x3;
XIntruptRegs.XINT1CR.bit.ENABLE = 0x1;
EALLOW;
PieVectTable.XINT2 = & XINT2_ISR;
GpioIntRegs.GPIOXINT2SEL.bit.GPIOSEL = 0x13; // trigger select is GPIO19
EDIS;
PieCtrlRegs.PIEIER1.bit.INTx5 = 1;
XIntruptRegs.XINT2CR.bit.POLARITY = 0x3;
XIntruptRegs.XINT2CR.bit.ENABLE = 0x1;
IER |= M_INT1;
EALLOW;
PieVectTable.XINT3 = & XINT3_ISR;
GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL = 0x12; // trigger select is GPIO18
EDIS;
PieCtrlRegs.PIEIER12.bit.INTx1 = 1;
XIntruptRegs.XINT3CR.bit.POLARITY = 0x1;
XIntruptRegs.XINT3CR.bit.ENABLE = 0x1;
IER |= M_INT12;
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////// ISR////////////////////////////////////////
interrupt void XINT1_ISR(void)
{
XINT1_flag = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
return;
}
interrupt void XINT2_ISR(void)
{
XINT2_flag = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
return;
}
interrupt void XINT3_ISR(void)
{
XINT3_flag = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP12;
return;
}
///////////////////////////////////////////////////////////////////////////////////////
///////////////////DevInit////////////////////////////////
// GPIO-16 - PIN FUNCTION = (Unused)
GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 0; // 0=GPIO, 1=SPISIMO-A, 2=CANTX-B, 3=TZ5
GpioCtrlRegs.GPADIR.bit.GPIO16 = 0; // 1=OUTput, 0=INput
GpioDataRegs.GPACLEAR.bit.GPIO16 = 1; // uncomment if --> Set Low initially
// GpioDataRegs.GPASET.bit.GPIO16 = 1; // uncomment if --> Set High initially
// GPIO-18 - PIN FUNCTION = (Unused)
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0; // 0=GPIO, 1=SPICLK-A, 2=SCITX-B, 3=Resv
GpioCtrlRegs.GPADIR.bit.GPIO18 = 0; // 1=OUTput, 0=INput
GpioDataRegs.GPACLEAR.bit.GPIO18 = 1; // uncomment if --> Set Low initially
// GpioDataRegs.GPASET.bit.GPIO18 = 1; // uncomment if --> Set High initially
// GPIO-19 - PIN FUNCTION = (Unused)
GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0; // 0=GPIO, 1=SPISTE-A, 2=SCIRX-B, 3=Resv
GpioCtrlRegs.GPADIR.bit.GPIO19 = 0; // 1=OUTput, 0=INput
GpioDataRegs.GPACLEAR.bit.GPIO19 = 1; // uncomment if --> Set Low initially
// GpioDataRegs.GPASET.bit.GPIO19 = 1; // uncomment if --> Set High initially
When I use any two XINT(for example use XINT1, XINT3 and comment out XINT2),
these XINT operate correct.
But when I use three XINT,these XINT operation are strange
Three XINT_flag change the value from about -30000 to 30000.
XINT_flag don't change except interrupt,and these must be 0 or 1.
Why XINT operate strange?