Part Number: TMS320F28069
I tried to interface the TMS320F28069 with 4x4 matrix keypad, i was able to detect columns but not rows, so when I press some key in the keypad it detects random one from that column. I checked the voltage with a multi-meter across column pin it is reaching 0 from 3.3 when pressed and then I make row pin high to detect high voltage from zero at that column, but the high signal is not generating to detect row. Please look into the code and ask for anything you didn't understand. Please help to solve the issue.
#include "DSP28x_Project.h"
void update(unsigned char);
unsigned char val = 0;
/*extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;
extern Uint16 RamfuncsLoadSize;*/
void main(void) {
// memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (Uint32) &RamfuncsLoadSize);
// Initialize PLL, Watchdog, enable peripheral clocks
InitSysCtrl();
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO2 = 1; //rows as output
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO3 = 1;
GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO4 = 1;
GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO5 = 1;
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO6 = 0; //columns as input
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO7 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO8 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO9 = 0;
GpioCtrlRegs.GPAQSEL1.all = 0x0000; // GPIO0-GPIO15 Synch to SYSCLKOUT
GpioCtrlRegs.GPAPUD.all = 0x003C; // Pullup's enabled GPIO0-GPIO31
EDIS;
DINT; // disable interrupts
// Initialize PIE control registers
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
// Initialize PIE vector table to default ISR
InitPieVectTable();
// InitFlash();
while (1)
{
GpioDataRegs.GPACLEAR.bit.GPIO2 = 1;
GpioDataRegs.GPACLEAR.bit.GPIO3 = 1;
GpioDataRegs.GPACLEAR.bit.GPIO4 = 1;
GpioDataRegs.GPACLEAR.bit.GPIO5 = 1;
if (GpioDataRegs.GPADAT.bit.GPIO6 == 0){
GpioDataRegs.GPASET.bit.GPIO2 == 1;
if (GpioDataRegs.GPADAT.bit.GPIO6 == 1)
update('1');
else {
GpioDataRegs.GPASET.bit.GPIO3 == 1;
if (GpioDataRegs.GPADAT.bit.GPIO6 == 1)
update('4');
else {
GpioDataRegs.GPASET.bit.GPIO4 == 1;
if (GpioDataRegs.GPADAT.bit.GPIO6 == 1)
update('7');
else {
GpioDataRegs.GPASET.bit.GPIO5 == 1;
if (GpioDataRegs.GPADAT.bit.GPIO6 == 1)
update('*');
}
}
}
}
if (GpioDataRegs.GPADAT.bit.GPIO7 == 0){
GpioDataRegs.GPASET.bit.GPIO2 == 1;
if (GpioDataRegs.GPADAT.bit.GPIO7 == 1)
update('2');
else {
GpioDataRegs.GPASET.bit.GPIO3 == 1;
if (GpioDataRegs.GPADAT.bit.GPIO7 == 1)
update('5');
else {
GpioDataRegs.GPASET.bit.GPIO4 == 1;
if (GpioDataRegs.GPADAT.bit.GPIO7 == 1)
update('8');
else {
GpioDataRegs.GPASET.bit.GPIO5 == 1;
if (GpioDataRegs.GPADAT.bit.GPIO7 == 1)
update('0');
}
}
}
}
if (GpioDataRegs.GPADAT.bit.GPIO8 == 0){
GpioDataRegs.GPASET.bit.GPIO2 == 1;
if (GpioDataRegs.GPADAT.bit.GPIO8 == 1)
update('3');
else {
GpioDataRegs.GPASET.bit.GPIO3 == 1;
if (GpioDataRegs.GPADAT.bit.GPIO8 == 1)
update('6');
else {
GpioDataRegs.GPASET.bit.GPIO4 == 1;
if (GpioDataRegs.GPADAT.bit.GPIO8 == 1)
update('9');
else {
GpioDataRegs.GPASET.bit.GPIO5 == 1;
if (GpioDataRegs.GPADAT.bit.GPIO8 == 1)
update('#');
}
}
}
}
if (GpioDataRegs.GPADAT.bit.GPIO9 == 0){
GpioDataRegs.GPASET.bit.GPIO2 == 1;
if (GpioDataRegs.GPADAT.bit.GPIO9 == 1)
update('A');
else {
GpioDataRegs.GPASET.bit.GPIO3 == 1;
if (GpioDataRegs.GPADAT.bit.GPIO9 == 1)
update('B');
else {
GpioDataRegs.GPASET.bit.GPIO4 == 1;
if (GpioDataRegs.GPADAT.bit.GPIO9 == 1)
update('C');
else {
GpioDataRegs.GPASET.bit.GPIO5 == 1;
if (GpioDataRegs.GPADAT.bit.GPIO9 == 1)
update('D');
}
}
}
}
}
}
void update(unsigned char data)
{
val = data;
}