This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

F28027 keypad Problem

Hi

I'm using the F28027 PICCOLO control kit

I'm made GPIO16 as external interrupt connected to Vcc by 1.2K resistor 

GPIOs 17,18,19 & 32 are connected to push buttons and the other terminal on the switches is connected to GPIO16

i programmed the GPIOs and interrupt to make action on the LED connected to GPIO34

but there is a problem the code not work correctly

 void DeviceInit(void);
void InitFlash();
void PieCntlInit(void);
void PieVectTableInit(void);
void Timer0_Ctrl(void);
void Timer1_Conf (unsigned int Time);
void Scan_Key(void);

interrupt void gpio16_isr(void);
interrupt void Timer0_isr(void);
interrupt void Timer1_isr(void);

void main(void)
{

DeviceInit(); // Device Life support & GPIO mux settings
Timer0_Ctrl();

 

EALLOW;

 // GPIO-16 - PIN FUNCTION = --Spare--
GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 0; // 0=GPIO, 1=SPISIMO-A, 2=Resv, 3=TZ2
GpioCtrlRegs.GPADIR.bit.GPIO16 = 0; // 1=OUTput, 0=INput
  GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 16;

 // GPIO-17 - PIN FUNCTION = --Spare--
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0; // 0=GPIO, 1=SPISOMI-A, 2=Resv, 3=TZ3
GpioCtrlRegs.GPADIR.bit.GPIO17 = 1; // 1=OUTput, 0=INput
GpioDataRegs.GPADAT.bit.GPIO17 = 0;
//--------------------------------------------------------------------------------------
// GPIO-18 - PIN FUNCTION = --Spare--
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0; // 0=GPIO, 1=SPICLK-A, 2=SCITX-A, 3=XCLKOUT
GpioCtrlRegs.GPADIR.bit.GPIO18 = 1; // 1=OUTput, 0=INput
GpioDataRegs.GPADAT.bit.GPIO18 = 0;
 
//--------------------------------------------------------------------------------------
// GPIO-19 - PIN FUNCTION = --Spare--
GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0; // 0=GPIO, 1=SPISTE-A, 2=SCIRX-A, 3=ECAP1
GpioCtrlRegs.GPADIR.bit.GPIO19 = 1; // 1=OUTput, 0=INput
GpioDataRegs.GPADAT.bit.GPIO19 = 0;
 

// GPIO-32 - PIN FUNCTION = --Spare--
GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0; // 0=GPIO, 1=I2C-SDA, 2=SYNCI, 3=ADCSOCA
GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1; // 1=OUTput, 0=INput
GpioDataRegs.GPBDAT.bit.GPIO32 = 0;


PieVectTable.TINT0 = &Timer0_isr;
PieVectTable.XINT1 = &gpio16_isr;
 PieVectTable.TINT1 = &Timer1_isr;

PieCtrlRegs.PIEIER1.bit.INTx4 = 1; //External interrupt 1
PieCtrlRegs.PIEIER1.bit.INTx7 = 1; //Timer 0 interrupt

  IER |= M_INT1; // Enable CPU Interrupt 1
IER |= M_INT13;
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM

EDIS; 

XIntruptRegs.XINT1CR.bit.POLARITY = 1; //00 falling Edge H-L
                                                                           //01 rising edge L-H
                                                                            //10 falling edge H-L
    XIntruptRegs.XINT1CR.bit.ENABLE = 1;

interrupt void gpio16_isr (void)
{
//Stop timer 1
CpuTimer1Regs.TCR.bit.TSS = 1;

CpuTimer0Regs.TCR.bit.TSS = 0;

PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}

interrupt void Timer0_isr(void)
{
CpuTimer0Regs.TCR.bit.TSS = 1;
CpuTimer0Regs.TCR.bit.TIF = 1;

PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

Scan_Key();

return;
}

interrupt void Timer1_isr(void)
{
CpuTimer1Regs.TCR.bit.TSS = 0;
CpuTimer1Regs.TCR.bit.TIF = 1;
GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1;
return;
}

void Timer0_Ctrl(void)
{
CpuTimer0Regs.TPR.bit.TDDR = 0x60;
CpuTimer0Regs.TPRH.bit.TDDRH = 0xea;

CpuTimer0Regs.PRD.all = 30;

CpuTimer0Regs.TCR.bit.TIE = 1; //Enable interrupt
CpuTimer0Regs.TCR.bit.TRB = 1; //load period and perscaler

CpuTimer0Regs.TCR.bit.TSS = 1; //Stop timer
}

void Timer1_Conf (unsigned int Time)
{
CpuTimer1Regs.TPR.bit.TDDR = 0x60;
CpuTimer1Regs.TPRH.bit.TDDRH = 0xea;

CpuTimer1Regs.PRD.all = Time;

CpuTimer1Regs.TCR.bit.TIE = 1;
CpuTimer1Regs.TCR.bit.TRB = 1;

CpuTimer1Regs.TCR.bit.TSS = 0;
}

void Scan_Key()
{
//scan GPIO17
GpioDataRegs.GPADAT.bit.GPIO17 = 1;

 if (GpioDataRegs.GPADAT.bit.GPIO16 == 1)
{
GpioDataRegs.GPADAT.bit.GPIO17 = 0;
GpioDataRegs.GPBSET.bit.GPIO34 = 1;
}
else
{
GpioDataRegs.GPADAT.bit.GPIO17 = 0;
//Scan GPIO18
GpioDataRegs.GPADAT.bit.GPIO18 = 1;
}
 if (GpioDataRegs.GPADAT.bit.GPIO16 == 1)
{
GpioDataRegs.GPADAT.bit.GPIO18 = 0;
GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;
}
else
{
GpioDataRegs.GPADAT.bit.GPIO18 = 0;
//Scan GPIO32
GpioDataRegs.GPADAT.bit.GPIO19 = 1;
}

 if (GpioDataRegs.GPADAT.bit.GPIO16 == 1)
{
GpioDataRegs.GPADAT.bit.GPIO19 = 0;
Timer1_Conf(100);
}
else
{
GpioDataRegs.GPADAT.bit.GPIO19 = 0;
//Scan GPIO32
GpioDataRegs.GPBDAT.bit.GPIO32 = 1;
}
 if (GpioDataRegs.GPADAT.bit.GPIO16 == 1)
{
GpioDataRegs.GPBDAT.bit.GPIO32 = 0;
Timer1_Conf(600);
}
else
GpioDataRegs.GPBDAT.bit.GPIO32 = 0;
}

The code scan only one key the 1st one in the Scan_Key()  only key code is executed

what the problem is?