0% found this document useful (0 votes)
198 views

MSP430 Clock Timers

This document discusses the MSP430 clock system and Timer A module. It provides details on the different clock sources for the MSP430, including the low-frequency oscillator, high-frequency oscillator, and internal digitally controlled oscillator. It also describes the different clock signals and registers related to clock configuration. Additionally, it covers the features and operation modes of Timer A, including examples of using Timer A in continuous and up/down modes to generate interrupts and toggle output pins at different rates.

Uploaded by

vaishu_2403
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
198 views

MSP430 Clock Timers

This document discusses the MSP430 clock system and Timer A module. It provides details on the different clock sources for the MSP430, including the low-frequency oscillator, high-frequency oscillator, and internal digitally controlled oscillator. It also describes the different clock signals and registers related to clock configuration. Additionally, it covers the features and operation modes of Timer A, including examples of using Timer A in continuous and up/down modes to generate interrupts and toggle output pins at different rates.

Uploaded by

vaishu_2403
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 22

MSP430 Clock System and Timer

TA: Yin Wang


CSU610 SWARM, Spring 2007

CCIS, Northeastern University

Outline
MSP430 basic clock module MSP430 Timer A Timer A examples

MSP430 Basic Clock Module


Clock Sources:
LFXT1CLK : Low-frequency/high-frequency oscillator XT2CLK : Optional high-frequency oscillator DCOCLK : Internal digitally controlled oscillator (DCO)

Tmote Sky Configuration:


LFXT1CLK : 32.768KHz crystal XT2CLK : N/A DCOCLK : Built-in DCO with configurable range from <100KHz to 4MHz

MSP430 Basic Clock Module


Clock Signals:
ACLK: Auxiliary clock. The signal is sourced from LFXT1CLK with a divider of 1, 2, 4, or 8. (The calibration program for the serial link sets the divider to 4, but after the calibration it can be changed to any other values.) ACLK can be used as the clock signal for Timer A and Timer B. MCLK: Master clock. The signal can be sourced from LFXT1CLK, XT2CLK (if available), or DCOCLK with a divider of 1, 2, 4, or 8. MCLK is used by the CPU and system. SMCLK: Sub-main clock. The signal is sourced from either XT2CLK (if available), or DCOCLK with a divider of 1, 2, 4, or 8. SMCLK can be used as the clock signal for Timer A and Timer B.

Clock System Registers

MSP430 Timer_A
A 16-bit counter 4 modes of operation Stop, Up, Continuous, Up/Down 3 capture/compare registers (CCRx) 2 interrupt vectors TACCR0 and TAIV

Modes of Operation: Up Mode

Modes of Operation: Continuous Mode

Modes of Operation: Up/Down Mode

Timer_A Interrupt Vectors


TACCR0 interrupt vector for CCIFG of CCR0 TAIV interrupt vector for TAIFG and CCIFGs of CCR1,CCR2
CCIE0 CCIFG0

CCR0

TACCR0 Interrupt Vector

CCIE1

CCR1

CCIFG1 TAIV CCIE2

CCR2
TAR Overflow

CCIFG2 TAIE TAIFG

TACCR0 Interrupt Vector

Timer_A Registers
TACTL, Timer_A Control Register (PART 1)

TACTL, Timer_A Control Register (PART 2)

TACCTLx, Capture/Compare Control Register

TAIV, Timer_A Interrupt Vector Register

Example 1
Continuous Mode Output pin P6.0 with toggle rate = 32768/(2*50) = 328Hz
#include "include/include.h" #include "include/hardware.h" void main ( void ) { WDTCTL = WDTPW + WDTHOLD; P6DIR |= 0x01; CCTL0 = CCIE; CCR0 = 50; TACTL = TASSEL_1 + MC_2; eint(); LPM0; }

// Stop WDT // P6.0 output // CCR0 interrupt enabled // ACLK, contmode // Enable the global interrupt // Enter low power mode

OR

// Timer_A TACCR0 interrupt vector handler interrupt (TIMERA0_VECTOR) TimerA_procedure( void ){ P6OUT ^= 0x01; // Toggle P6.0 CCR0 += 50; // Add offset to CCR0 }

_BIS_SR(LPM0_bits + GIE);

Example 2
Up Mode Output pin P6.0 with toggle rate = 32768/(2*50) = 328Hz
#include "include/include.h" #include "include/hardware.h" void main ( void ) { WDTCTL = WDTPW + WDTHOLD; P6DIR |= 0x01; CCTL0 = CCIE; CCR0 = 50-1; TACTL = TASSEL_1 + MC_1; _BIS_SR(LPM0_bits + GIE); }

// Stop WDT // P6.0 output // CCR0 interrupt enabled // ACLK, upmode // Enable the global interrupt and enter LPM0

// Timer_A TACCR0 interrupt vector handler interrupt (TIMERA0_VECTOR) TimerA_procedure ( void ){ P6OUT ^= 0x01; // Toggle P6.0 }

Example 3
Continuous Mode Output pin P6.0 with toggle rate = 32768/(2*5) Output pin P6.1 with toggle rate = 32768/(2*50) Output pin P6.2 with toggle rate = 32768/(2*500) = 3277Hz = 328Hz = 32.79Hz

Output pin P6.3 with toggle rate = 32768/(2*65536) = 0.25Hz


#include "include/include.h" #include "include/hardware.h" void main ( void ) { WDTCTL = WDTPW + WDTHOLD; P6DIR |= 0x0F; CCTL0 = CCIE; CCTL1 = CCIE; CCTL2 = CCIE; CCR0 = 0; CCR1 = 0; CCR2 = 0; TACTL = TASSEL_1 + MC_2+ TAIE; _BIS_SR(LPM0_bits + GIE); }

// Stop WDT // P6.0, P6.1, P6.2 and P6.3 output // CCR0 interrupt enabled // CCR0 interrupt enabled // CCR0 interrupt enabled

// ACLK, contmode, TAIE enabled // Enable the global interrupt and enter LPM0

Example 3, continued
// Timer_A TACCR0 interrupt vector handler interrupt (TIMERA0_VECTOR) TimerA0_procedure ( void ){ P6OUT ^= 0x01; // Toggle P6.0 CCR0 += 5; // Add offset to CCR0 } // Timer_A TAIV interrupt vector handler interrupt (TIMERA1_VECTOR) TimerA1_procedure ( void ){ switch( TAIV ) { case 2: P6OUT ^= 0x02; // Toggle P6.1 CCR1 += 50; // Add offset to CCR1 break; case 4: P6OUT ^= 0x04; CCR2 += 500; break; case 10: P6OUT ^= 0x08; break; } } // Toggle P6.2 // Add offset to CCR2

// Toggle P6.3

You might also like