Reference : SM Training Academy, Microcontrollers Lab
#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++);
}
#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);
}
}
}
#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);
}
}
}
#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;
}
}
#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);
}
}
#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;
}