集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 3901|回复: 0

求助:UART的串口通信问题

[复制链接]
weishuhua 发表于 2010-9-6 18:29:06 | 显示全部楼层 |阅读模式
下面是我编写的一个利用nios ii中UART IP核与PC串口通信的例子,在运行的过程中串口数据可以写入开发板但是接收到的数据和发送数据并不一样。请哪位大侠指点指点。
   #include <stdio.h>                   //包含基本的硬件描述信息
#include <string.h>
#include <system.h>
#include "altera_avalon_uart_regs.h"
#include "altera_avalon_uart.h"      //这是一个包含uart的文件
#include "alt_types.h"               //该文件包含着数据类型      
#include "sys/alt_irq.h"             //中断文件
#include "altera_avalon_pio_regs.h"  //pio的文件


//UART发送一个字节子程序
void Uart_send(unsigned char data)
{
    alt_u16 status;
    status=IORD_ALTERA_AVALON_UART_STATUS(UART_0_BASE);
    while(!(status&0x0040))            //等待发送完成      
        status=IORD_ALTERA_AVALON_UART_STATUS(UART_0_BASE);
    IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE,data);
}

//UART接收子程序
int Uart_receive(void)
{
    alt_u16 status;
    int temp;
    status=IORD_ALTERA_AVALON_UART_STATUS(UART_0_BASE);
    while(!(status&0x0080))               //等待接收完成      
        status=IORD_ALTERA_AVALON_UART_STATUS(UART_0_BASE);
    temp=IORD_ALTERA_AVALON_UART_RXDATA(UART_0_BASE);
    return temp;
}

//串口初始化
void Uart_init()
{
    IOWR_ALTERA_AVALON_UART_STATUS(UART_0_BASE, 0x0);//清状态标志
    IOWR_ALTERA_AVALON_UART_RXDATA(UART_0_BASE, 0x0);//清接收寄存器
}

int main()
{
  int temp1;
  while(1)
  {   
   Uart_init();
   temp1 = Uart_receive();
   IOWR_ALTERA_AVALON_PIO_DATA(0x00003020,temp1);
   Uart_send(temp1);  
   temp1=0;
  }
  return 0;
}
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-4-25 22:11 , Processed in 0.069107 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表