Skip to content

Instantly share code, notes, and snippets.

@Ananthusubramanian
Last active May 4, 2019 13:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Ananthusubramanian/9864024893e6922910b76e06e22128d8 to your computer and use it in GitHub Desktop.
Save Ananthusubramanian/9864024893e6922910b76e06e22128d8 to your computer and use it in GitHub Desktop.
Embedded labsheet 10
// LaunchPad built-in hardware
// SW1 left switch is negative logic PF4 on the Launchpad
// SW2 right switch is negative logic PF0 on the Launchpad
// red LED connected to PF1 on the Launchpad
// blue LED connected to PF2 on the Launchpad
// green LED connected to PF3 on the Launchpad
// 1. Pre-processor Directives Section
// Constant declarations to access port registers using
// symbolic names instead of addresses
// TExaS.o is the object code for the real-board grader
#include "tm4c123gh6pm.h"
/*Actually below registers are referred in the header file
#define GPIO_PORTF_DATA_R (*((volatile unsigned long *)0x400253FC))
#define GPIO_PORTF_DIR_R (*((volatile unsigned long *)0x40025400))
#define GPIO_PORTF_AFSEL_R (*((volatile unsigned long *)0x40025420))
#define GPIO_PORTF_PUR_R (*((volatile unsigned long *)0x40025510))
#define GPIO_PORTF_DEN_R (*((volatile unsigned long *)0x4002551C))
#define GPIO_PORTF_LOCK_R (*((volatile unsigned long *)0x40025520))
#define GPIO_PORTF_CR_R (*((volatile unsigned long *)0x40025524))
#define GPIO_PORTF_AMSEL_R (*((volatile unsigned long *)0x40025528))
#define GPIO_PORTF_PCTL_R (*((volatile unsigned long *)0x4002552C))
#define SYSCTL_RCGC2_R (*((volatile unsigned long *)0x400FE108))
*/
// 2. Declarations Section
// Global Variables
unsigned long SW1; // input from PF4,PF0
unsigned long Out; // outputs to PF3,PF2,PF1 (multicolor LED)
// Function Prototypes
void PortE_Init(void);
void Delay(void);
// 3. Subroutines Section
// MAIN: Mandatory for a C Program to be executable
int main(void){
PortE_Init(); // Call initialization of port PF4, PF3, PF2, PF1, PF0
while(1){
SW1 = GPIO_PORTE_DATA_R&0x01; // read PE0 into SW1
if((SW1)){ // button1 is pressed
GPIO_PORTE_DATA_R=~(GPIO_PORTE_DATA_R);
Delay();
GPIO_PORTE_DATA_R=~(GPIO_PORTE_DATA_R);
Delay();
}
else{
GPIO_PORTE_DATA_R = 0x02; // LED is red
}
}
}
// Subroutine to initialize port F pins for input and output
// PF4 and PF0 are input SW1 and SW2 respectively
// PF3,PF2,PF1 are outputs to the LED
// Inputs: None
// Outputs: None
// Notes: These five pins are connected to hardware on the LaunchPad
void PortE_Init(void){ volatile unsigned long d;
SYSCTL_RCGC2_R |= 0x00000010; // 1) E clock
d = SYSCTL_RCGC2_R; //Dummy instruction to wait for clock to stabilize
GPIO_PORTE_CR_R |= 0x03; // allow changes to PE1-0
GPIO_PORTE_AMSEL_R &=~(0x03); // 3) disable analog function
GPIO_PORTE_PCTL_R &=~(0x03); // 4) GPIO clear bit PCTL
GPIO_PORTE_DIR_R |= 0x02; // 5) PE0 input, PE1 output
GPIO_PORTE_AFSEL_R = 0x00; // 6) no alternate function
GPIO_PORTE_DEN_R |= 0x03; // 7) enable digital pins PE1-PE0
}
void Delay(void){
unsigned long volatile time;
time = 1000000; // counter value for delay
while(time){
time--;
}
}
// Color LED(s) PortF
// dark --- 0
// red R-- 0x02
// blue --B 0x04
// green -G- 0x08
// yellow RG- 0x0A
// sky blue -GB 0x0C
// white RGB 0x0E
// pink R-B 0x06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment