Разные прерывания от одного таймера (need help)

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Arr
Родился
Сообщения: 1
Зарегистрирован: Пн ноя 23, 2015 11:55:40

Разные прерывания от одного таймера (need help)

Сообщение Arr »

при входе в прерывание проверяю TIMx_SR на предмет конкретного события (CC1IF - CC4IF), но они, почему-то, все произошли, когда разрешены только некоторые...
куда копать?...=))

инициализация:

Код: Выделить всё

void InitAll(void)
{
	
RCC->AHBENR |= RCC_AHBENR_GPIOBEN; 
RCC->AHBENR |= RCC_AHBENR_GPIOCEN ;
	
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
TIM2->PSC = 150;
TIM2->ARR = 99;
TIM2->CCR4 = 0;	
TIM2->CCR3 = 0;	

RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
TIM3->CNT = 546;	
TIM3->PSC = 150;
TIM3->ARR = 99;
TIM3->CCR3 = 0;	
	


TIM2->CCMR2 |= TIM_CCMR2_OC4M_0; //|  TIM_CCMR2_OC4FE | TIM_CCMR2_OC4PE);//TIM_CCMR2_OC4M_1 |
TIM2->CCMR2 |= TIM_CCMR2_OC3M_0; //|  TIM_CCMR2_OC3FE | TIM_CCMR2_OC3PE);	//TIM_CCMR2_OC3M_1 |
TIM2->CCER |= (TIM_CCER_CC4E | TIM_CCER_CC3E);
TIM2->DIER |= TIM_DIER_CC4IE; 


TIM3->CCMR2 |= (TIM_CCMR2_OC3M_0 |  TIM_CCMR2_OC3FE | TIM_CCMR2_OC3PE);
TIM3->CCER |= ( TIM_CCER_CC3E);
TIM3->DIER |= TIM_DIER_CC3IE; 


	

	
GPIOB->MODER |=GPIO_MODER_MODER7_0;
GPIOC->MODER |=GPIO_MODER_MODER8_1;
GPIOC->AFR[1] |= 0x2;

GPIOB->MODER |=GPIO_MODER_MODER10_1; // êîíôèãóðèðóåì ïîðòû íà âûõîä //!!!!!!!!!!!1
GPIOB->MODER |=GPIO_MODER_MODER11_1;

GPIOB->AFR[1] |= 0x1000 | 0x100;


TIM2->CR1 |= (TIM_CR1_CEN | TIM_CR1_ARPE);
TIM3->CR1 |= (TIM_CR1_CEN | TIM_CR1_ARPE);

NVIC_EnableIRQ(TIM2_IRQn); 
NVIC_EnableIRQ(TIM3_IRQn);


return;
}
обработчики:

Код: Выделить всё

void TIM3_IRQHandler(void){
TIM3->SR &= ~TIM_SR_CC3IF ;
cnt2++;
	TIM3->CCMR2 &= ~0x10;
	TIM3->CCMR2 |= 0x20;
	
	if(cnt2==1000){
TIM3->CCMR2 ^= 0x30;
		cnt2=0;
	}
}

void TIM2_IRQHandler(void){
		if(TIM2->SR & TIM_SR_CC4IF){
				TIM2->SR &= ~TIM_SR_CC4IF ;	
				cnt++;
				TIM2->CCMR2 &= ~0x1000;
				TIM2->CCMR2 |= 0x2000;
				TIM2->CCMR2 ^= 0x30;
				if(cnt==1000){
					TIM2->CCMR2 ^= 0x3000;
					cnt=0;
				}
		}

		if (TIM2->SR & TIM_SR_CC2IF){
					TIM2->SR &= ~TIM_SR_CC2IF;
			if(cnt==999){
			GPIOB->ODR^=(GPIO_ODR_ODR_6 | GPIO_ODR_ODR_7 );
			}
		}
		
}
Реклама
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: Разные прерывания от одного таймера (need help)

Сообщение scorpi_0n »

В сторону референса. Флаги прерывания всегда устанавливаются независимо от того разрешены сами прерывания или нет.
Реклама
Ответить

Вернуться в «ARM»