1 | #include "enc_tim1.h"
|
2 | #include "stm32f4xx.h"
|
3 | #include "gpio.h"
|
4 | //*********************************************************************************************************************************
|
5 | //*********************************************************************************************************************************
|
6 | //*********************************************************************************************************************************
|
7 | //*********************************************************************************************************************************
|
8 | // Definitionen :
|
9 |
|
10 | // Variablen :
|
11 | volatile s32 ENCODER_CNT=-32768; //s=zeichenkette=string
|
12 |
|
13 |
|
14 | // TIM1, Global Interrupt :
|
15 |
|
16 | ////////////////////////////TIM1///////////////////////////
|
17 | void TIM1_IRQHandler(void)
|
18 | {
|
19 | if(TIM1->SR & TIM_SR_UIF) //UIF => Update_Interrupt_Flag
|
20 | {
|
21 | if(TIM1->CR1 & TIM_CR1_DIR) {ENCODER_CNT-=0x10000;} //TIM_CR1_DIR => Richtungsregister 0=up/1=down
|
22 | else {ENCODER_CNT+=0x10000;}
|
23 | TIM1->SR &= ~TIM_SR_UIF;
|
24 | }
|
25 | }
|
26 | //////////////////////////////////////////////////////////
|
27 |
|
28 | // Encoder, init:
|
29 |
|
30 | void _enc_tim1_init(void)
|
31 | {
|
32 | //////Takt f?r PORTS anschalten//////
|
33 | RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
|
34 | RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_GPIOBEN;
|
35 | /////////////////////////////////////
|
36 |
|
37 | ////////////PINS-INIT://////////////////
|
38 |
|
39 | _gpio_cfg(GPIO_PORT_B, GPIO_PIN_13, GPIO_MODE_AF, GPIO_TYPE_PULL, GPIO_SPEED_50MHz, GPIO_PUPDR_NOR);
|
40 | _gpio_cfg(GPIO_PORT_B, GPIO_PIN_14, GPIO_MODE_AF, GPIO_TYPE_PULL, GPIO_SPEED_50MHz, GPIO_PUPDR_NOR);
|
41 |
|
42 | GPIOB->AFR[1] |= GPIOB_AFRL13_AF1;
|
43 | GPIOB->AFR[1] |= GPIOB_AFRL14_AF1;
|
44 |
|
45 | ////////////////////////////////////////
|
46 |
|
47 | ///////////////////////TIM1_INIT////////////////////
|
48 | TIM1->SMCR |= TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0; //Encoder-Mode: 3
|
49 | TIM1->CCMR1 |= TIM_CCMR1_CC2S_0 | TIM_CCMR1_CC1S_0; //Channel_2 auf TI2 und Channel_1 auf TI1
|
50 | TIM1->CCER |= TIM_CCER_CC1E | TIM_CCER_CC2E; //Input-Channel anschalten
|
51 |
|
52 | TIM1->CNT = 0x8000;
|
53 | TIM1->CR1 |= TIM_CR1_CEN; //Counter anschalten
|
54 |
|
55 | nop;
|
56 | ////////////////////////////////////////////////////
|
57 |
|
58 | }
|
59 | //*********************************************************************************************************************************
|
60 | //*********************************************************************************************************************************
|
61 | //*********************************************************************************************************************************
|
62 | //*********************************************************************************************************************************
|
63 | // Encoder, ISR enable
|
64 |
|
65 | void _enc_tim1_isr_enable(void)
|
66 | {
|
67 | TIM1->DIER |= TIM_DIER_UIE; // TIM1 Update Interrupt
|
68 | NVIC->ISER[0] |= NVIC_ISER_SETENA_27; // TIM1 Global Interrupt
|
69 | }
|
70 | //*********************************************************************************************************************************
|
71 | //*********************************************************************************************************************************
|
72 | //*********************************************************************************************************************************
|
73 | //*********************************************************************************************************************************
|