для начала тогда решил сделать как Вашем примере, вот такой же код:
Код
// enable TIM3 clock
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
TIM2->CR1 = 0;
TIM2->PSC = 720;
TIM2->CCMR1 |= TIM_CCMR1_CC1S_1 |
TIM_CCMR1_CC2S_0;
TIM2->CCER |= TIM_CCER_CC1E |
TIM_CCER_CC1P |
TIM_CCER_CC2E;
TIM2->SMCR |= TIM_SMCR_TS_2 |
TIM_SMCR_TS_1 |
TIM_SMCR_SMS_2;
TIM2->DIER |= TIM_DIER_CC1IE |
TIM_DIER_CC2IE;
TIM2->CR1 |= TIM_CR1_CEN;
while (1)
{
}
вот функция прерывания:
Код
void TIM2_IRQHandler()
{
uint32_t ir_pulse = 0, ir_period = 0;
if(TIM2->SR&2) // breakpoint here *
{
ir_pulse=TIM2->CCR1;
}
if(TIM2->SR&4)
{
ir_period=TIM2->CCR2;
// ir_get(ir_pulse,ir_period);
}
TIM2->SR=0;
}
а вот настройка порта:
Код
//=============================================================================
// GPIOA configuration
//=============================================================================
// enable GPIOA clock
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
// Alternate Function
GPIOA->MODER |=
(GPIO_MODER_MODER0_1 | // AF, TIM2_CH1
GPIO_MODER_MODER1_1 // AF, TIM2_CH2
);
// Output type
GPIOA->OTYPER |= 0; // push-pull if 0
// Speed type
GPIOA->OSPEEDR |=
(GPIO_OSPEEDER_OSPEEDR0_1 | // TIM2_CH1, 50MHz
GPIO_OSPEEDER_OSPEEDR1_1 // TIM2_CH2, 50MHz
);
// Push/Pull
GPIOA->PUPDR |=
(
GPIO_PUPDR_PUPDR0_0 | // Pull-Up, TIM2_CH1,
GPIO_PUPDR_PUPDR1_0 // Pull-Up, TIM2_CH2,
);
// Alternate Function pins
GPIOA->AFR[0] |=
((1 << ((0 - 0) << 2)) | // TIM2_CH1, AF1
(1 << ((1 - 0) << 2)) // TIM2_CH2, AF1
);
подключил к ножке PA1 пульс (1.5мс ширина, период 15мс), поставил брейкпоинт внутри функции прерывания, и оно не происходит.
что там еще может быть?
и еще вопрос, как именно понимать это максимальное разрешение? т.е. это количество клоков которое учавствует в сэмплингер входного сигнала? на Рис. 133, стр. 373 Мануала, устанавливая PSC=720 мы контролируем CK_INT который на входе мультиплексора? или как?