Picproje Elektronik Sitesi

DERLEYİCİLER => MikroC - PIC => MikroC ARM => Konuyu başlatan: universitelim54 - 07 Haziran 2019, 14:16:27

Başlık: MikroC Arm Uart İnterap
Gönderen: universitelim54 - 07 Haziran 2019, 14:16:27
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
Başlık: Ynt: MikroC Arm Uart İnterap
Gönderen: Murat Mert - 07 Haziran 2019, 15:59:50
S.A. hangi mcu yu, hangi portu kullanacaksın kod gönderelim.
Başlık: Ynt: MikroC Arm Uart İnterap
Gönderen: universitelim54 - 07 Haziran 2019, 16:20:49
stm32f407 discovery kartını kullanıyorum. uart2 pa2 ve pa3 pinlerini haberlesme olarak bagladım.
Başlık: Ynt: MikroC Arm Uart İnterap
Gönderen: universitelim54 - 07 Haziran 2019, 16:55:18
Cevap verebiliecek yok mu...  acil cozmem gerekıyor bu sorunu
Başlık: Ynt: MikroC Arm Uart İnterap
Gönderen: universitelim54 - 07 Haziran 2019, 22:18:31
acil yardım arkadaslar cozemedım interupp olayını
Başlık: Ynt: MikroC Arm Uart İnterap
Gönderen: universitelim54 - 08 Haziran 2019, 10:10:38
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
     


}

//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------
Başlık: Ynt: MikroC Arm Uart İnterap
Gönderen: Murat Mert - 09 Haziran 2019, 09:16:48
 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);

}

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