Page 274 - Programming Microcontrollers in C
P. 274
Timer Operations 259
OC1M.OC1M7=ON; /* sent OC1 tout to PA7 */
OC1M.OC1M5=ON; /* couple OC1 to OC3 */
TMSK1.OC3I=ON; /* enable the OC3 interrupt */
TMSK1.IC1I=ON; /* enable the IC1 interrupt */
OC1D.OC1D5=ON; /* turn on OC3 when OC1 occurs */
TCTL1.OL3=ON; /* toggle OC3 when OC3 occurs */
PACTL.DDRA7=ON; /* make OC1 an output to PA7 */
TOC1=TCNT+PWM_period; /* set OC1 to the period */
TOC3=TOC1+time_on; /* set OC3 time on */
cli(); /* enable the system interrupts */
FOREVER
{
/* put application code here */
}
}
@port void IC1_Isr( void)
{
time1=TIC1;
TFLG1=IC1F; /* reset IC1 interrupt flag */
measured_period=TIC1-time1;
TOC2=TCNT+MS3_DEBOUNCE; /* 3 ms debounce time */
TMSK1.IC1I=OFF; /* disable IC1 interrupt */
TMSK1.OC2I=ON; /* enable OC2 interrupt */
}
@port void OC2_Isr(void)
{
TFLG1=IC1F|OC2F; /*reset IC1 & OC2 interrupt flag */
TMSK1.OC2I=OFF; /* disable OC2 interrupt */
TMSK1.IC1I=ON; /* enable IC1 interrupt */
}
@port void OC3_Isr( void)
{
TFLG1=OC1F; /* reset OC1 interrupt flag */
TOC1+=PWM_period;
OC1D.OC1D7 ^=ON;