Reference : SM Training Academy, Microcontrollers Lab

LED Blink

#include "TM4C123GH6PM.h"

void Delay();

int main(void){
		
	SYSCTL->RCGCGPIO = (1<<5); 	// ENABLE CLOCK FOR GPIO - PORT F

	GPIOF->DEN |= ((1<<3)|(1<<2)|(1<<1)); 				// DIGITALIZING PF all colours - RBG
	GPIOF->DIR |= ((1<<3)|(1<<2)|(1<<1)); 				// SET AS OUTPUT
								//Green  Blue   Red
	
	while(1){
		GPIOF->DATA|=(1<<3); // G-B-R-SW2
								
		Delay();					

		GPIOF->DATA&=~(1<<3);
		Delay();					

	}
		
}

void Delay(){
	for(unsigned int i=0; i<1e5; i++);
}

Single Push Button w LED - PF4 Switch

#include "TM4C123GH6PM.h"

// Pin Configs
// SW1 = PF4
// LED = PF3 (Green)

int main(void){
	SYSCTL->RCGCGPIO |= (1<<5); // ENABLE CLOCK FOR GPIO - PORT F

	GPIOF->DEN |= ((1<<3)|(1<<4)); // Digitalised the PF3, PF4

	GPIOF->DIR |= (1<<3);       // Setting Pin 3 for LED output - Green
	GPIOF->DIR &= (~(1<<4));    // Setting Pin 4 for SW1 as Input
	
	GPIOF->PUR |= (1<<4);       // Enable internal Pull-Up resistor for fourth pin (SW1)
	
	
	while(1){
		// pullup -> button pressed = 0

		int sw_1 = (GPIOF->DATA & (1<<4))>>4;
		
		if (sw_1!=0){                // Not Pressed -> Green LED OFF
			GPIOF->DATA &= ~(1<<3);
		}

		else if(sw_1==0){         // Pressed -> Green LED ON
			GPIOF->DATA |= (1<<3);
		}

	}
	
}

Two Push Button w LED - PF4 & PF0 Switch

#include "TM4C123GH6PM.h"

// Pin Configs
// SW1 = PF4
// SW2 = PF0 // special pin so handle the LOCK
// LED = PF3

int main(void){
	SYSCTL->RCGCGPIO |= (1<<5); // ENABLE CLOCK FOR GPIO - PORT F
	GPIOF->LOCK = 0x4C4F434B;   //Key Value
	GPIOF->CR |= (1<<0);        // PF0 unlock

	GPIOF->DEN |= ((1<<3)|(1<<4)|(1<<0)); // Digitalised the PF3, PF4, PF0
	GPIOF->DIR |= (1<<3);                 // Setting Pin 3 for LED output - Green
	GPIOF->DIR &= ( ~((1<<4)|(1<<0)) );   // Setting Pin-4 for SW1, and Pin-0 for SW2 as Input
	GPIOF->PUR |= ((1<<4)|(1<<0));        // Enable internal Pull-Up resistor for 4th pin (SW1) and 0th pin (SW2)
	
	int sw_1,sw_2;
	while(1){
		// pullup -> button pressed = 0

		sw_1 = (GPIOF->DATA & (1<<4))>>4;
		sw_2 = (GPIOF->DATA&(1<<0))>>0;

		if (sw_1==0){                // SW1 Pressed -> Green LED ON
			GPIOF->DATA |= (1<<3);
		}
		
		else if(sw_2==0){            // SW2 Pressed -> Green LED OFF
			GPIOF->DATA &= ~(1<<3);		
		}

	}
	
}

Single ADC w LED

#include "TM4C123GH6PM.h"

// Pin Configs
// ADC1 : PE1 : AIN2
// LED : PF (inbuilt)

int main(){

	SYSCTL->RCGCADC |= (1<<1);           // Enabling ADC1
	SYSCTL->RCGCGPIO |= ((1<<4)|(1<<5)); // Port E , Port F 
	
	GPIOF->DEN |= ((1<<3)|(1<<2)|(1<<1)); // Port F LED - GBR
	GPIOF->DIR |= ((1<<3)|(1<<2)|(1<<1)); // Port F LED Output

	GPIOE->AFSEL |= (1<<1);
	GPIOE->DEN &= ~(1<<1);
	GPIOE->AMSEL |= (1<<1);
	GPIOE->DIR &= ~(1<<1); 
	
	//Sample Sequencer
	ADC1->ACTSS &= ~(1<<3); // disabling SS3
	ADC1->EMUX &= ~0xF000;  // software trigger for conversion
	ADC1->SSMUX3 = 2;       // AIN2
	ADC1->SSCTL3 = 0x6;     // 0110	
	ADC1->ACTSS |= (1<<3);  // Enabling SS3

	unsigned int adcvalue;
	while(1){

		ADC1->PSSI |= (1<<3);     // Initiate conversion SS3
		while((ADC1->RIS&8)==0);  // Waiting for sample conversion 
		adcvalue = ADC1->SSFIFO3; // ADC1 Value
		ADC1->ISC |= 8;           // clear flag bit

		if(adcvalue>=2048)
			GPIOF->DATA = 0x08; 
		else if(adcvalue<2048)
			GPIOF->DATA=0x00;
	}
}

