__interrupt void Timer_A (void) { if (TACCR1 <= 40) { i++; if (i > 500) { set_PWM_duty_cycle(TACCR1 + 1); P1IFG = 0x00; i = 0x00; // CCR0 += 50; // Add Offset to CCR0 } } if (TACCR1 == 41) { set_PWM_duty_cycle(0); P1IFG = 0x00; i = 0x00; } }
/** Initializes PWM signal on PE4 in order to control backlight of LCD **/ void PWM_init(void) { SYSCTL->RCGC0 |= (1UL << 20); //SYSCTL->RCGC2 |= (1UL << 4); GPIOE->AFSEL |= (1UL << 4); // Alternate function GPIOE->PCTL |= (0x4 << 16); // Select M0PWM4 SYSCTL->RCC |= (0x0 << 17); // Divide system clock by 2 for PWM (8MHz) // Configure PWM Module 0, Generator 2, Generator A: PWM0->_2_... PWM0->_2_CTL = 0x0; // No global sync PWM0->_2_GENA = 0x8C; // Drive PWM high when counter matches LOAD, drive PWM low when counter matches CMPA PWM0->_2_LOAD = PWM_LOAD; //Set the load to be 399 (400) set_PWM_duty_cycle(100); // Set 100% duty cycle PWM0->_2_CTL = 0x1; // Enable PWM Module 0, Generator 2 PWM0->ENABLE |= (1UL << 4); // Enabled }
int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; // timerA_start(timing, OUTMOD_SET_RESET); // starte PWM INIT_PORTS(); // INIT_ADC(); // init_XT2(); init_PWM_TimerA(); set_PWM_duty_cycle(0); P1OUT |= LED_PWR_ON; P1OUT |= LED2; //_BIS_SR(LPM3_bits); _BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt // while(1) // warte bis sich was tut // { // } // return 0; }
/** Handler for GPIOF pins (push buttons) * Increment/decrement scroll speed * Increment/decrement backlight brightness **/ void GPIOF_Handler(void) { // If Interrupt caused by PF4 if(GPIOF->RIS & (1UL << 4)) { GPIOF->DATA ^= (1UL << 3); // Toggle LED for debugging increment_scroll_delay(); decrement_brightness(); GPIOF->ICR |= (1UL << 4); // Clear Interrupt } // Else if Interrupt caused by PF0 else if (GPIOF->RIS & (1UL << 0)) { GPIOF->DATA ^= (1UL << 3); // Toggle LED for debugging decrement_scroll_delay(); increment_brightness(); GPIOF->ICR |= (1UL << 0); // Clear Interrupt } interrupt_timer(scroll_delay); set_PWM_duty_cycle(duty_cycle); }