Very good sample NiosII UART

1, Non Interrupt

#include

#include “unistd.h”

#include “system.h”

#include “alt_types.h”

#include “altera_avalon_uart_regs.h”

int main()

{

    printf(“Hello from Nios II\n”);

    alt_u8 txdata = 0;

    alt_u8 rxdata = 0;

    while(1)

    {

       //查询接收准备好信号,如果没有准备好,则等待

while(!((IORD_ALTERA_AVALON_UART_STATUS(UART_BASE)&ALTERA_AVALON_UART_STATUS_RRDY_MSK)));

       //接收准备好,读取UART接收数据

       rxdata = IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);

       txdata = rxdata;

       //查询发送准备好信号,如果没有准备好,则等待

while(!((IORD_ALTERA_AVALON_UART_STATUS(UART_BASE)&ALTERA_AVALON_UART_STATUS_TRDY_MSK)));

       //发送准备好,发送txdata

       IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE,txdata);

    }

    return 0;

}

2、中断方式

//中断方式

#include

#include

#include “unistd.h”

#include “system.h”

#include “alt_types.h”

#include “altera_avalon_uart_regs.h”

#include “sys\alt_irq.h”

static alt_u8txdata = 0;

static alt_u8rxdata = 0;

//UART中断服务函数

static void uart_isr(void * context,alt_u32 id)

{

    rxdata = IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);

    txdata = rxdata;

    //查询发送准备好信号,如果没有准备好,则等待

while(!((IORD_ALTERA_AVALON_UART_STATUS(UART_BASE)&ALTERA_AVALON_UART_STATUS_TRDY_MSK)));

    //发送准备好,发送txdata

    IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE,txdata);

}

void uart_init()

{

    //清除状态寄存器

    IOWR_ALTERA_AVALON_UART_STATUS(UART_BASE,0);

    //使能接受准备好中断

    IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE,0X80);

}

int main()

{

    printf(“Please Start!\n”);

    //注册UART中断服务函数

    alt_irq_register(UART_IRQ,NULL,uart_isr);

    uart_init();

    while(1){}

    return 0;

}

 

Link

Leave a comment

  • Taisen

    Creative, Enthusiasm, Faithful! Welcome to Taisen's blog.  
  • Tag Cloud

  • Contact Me