Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

PWM

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 2

// Timer 1 base address

#define TM_BASE 0x40031000


// Peripheral clock enabling for timer and GPIO
#define RCGC_TIMER_R (*( volatile unsigned long *)0x400FE604)
#define RCGC2_GPIO_R (*( volatile unsigned long *)0x400FE108)
#define CLOCK_GPIOF 0x00000020 // Port F clock co
#define SYS_CLOCK_FREQUENCY 16000000
// General purpose timer register definitions
#define GPTM_CONFIG_R *( volatile long *)( TM_BASE + 0x000 )
#define GPTM_TA_MODE_R *( volatile long *)( TM_BASE + 0x004 )
#define GPTM_CONTROL_R *( volatile long *)( TM_BASE + 0x00C )
#define GPTM_INT_MASK_R *( volatile long *)( TM_BASE + 0x018 )
#define GPTM_INT_CLEAR_R *( volatile long *)( TM_BASE + 0x024 )
#define GPTM_TA_IL_R *( volatile long *)( TM_BASE + 0x028 )
#define GPTM_TA_MATCH_R *( volatile long *)( TM_BASE + 0x030 )
// GPIO PF2 alternate function configuration
#define GPIO_PORTF_AFSEL_R *(( volatile unsigned long *)0x40025420 )
#define GPIO_PORTF_PCTL_R *(( volatile unsigned long *)0x4002552C )
#define GPIO_PORTF_DEN_R *(( volatile unsigned long *)0x4002551C )
// Timer config and mode bit field definitions
#define TIM_16_BIT_CONFIG 0x00000004 // 16- b
#define TIM_PERIODIC_MODE 0x00000002 // Perio
#define TIM_A_ENABLE 0x00000001 // Timer
#define TIM_PWM_MODE 0x0000000A // Time
#define TIM_CAPTURE_MODE 0x00000004 // Time
// Timer1 A reload value for 1 kHz PWM frequency
#define TIM_A_INTERVAL 16000 // Timer rel
// 1 kHz PWM
// clock fre
// 16 ,000 ,
// = 1 kHz
#define TIM_A_MATCH 15 // Timer mat
// duty cycl
// Timer and GPIO intialization and configuration
void Timer1A_Init ( void )
{
// Enable the clock for port F and Timer1
RCGC2_GPIO_R |= CLOCK_GPIOF ;
RCGC_TIMER_R |= 0x02 ;
// Configure PortF pin 2 as Timer1 A output
GPIO_PORTF_AFSEL_R |= 0x00000004 ;
GPIO_PORTF_PCTL_R |= 0x00000700 ; // Configure as
GPIO_PORTF_DEN_R |= 0x00000004 ;
// Enable the clock for Timer 1
GPTM_CONTROL_R &= ~( TIM_A_ENABLE ); // disable timer 1 A
// Timer1 A configured as 16- bit timer
GPTM_CONFIG_R |= TIM_16_BIT_CONFIG ;
// Timer1 A in periodic timer , edge count and PWM mode
GPTM_TA_MODE_R |= TIM_PWM_MODE ;
GPTM_TA_MODE_R &= ~( TIM_CAPTURE_MODE );
// Make PWM frequency 1 kHz using reload value of 16000
GPTM_TA_IL_R = TIM_A_INTERVAL ;
// Configure PWM duty cycle value ( should be less than 16000
GPTM_TA_MATCH_R = TIM_A_MATCH ;
// Enable timer1 A
GPTM_CONTROL_R |= TIM_A_ENABLE ;
}
// Application main function
int main ( void ){
Timer1A_Init (); // Initialize the t
while (1) {
// One of the tasks is responsible to change PWM duty cycle
// by updating GPTM_TA_MATCH_R register
}
}

You might also like