diff --git a/main.c b/main.c index d6a2b7e..2183dfd 100644 --- a/main.c +++ b/main.c @@ -5,6 +5,7 @@ #include "ascii.h" #include "timer.h" #include "i2c.h" +#include "pin.h" #include "stm32f042x6.h" #include "hardwareDescription.h" @@ -54,15 +55,12 @@ void risingEdgeInterruptPinA1() } #endif -void TIM2_IRQHandler(void) -{ - if(TIM2->SR & TIM_SR_UIF) { - - // clear flag - //TIM2->SR &= ~TIM_SR_UIF; - TIM2-> SR = 0; - - //pinWrite(pinB3,1); +void TIM2_IRQHandler(){ + /* Check what type of event occurred */ + if (TIM2->SR & TIM_SR_UIF) + { + /* Clear the interrupt even flag. CPU will only respond to new flags thereafter */ + TIM2->SR &= ~(TIM_SR_UIF); pinToggle(pinB3); } } @@ -70,6 +68,7 @@ void TIM2_IRQHandler(void) void LEDtoggleOnTimer2underflow() { + /* //timerInitCounter(timer_2, 0xFFFF, 0, upCounting); // reset timer 2 periperal @@ -101,7 +100,7 @@ void LEDtoggleOnTimer2underflow() TIM2->SR = 0; //NVIC_SetVector(TIM2_IRQn, (uint32_t)&TIM2_IRQHandler); - NVIC_SetPriority(TIM2_IRQn,0); + NVIC_SetPriority(TIM2_IRQn,3); NVIC_EnableIRQ(TIM2_IRQn); // timer enable @@ -111,13 +110,44 @@ void LEDtoggleOnTimer2underflow() while(1) { - /* + if(TIM2->CNT > 0xFFFF) { + pinWrite(pinB3,1); + } else { + pinWrite(pinB3,0); + } + if(led_on){ pinWrite(pinB3,1); } else{ pinWrite(pinB3,0); } - */ + + } + */ + // example based on + // https://alsaibie.github.io/me319/prelabsextra/lab4extra/ + /* Enable Timer 2 peripheral */ + RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; + /* Default APB1 speed is 16MHz. Scale Timer 2 to 20kHz */ + //TIM2->PSC = (uint32_t)(16E6 / 20E3) - 1; + TIM2->PSC = (8E6 / 20E3) - 1 ; + /* Disable Timer*/ + TIM2->CR1 = 0; + /* Reinitialize counter and update registers */ + TIM2->EGR = TIM_EGR_UG; + /* 1000 Counts at 20kHz => 20Hz IRQ */ + //TIM2->ARR = 1000 - 1; + TIM2->ARR = 10000-1; + /* Enable hardware interrupts */ + TIM2->DIER |= TIM_DIER_UIE; + /* Start Timer */ + TIM2->CR1 |= TIM_CR1_CEN; + + NVIC_SetPriority(TIM2_IRQn, 2); + NVIC_EnableIRQ(TIM2_IRQn); + + while(1) + { } }