#define SYSCTL_RCGC2 (*((volatile unsigned long *)0x400FE108))
//GPIO initialization
#define GPIO_PORTF_DATA (*((volatile unsigned long *)0x400253FC))
#define GPIO_PORTF_DIR (*((volatile unsigned long *)0x40025400))
#define GPIO_PORTF_AFSEL (*((volatile unsigned long *)0x40025420))
#define GPIO_PORTF_DEN (*((volatile unsigned long *)0x4002551C))
#define GPIO_PORTF_PCTL (*((volatile unsigned long *)0x4002552C))
#define GPIO_PORTF_PUR (*((volatile unsigned long *)0x40025510))
#define GPIO_PORTA_DATA (*((volatile unsigned long *)0x400043FC))
#define GPIO_PORTA_DIR (*((volatile unsigned long *)0x40004400))
#define GPIO_PORTA_AFSEL (*((volatile unsigned long *)0x40004420))
#define GPIO_PORTA_DEN (*((volatile unsigned long *)0x4000451C))
#define GPIO_PORTA_PCTL (*((volatile unsigned long *)0x4000452C))
//declare functions
void init_gpio (void);
void wait_for_key (void);
void delay (void);
void initialConditions (void);
void adder (void);//define functions
void init_gpio (void) {
volatile unsigned long delay_clk; // delay for clock, must have 3 sys clock delay
SYSCTL_RCGC2 |= 0x00000023; // clock enable for port A,B,F,
delay_clk = SYSCTL_RCGC2; // must delay for the clock to settle, no-operation
GPIO_PORTF_DIR |= 0x00; // PF4 input, PF0 input, PF1-PF3 output
GPIO_PORTF_AFSEL &= ~0xFF;// disable alt funct on PF0-PF4
GPIO_PORTF_DEN |= 0x1F; // enable digital I/O on PF0-PF4
//GPIO_PORTF_PCTL = (GPIO_PORTF_PCTL & 0xFFF00000) + 0x00000000;
GPIO_PORTF_PCTL &= 0xFFF00000;
GPIO_PORTF_PUR |= 0x11; // enable pull-up on PF4, PF0
//Set port A
GPIO_PORTA_DIR |= 0xFF; // PF set entirely to output
GPIO_PORTA_AFSEL &= ~0x00;// disable alt funct on PA0-PA7
GPIO_PORTA_DEN |= 0xFF; // enable digital I/O on PA0-PA7
//GPIO_PORTA_PCTL = (GPIO_PORTF_PCTL & 0xFFF00000) + 0x00000000;
GPIO_PORTA_PCTL &= 0xFFF00000;
//GPIO_PORTA_PUR |= 0xFF; // enable pull-up on All
}
const char aRRay [15] = {0x10, 0x20, 0x30, 0x40, 0X50, 0X60, 0x70, 0x80, 0X90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0 };
void wait_for_key (void) {
while(GPIO_PORTF_DATA & 0x10);
}
void adder (void) {
int i = 0;
GPIO_PORTA_DATA = 0x00;
while(i <= 15)
{
wait_for_key();
GPIO_PORTA_DATA = aRRay[i];
i++;
delay();
}
}
void delay (void) {
long unsigned i;
for (i = 0; i < 1000000; i++);
}
//main functionc
int main (void) {
init_gpio ();
while (1) {
adder();
}
}