Two ADC w LED

#include<TM4C123GH6PM.h>

int main(void) {

	SYSCTL->RCGCGPIO |= 1 << 4;
	SYSCTL->RCGCADC |= (1 << 1 | 1 << 0);

	GPIOE->DEN &= ~(1 << 3 | 1 << 2);
	GPIOE->AFSEL |= (1 << 3 | 1 << 2);
	GPIOE->AMSEL |= (1 << 3 | 1 << 2);

	ADC0->ACTSS &= ~(1 << 3);
	ADC0->EMUX &= ~0xF000;
	ADC0->SSMUX3 = 0;
	ADC0->SSCTL3 |= ((1 << 1) | (1 << 2));
	ADC0->ACTSS |= (1 << 3);

	ADC1->ACTSS &= ~(1 << 3);
	ADC1->EMUX &= ~0xF000;
	ADC1->SSMUX3 = 1;
	ADC1->SSCTL3 |= ((1 << 1) | (1 << 2));
	ADC1->ACTSS |= (1 << 3);

	SYSCTL->RCGCGPIO |= (1 << 5);
	GPIOF->DIR = 0x0E;
	GPIOF->DEN = 0x0E;

	unsigned int adcval1;
	unsigned int adcval2;

	while (1) {
		ADC0->PSSI |= (1 << 3);
		while ((ADC0->RIS & 8) == 0);
		adcval1 = ADC0->SSFIFO3;
		ADC0->ISC = 8;

		ADC1->PSSI |= (1 << 3);
		while ((ADC1->RIS & 8) == 0);
		adcval2 = ADC1->SSFIFO3;
		ADC1->ISC = 8;

		if (adcval1 >= 2048)
			GPIOF->DATA = 0x08;
		else
			GPIOF->DATA &= ~(0x08);

		if (adcval2 >= 2048)
			GPIOF->DATA = 0x04;
		else
			GPIOF->DATA &= ~(0x04);
	}
}

External Interrupt

#include "TM4C123GH6PM.h"

void delay(){
				for(int i=0; i<1e5; i++);
}

void GPIOF_Handler(){
	
		if(((GPIOF->MIS&1<<4)>>4)==1){ // Interrupt from PF4
			GPIOF->DATA ^= (1<<3);
			GPIOF->ICR |= (1<<4);
		}
		if(((GPIOF->MIS&1<<0)>>0)==1){ // Interrupt from PF0
			GPIOF->DATA ^= (1<<2);
			GPIOF->ICR |= (1<<0);
		}		
		
}

int main(){

		// PF0 , PF4 as Ext. Interrupts
		// PF2-> Blue, PF3-> Green

		SYSCTL->RCGCGPIO |= (1<<5);

		GPIOF->LOCK = 0x4C4F434B;
		GPIOF->CR |= 1<<0;
		
		GPIOF->DEN |= 1<<4|1<<3|1<<2|1<<0;
		GPIOF->DIR |= 1<<3|1<<2;
		GPIOF->DIR &= ~(1<<4|1<<0);
		GPIOF->PUR |= 1<<4|1<<0;
	  
		GPIOF->IS &= ~(1<<4|1<<0);  // Edge Trigger=0 ; Level Trigger =1
		GPIOF->IBE &= ~(1<<4|1<<0); // Both Edge =1 ; Single edge = 0
		GPIOF->IEV &= ~(1<<4|1<<0); // FallingEdge /LowLevel=0 ; RisingEdge/HighLevel=1
		GPIOF->IM |= (1<<4|1<<0);   // Sending Interrupt to NVIC
		GPIOF->ICR |= (1<<4|1<<0);  // Clear MIS & RIS
		
		//Table 2-9. Interrupts
		// GPIOF -> Interrupt Number 30(IN30) ; ISER array size=8 -> each of 32 reg  
		// 																			So IN30 falls in index 0
		NVIC->ISER[0] |= 1<<30;	
		NVIC->IP[30] |= 1<<6|1<<5;  // Interrupt Priority of 30 = 011 (3)
		
		while(1){
				// Let the Loop do nothing and wait for us to interrupt
		}
		
		return 0;
}


❗NOTE

When dealing with Clock, comment the following line in system_TM4C123.c file