Rev 2 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2 | Rev 3 | ||
|---|---|---|---|
| Line 6... | Line 6... | ||
| 6 | */ |
6 | */ |
| 7 | #include "ch.h" |
7 | #include "ch.h" |
| 8 | #include "hal.h" |
8 | #include "hal.h" |
| 9 | #include "hardware.h" |
9 | #include "hardware.h" |
| 10 | 10 | ||
| - | 11 | uint16_t timerSamples[timerSampleSize]; |
|
| - | 12 | ||
| - | 13 | uint8_t timerInIndex; |
|
| - | 14 | uint8_t timerOutIndex; |
|
| - | 15 | ||
| - | 16 | ||
| - | 17 | ||
| 11 | void TIM1_UP_IRQHandler(void) { |
18 | void TIM1_UP_IRQHandler(void) { |
| 12 | // we have an interrupt here . |
19 | // we have an interrupt here . |
| - | 20 | if (TIM1->SR & TIM_SR_CC1IF) { |
|
| - | 21 | TIM1->SR &= ~TIM_SR_CC1IF; |
|
| - | 22 | timerSamples[timerInIndex++] = TIM1->CCMR1; |
|
| - | 23 | if (timerInIndex == timerSampleSize) { |
|
| - | 24 | timerInIndex = 0; |
|
| - | 25 | } |
|
| 13 | 26 | ||
| 14 | 27 | } |
|
| 15 | 28 | ||
| 16 | } |
29 | } |
| 17 | 30 | ||
| 18 | void initTimer(void) { |
31 | void initTimer(void) { |
| 19 | rccEnableTIM1(FALSE); |
32 | rccEnableTIM1(FALSE); |
| Line 22... | Line 35... | ||
| 22 | CORTEX_PRIORITY_MASK(STM32_GPT_TIM1_IRQ_PRIORITY)); |
35 | CORTEX_PRIORITY_MASK(STM32_GPT_TIM1_IRQ_PRIORITY)); |
| 23 | //gptp->clock = STM32_TIMCLK2; |
36 | //gptp->clock = STM32_TIMCLK2; |
| 24 | 37 | ||
| 25 | TIM1->CR1 = 0; /* Initially stopped. */ |
38 | TIM1->CR1 = 0; /* Initially stopped. */ |
| 26 | TIM1->CR2 = TIM_CR2_CCDS; /* DMA on UE (if any). */ |
39 | TIM1->CR2 = TIM_CR2_CCDS; /* DMA on UE (if any). */ |
| 27 | TIM1->PSC = 72; /* Prescaler value. */ |
40 | TIM1->PSC = 72 * 3; /* Prescaler value : 3 uS tick timer . */ |
| 28 | TIM1->DIER = 0; |
41 | TIM1->DIER = 0; |
| 29 | 42 | ||
| 30 | } |
43 | } |
| 31 | 44 | ||
| 32 | void stopTimer(void) { |
45 | void stopTimer(void) { |
| 33 | nvicDisableVector(TIM1_UP_IRQn); |
46 | nvicDisableVector(TIM1_UP_IRQn); |
| 34 | rccDisableTIM1(FALSE); |
47 | rccDisableTIM1(FALSE); |
| 35 | } |
48 | } |
| 36 | 49 | ||
| 37 | void startTimer(void) { |
50 | void startTimer(void) { |
| 38 | TIM1->ARR = 12405; /* Time constant. */ |
51 | TIM1->ARR = 0xFFFF; /* Time constant. */ |
| 39 | TIM1->EGR = TIM_EGR_UG; /* Update event. */ |
52 | TIM1->EGR = TIM_EGR_UG; /* Update event. */ |
| 40 | TIM1->CNT = 0; /* Reset counter. */ |
53 | TIM1->CNT = 0; /* Reset counter. */ |
| 41 | /* NOTE: After generating the UG event it takes several clock cycles before |
54 | /* NOTE: After generating the UG event it takes several clock cycles before |
| 42 | SR bit 0 goes to 1. This is because the clearing of CNT has been inserted |
55 | SR bit 0 goes to 1. This is because the clearing of CNT has been inserted |
| 43 | before the clearing of SR, to give it some time.*/ |
56 | before the clearing of SR, to give it some time.*/ |
| 44 | TIM1->SR = 0; /* Clear pending IRQs (if any). */ |
57 | TIM1->SR = 0; /* Clear pending IRQs (if any). */ |
| 45 | TIM1->DIER = TIM_DIER_UIE; /* Update Event IRQ enabled. */ |
58 | TIM1->DIER = TIM_DIER_UIE; /* Update Event IRQ enabled. */ |
| 46 | TIM1->CR1 = TIM_CR1_URS | TIM_CR1_CEN; |
59 | TIM1->CR1 = TIM_CR1_URS | TIM_CR1_CEN; |
| - | 60 | ||
| - | 61 | TIM1->CCMR1 = 3344; |
|
| 47 | } |
62 | } |