Group05_Lab06_Task1/Lab6_Task1.c

102 lines
2.1 KiB
C

#include <stdint.h>
#include <stdbool.h>
#include "tm4c123gh6pm.h"
#define mask_bits 0x11 //mask bits for user switch
void GPIOF_config(void);
void GPIOF_Int_Config(void);
void main(void)
{
SYSCTL_RCC_R &= ~(1 << 20); //SYSTEM CLOCK SOURCE FOR 16MHz PWM
SYSCTL_RCGC0_R |= 0x00100000; //enable clock for PWM module
SYSCTL_RCGCPWM_R = 0x3; //
GPIOF_config();
GPIOF_Interrupt_config();
GPIO_PORTF_AFSEL_R |= 0x02;
GPIO_PORTF_PCTL_R |= 0x50;
PWM1_2_CTL_R= 0x00000000;
PWM1_2_GENB_R |= 0x80E;
PWM1_2_LOAD_R = 0xA0;
PWM1_2_CMPB_R = 0x50;
PWM1_2_CTL_R |=0x01;
PWM1_ENABLE_R |=(1<<5);
while(1);
}
void GPIOF_config()
{
SYSCTL_RCGC2_R |= 0x20;
GPIO_PORTF_LOCK_R = 0x4C4F434B;
GPIO_PORTF_CR_R = 0x1F;
GPIO_PORTF_DEN_R= 0x1F;
GPIO_PORTF_DIR_R= 0x0E;
GPIO_PORTF_PUR_R = 0x11;
}
void GPIOF_Int_Config()
{
GPIO_PORTF_IM_R &= ~MASK_BITS;
GPIO_PORTF_IS_R &= ~MASK_BITS;
GPIO_PORTF_IEV_R &= ~MASK_BITS;
GPIO_PORTF_IBE_R &= ~MASK_BITS;
NVIC_PRI7_R = (NVIC_PRI7_R & 0xFF1FFFFF) | (2 << 21);
NVIC_EN0_R |= (1 << 30);
GPIO_PORTF_ICR_R = MASK_BITS;
GPIO_PORTF_IM_R |= MASK_BITS;
}
void GPIOF_INT_Handler(void)
{
GPIO_PORTF_IM_R &= ~MASK_BITS;
int i;
if(GPIO_PORTF_RIS_R & 0x01)
{
for(i=0;i<160000;i++){}
if(~(GPIO_PORTF_DATA_R)&0x01)
{
if(PWM1_2_CMPB_R < 155)
{
PWM1_2_CMPB_R += 5;
}
}
}
if(GPIO_PORTF_RIS_R & 0x10)
{
for(i=0;i<160000;i++){}
if(~(GPIO_PORTF_DATA_R)&0x10)
{
if(PWM1_2_CMPB_R > 5)
{
PWM1_2_CMPB_R -= 5;
}
}
}
GPIO_PORTF_ICR_R = MASK_BITS;
GPIO_PORTF_IM_R |= MASK_BITS;
}