MikroC Arm Uart İnterap

Başlatan universitelim54, 07 Haziran 2019, 14:16:27

universitelim54

Mrb. Arkadaşlar uarttan gelen veriyi interap yardımı ile almak istiyorum .. MikroC arm de uart için interap nasıl kurabilirim . Saygılarımla

Murat Mert

S.A. hangi mcu yu, hangi portu kullanacaksın kod gönderelim.
mert07

universitelim54

stm32f407 discovery kartını kullanıyorum. uart2 pa2 ve pa3 pinlerini haberlesme olarak bagladım.

universitelim54

Cevap verebiliecek yok mu...  acil cozmem gerekıyor bu sorunu

universitelim54

acil yardım arkadaslar cozemedım interupp olayını

universitelim54

#5
Mrb. Arkadaşlar formdaki degerli arkadaşımız Murat Mert ile görüşmemize istinaden sorunu çözdük. istedik ki bu sorunla karşılaşanlarda bu tecrübeden faydalansın. kodları buradan yayınlıyorum... saygılar 


//  Murat Mert & Evliya Songül


// Stm32f407 discovery


unsigned char rcv = 0;
char *yazi="deneme\n\r";


void set_up();
void USART2_send(unsigned char value);
void yaz(char *s);








void main() 
{
     set_up();
     

     yaz(yazi);
     Delay_ms(500);

     while(1)
     {
     
       yaz(yazi); Delay_ms(500);   // uart hattının calıstıgını gozlemlemek ıcın her 500 ms de bır char 
                                   //   *yazi="deneme yazi yazma\n\r"; gonderılıyor
     
     
     }

}

//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------
void data_received()iv IVT_INT_USART2 ics ICS_AUTO          //RX interrupt burada olusuyor
{
   if(USART2_SRbits.RXNE == 1)          //RX buffer veri geldi
   {
       rcv = (0xFF & USART2_DR);        //gelen datayı okuma registeri
   }
   USART2_send(rcv);                    //gelen datayı gönder _usart2_send fonksiyonu ile geri gonder
}
//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------

void USART2_send(unsigned char value)
{
     USART2_DR = (value);//& 0xFF);      // yollanacak datayıusart2 nin registerinden yolla
     while(USART2_SRbits.TXE == 0);     //data transmisyonu komple bitene kadar bekle
}
//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------
void yaz(char *s)
{

  while(*s)
  {
    USART2_send(*s++); // Send Char_karekter yolla
  }
}
//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------

void set_up()
{


UART2_Init_Advanced(9600, _UART_8_BIT_DATA, _UART_NOPARITY, _UART_ONE_STOPBIT, &_GPIO_MODULE_USART2_PA23); // seri port ayarı
USART2_CR1bits.RXNEIE = 1;             // seri port enable RX interrupt biti aktif
NVIC_IntEnable(IVT_INT_USART2);        // usart2 kesme aktif
     


}

//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------

Murat Mert

 Sn. Arkadaımızın verdiğini ben de kod içinde vereyim.
sbit LED1  at GPIOD_ODR.B12;
sbit LED2  at GPIOD_ODR.B13;
sbit LED3  at GPIOD_ODR.B14;
sbit LED4  at GPIOD_ODR.B15;

unsigned char rcv = 0;
char *yazi="deneme yazi yazma\n\r";

void data_received();//iv IVT_INT_USART2 ics ICS_AUTO
void set_up();
void USART2_send(unsigned char value);
void yaz(char *s);








void main() 
{
     set_up();
     

     yaz(yazi);
     Delay_ms(500);

     while(1)
     {
     
       yaz(yazi); Delay_ms(500);
     
     
     }

}

//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------
void data_received()iv IVT_INT_USART2 ics ICS_AUTO          //RX interrupt subroutine
{
   if(USART2_SRbits.RXNE == 1)          //RX buffer veri geldi
   {
       rcv = (0xFF & USART2_DR);        //gelen datayı okuma registeri
   }
   USART2_send(rcv);                    //gelen datayı gönder _******deneme için ******* normal rutinde burada olmaz
}
//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------

void USART2_send(unsigned char value)
{
     USART2_DR = (value);//& 0xFF); // yollanacak datayıusart2 nin registerinden yolla
     while(USART2_SRbits.TXE == 0);     //data transmisyonu komple bitene kadar bekle
}
//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------
void yaz(char *s)
{

  while(*s)
  {
    USART2_send(*s++); // Send Char_karekter yolla
  }
}
//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------

void set_up()
{

GPIO_Digital_Output(&GPIOD_BASE, _GPIO_PINMASK_12);
GPIO_Digital_Output(&GPIOD_BASE, _GPIO_PINMASK_13);
GPIO_Digital_Output(&GPIOD_BASE, _GPIO_PINMASK_14);
GPIO_Digital_Output(&GPIOD_BASE, _GPIO_PINMASK_15);

UART2_Init_Advanced(9600, _UART_8_BIT_DATA, _UART_NOPARITY, _UART_ONE_STOPBIT, &_GPIO_MODULE_USART2_PA23); // seri port ayarı
     USART2_CR1bits.RXNEIE = 1;             // seri port enable RX interrupt biti aktif
     NVIC_IntEnable(IVT_INT_USART2);        // usart2 kesme aktif
     
     Delay_ms(1000);
     
     LED1=1; Delay_ms(1000);
     LED1=0; Delay_ms(1000);
     LED2=1; Delay_ms(1000);
     LED2=0; Delay_ms(1000);
     LED3=1; Delay_ms(1000);
     LED3=0; Delay_ms(1000);
     LED4=1; Delay_ms(1000);
     LED4=0; Delay_ms(1000);

}

//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------
mert07