Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
19 years ago

uart functionally

hi

if somebody want to try uart device , i post a simple code that's running

of course it's not complete but i would like to start a common little project

with all people write in this community .

# include "count_binary.h"

int val;

int uart_0;

char buf[255];

alt_u8 counter;

// REGISTER

static void handle_uart_interrupt(void* context,alt_u32 id)

{

val++; //everytime i receive a caracter increment and display on leds

Write_Output(val);

//using this macro automatically bit ready to receive will be resetted

//and ready for a new interrupt when shifter register finish to translate last bit

//in the uart device

buf[counter]=IORD_ALTERA_AVALON_UART_RXDATA(UART_0_BASE) ;

counter++;

if (counter==6)

{printf("riceived:%s\r ",buf);

counter=0;

}

}

static void Write_Output(alt_u8 val)

{

IOWR_ALTERA_AVALON_PIO_DATA(PM_OUT_BASE, val);

}

int main(void)

{

int i;

volatile int uart_0;

val=0;

while( 1 )

{

IOWR_ALTERA_AVALON_UART_CONTROL(UART_0_BASE, 0x180);

alt_irq_register(UART_0_IRQ,&uart_0,handle_uart_interrupt);

}

return(0);

}

i use vc#.net to send a string ("walter") of 6 caracters .

In Nios II ide console is displaying as follows

received:walter

i think this sample will be good for many people want to start to use uart device and interrupt .

I stay 2 days reading and trying to gain this , i'm not clever .

Of course need to implement also transmit interrupt and create a protocol

but if other people contribute to continue it's possible to obtain very interesting

development

ciao

walter

2 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    --- Quote Start ---

    originally posted by pmicro@Mar 22 2006, 02:02 PM

    it's uncredible how the world is absent

    and how everybody anly ask and want

    http://forum.niosforum.com/work2/style_emoticons/<#emo_dir#>/blink.gif

    <div align='right'><{post_snapback}> (index.php?act=findpost&pid=13692)

    --- quote end ---

    --- Quote End ---

    this is the code i do rs232 interrupt... no hard feeling.. everyone is bz

    see how easily i can use the rs232 wth PIC uC...

    no need clear or set any flag, all is done by compiler (CCS C).. i dunno how u do in nios C

    //date: 07/01/2006
    //function: use PC to send 4 character to PIC and when the 4 character is detected as "ABCD" (ASCII), it echo back.
    //          : the "ABCD" sequence have to be correct or it will not echo back to PC.
    # include <16F877A.h># fuses HS, NOWDT, NOPUT, NODEBUG, NOLVP, NOBROWNOUT, NOCPD, NOPROTECT, NOWRT# use delay(clock = 20000000)
    # use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
    # INT_RDA              //RS232 receive data available
    void isr_rs232(){
       int A_char, B_char, C_char, D_char;
       int protocol;  // use as a dummy to make sure the sequence of character received is correct.
       
       A_char = getc();
       if (A_char == &#39;A&#39;){
          protocol = 1;
       }
       if (protocol == 1){
          B_char = getc();
          if (B_char == &#39;3&#39;){
             protocol = 2;
          }
       }
       if (protocol == 2){
          C_char = getc();
          if (C_char == &#39;C&#39;){
             protocol = 3;
          }
       }
       if (protocol == 3){
          D_char = getc();
          if (D_char == &#39;D&#39;){
             protocol = 4;
          }
       }
       if (protocol == 4){
             putc(A_char); putc(B_char); putc(C_char); putc(D_char);   //echo back the character u send to your PIC
       }
       protocol = 0; //clear the dummy for further use.
    }
    void main(){
       enable_interrupts(GLOBAL);
       enable_interrupts(INT_RDA);
       while(1){
            ;   //do nothing and wait for rs232 interrupt
       }
    }