Ynt: İnterrupt sorunu stm32f4

Başlatan tutay, 29 Kasım 2012, 15:45:31

tutay

merhabalar stm32f4 ile interrupt programalamaya çalışıyorum fakat interrupt programlarken sanırım bir yerde hata yapiyorum yada komple hata yapiyorum sistem istediğim gibi çalişmiyor. ben pb12 nolu bacağa bağlı led pb10 nolu butona bağli iken butona basilinca yansın istiyorum . Nerde hata yaptiğimi gösterebilir misin
#include <STM32F4xx.h>

void SystemInit(){
	unsigned i=0;
	for(i=0;i<0x00100000;i++);//biraz bekleme eklendi sistem saçmalamasın diye
	RCC->CFGR |= 0x00009400; // AHB ve APBX değerleri maximumda
	RCC->CR |= 0x00010000;  	//HSE aktif hale getirildi.
	while(!(RCC->CR & 0x00020000) ); // HSE stabilmi o kontrol edildi.
	RCC->PLLCFGR |=0x07405408; //PLL katsayilari ayarlandi.
	//M=8;N=336;P=2;Q=7
	RCC->CR |= 0x01000000;//PLL on;
	while(!(RCC->CR & 0x02000000)); //PLL stabilmi;
	FLASH->ACR = 0x00000605;        // Flash ROM
	//icin 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
	RCC->CFGR |=0x00000002;//PLL sistem clocku;
	while ((RCC->CFGR & 0x0000000F) != 0x0000000A); // Besleninceye kadar bekle
	RCC->AHB1ENR |= 0x0000001F; //A,B,C,D,E portlarının clockları açıldı.
	GPIOB->MODER = 0x01000000; // B portunun 12 değerleri cikis yapildi.
	GPIOB-> OSPEEDR = 0xFFFFFFFF; // B portunun tamami yüksek hiz
	RCC->APB2ENR |= 0x00004000;		// SYSCFG Enable interrupt icin acildi
}
void EXTI10_IRQHandler(){
	EXTI->PR=0x00000400;           // EXTI10 INT flagimizi silelim
	GPIOB->ODR^=0x00001000;     	// PB12 nolu bacagi xorlayalım


}
int main(){
		
	    SYSCFG->EXTICR[2] |= 0x00000100;// GPIO B10 interrupt uretecek
	    EXTI->RTSR=0x00000400;                   // Yukselen kenar tetiklemesi yapacagiz. (EXTI10)
	    EXTI->FTSR=0;                   // Dusen kenar tetiklemesi istemiyoruz.  (EXTI10)
	    EXTI->IMR=0x00000400;                    // EXTI10 Int enable
	    EXTI->EMR=0;                    // Event istemiyoruz
	    NVIC->ISER[1] = 0x00000100;     // NVIC EXTI10_IRQ interrupti acalim

	    while(1){

	    }
	    }


mesaj birleştirme:: 29 Kasım 2012, 16:01:55


Klein

void EXTI10_IRQHandler()

EXTI10_IRQHandler  vektör tanımı nerede yapılmış?

EXTI_10 ve EXTI_15 aralığındaki kesmeler aynı adrese dallanıyor.  Tek başına EXTI_10 için bir kesme vektörü yok. En azından bendek başlık dosyalarında ayrı ayrı tanımlanmamışlar.
Hangi başlık dosyasını kullandınız?  Kesme vektörlerini  kendiniz mi ayarladınız.

bendeki başlık dosyasında  EXTI10 gerçekleştiğinde çağırılacak fonksiyonun ön tanımı aşağıdaki gibi

EXTI15_10_IRQHandler

tutay

tamam hocam orayı eksik yazmışım daha yolun başında olunca ben her kesme dosyasını ayrı vektör içinde sanmıştım değiştirdim oldu teşşekkür ederim cevabınız için.