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
S.A. hangi mcu yu, hangi portu kullanacaksın kod gönderelim.
stm32f407 discovery kartını kullanıyorum. uart2 pa2 ve pa3 pinlerini haberlesme olarak bagladım.
Cevap verebiliecek yok mu... acil cozmem gerekıyor bu sorunu
acil yardım arkadaslar cozemedım interupp olayını
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
}
//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------
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);
}
//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------