Timer 1 Hallsensor interface - No interrupt from external signal.
This is how i the GPIO for the timer:
// Hallsensors (Tim1 capture)
my_GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2;
my_GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
my_GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOC, &my_GPIO_InitStruct);
GPIOC->AFR[0] |= ( GPIO_AFRL_AFSEL0_1 | // AF2 (all)
GPIO_AFRL_AFSEL1_1 |
GPIO_AFRL_AFSEL2_1);This is the timer config:
void initTim1AndTim8Hall(){
__disable_irq();
__HAL_RCC_TIM1_CLK_ENABLE();
SET_BIT( TIM1->CR2, TIM_CR2_TI1S); // config all 3 hall signals (PC0-2) via XOR to timer 1
WRITE_REG(TIM1->ARR, 0xFFFF); // Max value (is reset by input signal)
WRITE_REG(TIM1->PSC, TIM1_PRESC - 1); // Mind the 1 that is added in the uC !
WRITE_REG(TIM1->CCR2, 20); // Delay value for PWM change trigger
WRITE_REG(TIM1->CCMR1, 0); // set zero
SET_BIT( TIM1->CCMR1, TIM_CCMR1_CC1S_0); // channel is configured as input, tim_ic1 is mapped on tim_ti1
SET_BIT( TIM1->CCMR1, TIM_CCMR1_OC2M_2 |
TIM_CCMR1_OC2M_1 |
TIM_CCMR1_OC2M_0); // PWM mode 2 - In upcounting, channel 1 is inactive as long as TIMx_CNT<TIMx_CCR1 else active.
//SET_BIT(TIM1->CCMR1, TIM_CCMR1_IC1F_0); // filter if needed
SET_BIT( TIM1->CR2, TIM_CR2_MMS_2 |
TIM_CR2_MMS_0); // tim_oc2refc signal is used as trigger output (tim_trgo2 -> itr1 for timer 8)
SET_BIT( TIM1->DIER, TIM_DIER_CC1IE); // enable interrupt on hall signal (is XOR with 2 and 3
SET_BIT( TIM1->CR1, TIM_CR1_CEN); // enable counter timer 1
NVIC_EnableIRQ(TIM1_CC_IRQn); // enable interrupt
// OC1M is preploaded
// slave mod reset input bei tim_ti1f_ed
// capture/compare channel 1 is configured in capture mode, capture signal is tim_trc
// ****** Timer 8 ******
//SMCR // timer 1 trigger out comes in on itr0 which is set with 0x0 by default
initTimer8PWM();
startTimer8();
__enable_irq();
SET_BIT(TIM1->EGR, TIM_EGR_CC1G); //force interrupt
}
The interrupt is called when invoking it via software (see last line above).
- The value of the CCR does not change.
- I have checked the IDR for the right signal
- When i activate CC2IE-CCIE4, the interrupt is called over and over without doing anything to the button.
