首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

請會使用uart的高手教我

請會使用uart的高手教我

#include "alt_types.h"
#include <string.h>
#include <unistd.h>
#include "system.h"
#include "altera_avalon_uart_regs.h"
#include "altera_avalon_pio_regs.h"
#include "sys/alt_irq.h"


#ifdef UART_BASE
void uart_handle(void *context,alt_u32 interrupt)
{
  unsigned short int data,status;
  status = IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
  while (!(status & ALTERA_AVALON_UART_STATUS_RRDY_MSK))
    status = IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
  data =IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);
  //write status reg;
  status = ALTERA_AVALON_UART_STATUS_TRDY_MSK;
  IOWR_ALTERA_AVALON_UART_STATUS(UART_BASE, status);
  IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE, data);
  IOWR_ALTERA_AVALON_UART_STATUS(UART_BASE, 0);
}

void uart_init()
{
  alt_u32 control;
  int divisor;
 
  control = ALTERA_AVALON_UART_CONTROL_TRDY_MSK |
  ALTERA_AVALON_UART_CONTROL_RRDY_MSK |
  ALTERA_AVALON_UART_CONTROL_E_MSK;
  IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE, control);
 
  divisor = (int)(50000000/115200+0.5);
  IOWR_ALTERA_AVALON_UART_DIVISOR(UART_BASE, divisor);

  if (alt_irq_register(UART_IRQ, NULL, uart_handle))
   {
     IOWR_ALTERA_AVALON_PIO_DATA(PIO_OUT_BASE, 0x0);
   }
}
#endif

int main(void)
{
  /* declare var used by uart;*/
  IOWR_ALTERA_AVALON_PIO_DATA(PIO_OUT_BASE, 0x4079);
 
  uart_init();
  while(1);
  return 0; 
}   
有程式可是不會用 @@

我希望用uart來中斷,當有資料傳輸近來就會中斷做其他的事情嗎?   可不可以解釋一下這些程式要怎麼使用?

uart用中断和其他的中断一样,来了数据会中断其他的事情。
在交流中前进,共同实现nios的应用。
这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

我大概懂程式是怎麼進行了

但是我想將它改成由版子傳資料給電腦後會中斷~而不是由電腦傳值給版子會中斷!!

可以請大大教我怎麼修改程式嗎?

“版子傳資料給電腦後會中斷”版子传给电脑后,uart是不会有中断的,如果你可以给nios加中断。因为传给电脑的,版子是知道什么时候传完了的。而电脑传给版子,版子是被动的,才需要中断。

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

恩恩~~感謝版主大大喔!!  ^^  昨天我看了之後~~想想自己的觀念錯了><

多謝指教!!

路过,也在找类似的东东

看精华去~~

看看精华??
返回列表