// Port D:
#define SYSCTL_RCGC2_R (*((volatile unsigned long *)0x400FE108))
#define GPIO_PORTD_DATA_R (*((volatile unsigned long *)0x400073FC))
#define GPIO_PORTD_DIR_R (*((volatile unsigned long *)0x40007400))
#define GPIO_PORTD_AFSEL_R (*((volatile unsigned long *)0x40007420))
#define GPIO_PORTD_DEN_R (*((volatile unsigned long *)0x4000751C))
#define GPIO_PORTD_AMSEL_R (*((volatile unsigned long *)0x40007528))
#define GPIO_PORTD_PCTL_R (*((volatile unsigned long *)0x4000752C))
// Port E
#define GPIO_PORTE_DATA_R (*((volatile unsigned long *)0x400243FC))
#define GPIO_PORTE_DIR_R (*((volatile unsigned long *)0x40024400))
#define GPIO_PORTE_AFSEL_R (*((volatile unsigned long *)0x40024420))
#define GPIO_PORTE_DEN_R (*((volatile unsigned long *)0x4002451C))
#define GPIO_PORTE_AMSEL_R (*((volatile unsigned long *)0x40024528))
#define GPIO_PORTE_PCTL_R (*((volatile unsigned long *)0x4002452C))
#define GPIO_PORTE_CR_R (*((volatile unsigned long *)0x40024524))
unsigned long in1, in2, in3;
char const output[] = {0x08, 0x02};
char const led[] = {0x02, 0x04, 0x10, 0x20};
int main(void){
unsigned long volatile delay, delay1;
SYSCTL_RCGC2_R |= 0x08; // Port D clock
delay = SYSCTL_RCGC2_R; // wait 3-5 bus cycles
GPIO_PORTD_DIR_R |= 0x0A; // PD3, PD2 output
GPIO_PORTD_DIR_R &= ~0x01; // PD0 input
GPIO_PORTD_AFSEL_R &= ~0x0B; // not alternative
GPIO_PORTD_AMSEL_R &= ~0x0B; // no analog
GPIO_PORTD_PCTL_R &= ~0x0000F0FF; // bits for PD3, PD1, PD0
GPIO_PORTD_DEN_R |= 0x0B; // enable PD3, PD1, PD0
SYSCTL_RCGC2_R |= 0x10; // Port D clock
delay1 = SYSCTL_RCGC2_R; // wait 3-5 bus cycles
GPIO_PORTE_DIR_R |= 0x36; // PD3, PD2 output
GPIO_PORTE_DIR_R &= ~0x09; // PD0 input
GPIO_PORTE_AFSEL_R &= ~0x3F; // not alternative
GPIO_PORTE_AMSEL_R &= ~0x3F; // no analog
GPIO_PORTE_PCTL_R = 0x00000000; // bits for PD3, PD1, PD0
GPIO_PORTE_DEN_R |= 0x3F; // enable PD3, PD1, PD0
while(1){
// Parking spot 1:
in1 = (GPIO_PORTD_DATA_R&0x01); // in 0 if not pressed, 1 if pressed
if(in1 == 0x01){
GPIO_PORTD_DATA_R = output[0];
}else if(in1 == 0x00){
GPIO_PORTD_DATA_R = output[1];
}
in2 = (GPIO_PORTE_DATA_R&0x01); // in 0 if not pressed, 1 if pressed
if(in2 == 0x00){
GPIO_PORTE_DATA_R = led[0];
}else if(in2 == 0x01){
GPIO_PORTE_DATA_R = led[1];
}
in3 = (GPIO_PORTE_DATA_R&0x08); // in 0 if not pressed, 1 if pressed
if(in3 == 0x01){
GPIO_PORTE_DATA_R = led[2];
}else if(in3 == 0x00){
GPIO_PORTE_DATA_R = led[3];
}
}//While loop
}//end of design
I am using Kiel Development kit., When in3 button is pressed it skips this line.
GPIO_PORTE_DATA_R = led[2];