Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

External interrupt.

Başlatan muhittin_kaplan, 13 Ocak 2013, 14:28:41

muhittin_kaplan

EXTı ile çalışmam oldu, ama kafama takılan konu şu
EXTI0 ile EXTI4 arasında nvic tanımlı, ben GPIOC.10 dan EXTI almak istersem tanımlamayı nasıl yapacağım ?

void NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
 
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel; //define EXTI0_IRQChannel  ((u8)0x06) olarak atanmış
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}


NVIC table da ISER0.6 da EXTI0 tanımlı bundan dolayı yukardaki tanımlama yapılmış. Bu araya kadar herşey normal, anlaşılır ama ben GPIOC.10 u kullanmak istediğimde NVIC table da EXTI10 gibi bir vektor yok. Bunun yanısıra EXTI9_5 ve EXTI15_10 vektorleri mevcut.
Bu EXTI çalışması yaparken PIC deki PortB4-7 kesmesi gibi mi düşüneceğiz. Bu kanalların herhangi birine tetikleme geldiğinde rutin e dallanacak.

muhittin_kaplan

Hediyem Olsun

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_flash.h"
#include "misc.h"

#define EXTI15_10_IRQChannel  ((u8)0x28)  // NVIC tablo 40.sıra hex 28
#define LED_PORT GPIOD

//Global değişkenler
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;


//Prototipler
void Delay(__IO uint32_t);
void SetSysClockHSI(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);



void SetSysClockHSI(void)
	{
	   RCC_DeInit();

	   RCC_HSICmd(ENABLE);
	   RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCKL(AHB) 64mhz
	   RCC_PCLK1Config(RCC_HCLK_Div2);  //PCLK2(APB2) 32Mhz
	   RCC_PCLK1Config(RCC_HCLK_Div1);	//PCLK1(APB1) 64Mhz

	   FLASH_SetLatency(FLASH_Latency_2);
	   FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

	   RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_CFGR_PLLMULL12);//64mhz
	   RCC_PLLCmd( ENABLE);

			while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
			{
			}

			RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK);

			while (RCC_GetSYSCLKSource() != 0x08)
			{
			}


/*
 * GPIOA,B,C,D,E ile AFIO ya clock uygulanıyor
 */
			RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC| RCC_APB2Periph_GPIOD
            | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);
}


void GPIO_Configuration(void)
{
    
/*
 * GPIOC12 giriş olarak GPIOD.2 çıkış olarak ayarlanıyor
 */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(GPIOD, &GPIO_InitStructure);
}

/*
 * kesme ayarları 
 */
void NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

/*
 * Kesme NVIC ayarlamaları
 */
    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}


/*
 * Zaman Geeçikmesi
 */
void Delay(__IO uint32_t nCount)
{
    for (; nCount != 0; nCount--);
}

/*
 * interrupt alt programı
 * GPIOC.12 ye basıldığında buraya dallanacak
 */

void EXTI15_10_IRQHandler()
{
    if (EXTI_GetITStatus(EXTI_Line12) != RESET)
    {
        Delay(0xFFFFF);
        GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_SET);
        Delay(0xFFFFF);
        GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_RESET);

        Delay(0xFFFFF);
        GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_SET);
        Delay(0xFFFFF);
        GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_RESET);

        Delay(0xFFFFF);
        GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_SET);
        Delay(0xFFFFF);
        GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_RESET);

/*
 * kesme bayrağının temizlenmesi
 */
        EXTI_ClearITPendingBit(EXTI_Line12);
    }
}

void main() {


	SetSysClockHSI(); // Clock ayarları
	NVIC_Configuration(); //kesme ayarları
	GPIO_Configuration();//pin ayarları

   
	//EXTI line i GPIOC12 ile ilişkilendir
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource12);


	EXTI_InitStructure.EXTI_Line = EXTI_Line12;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_Init(&EXTI_InitStructure);

	
	//sistemin çalıştığını anlamak için konulmuş boş bir led yakma söndürme işlemi
	Delay(0xFFFFF);
	GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_SET);
	Delay(0xFFFFF);
	GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_RESET);

	Delay(0xFFFFF);
	GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_SET);
	Delay(0xFFFFF);
	GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_RESET);

	Delay(0xFFFFF);
	GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_SET);
	Delay(0xFFFFF);
	GPIO_WriteBit(LED_PORT, GPIO_Pin_2, Bit_RESET);

	while(1);


}

speak48

:D
evet çok değerli kodlar

muhittin_kaplan

#3
silerim haa

speak48

e sil
banada hediyen olmasın.

ilhan_mkp

3 saattir int örneği bulup anlamaya çalışıyorum  zaten c özürlüyüm  bir pinden düşen kenarda kesme oluşturmak istiyorum.
keille uğraş birde üyeler arası itişmeden aradığım kod gitsin. 
benim köyümde çok meşhur bir söz var atlar tepişir taylar ezilir.
;D

muhittin_kaplan

ben biraz speak48 hocaya atıfta bulunarak, "bukadar alınganlık olmamalı" anlamında yazmıştım. Muhtemelen bana kızmıştır. Hakkını helal etsin artık.