• 大小: 10KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-17
  • 语言: 其他
  • 标签: UART0  

资源简介

ZYNQ7021在Linux下, 串口UART0的实现,可以在PS端直接使用,也可以将UART0引荐通过引脚分配带EMIO上使用,测试效果可以查看我的博客。

资源截图

代码片段和文件信息

//串口相关的头文件  
#include      /*标准输入输出定义*/  
#include     /*标准函数库定义*/  
#include     /*Unix 标准函数定义*/  
#include   
#include     
#include      /*文件控制定义*/  
#include    /*PPSIX 终端控制定义*/  
#include      /*错误号定义*/  
#include  

#include 

#include 

//宏定义  
#define FALSE  -1  
#define TRUE   0  

/******************************************************************* 
* 名称:                UART0_Open
* 功能:                打开串口并返回串口设备文件描述 
* 入口参数: fd:文件描述符    port :串口号(ttyPS0ttyPS1)
* 出口参数:             正确返回为1,错误返回为0
*******************************************************************/  
int UART0_Open(int fdchar* port)  
{  

    fd = open( port O_RDWR|O_NOCTTY|O_NDELAY);  //fd = -1

    if (FALSE == fd)
    {
        perror(“Can‘t Open Serial Port“);
        return(FALSE);
    }
    //恢复串口为阻塞状态
    if(fcntl(fd F_SETFL 0) < 0)
    {
        printf(“fcntl failed!\n“);
        return(FALSE);
    }
    else
    {
        printf(“fcntl=%d\n“fcntl(fd F_SETFL0));
    }
    //测试是否为终端设备
    if(0 == isatty(STDIN_FILENO))
    {
        printf(“standard input is not a terminal device\n“);
        return(FALSE);
    }
    else
    {
        printf(“isatty success!\n“);
    }
    printf(“fd->open=%d\n“fd);
    return fd;
}  
/******************************************************************* 
* 名称:                UART0_Close 
* 功能:                关闭串口并返回串口设备文件描述 
* 入口参数: fd:文件描述符    port :串口号(ttyPS0ttyPS1)
* 出口参数:             void
*******************************************************************/  

void UART0_Close(int fd)  
{  
    close(fd);
}  

/******************************************************************* 
* 名称:                UART0_Set 
* 功能:                设置串口数据位,停止位和效验位 
* 入口参数: fd          串口文件描述符
*          speed       串口速度
*          flow_ctrl   数据流控制
*          databits    数据位   取值为 7 或者8
*          stopbits    停止位   取值为 1 或者2
*          parity      效验类型 取值为NEOS
*出口参数:              正确返回为1,错误返回为0
*******************************************************************/  
int UART0_Set(int fdint speedint flow_ctrlint databitsint stopbitsint parity)  
{  

    int   i;
    int   status;
    int   speed_arr[] = { B115200 B19200 B9600 B4800 B2400 B1200 B300};
    int   name_arr[] = {115200  19200  9600  4800  2400  1200  300};

    struct termios options;

    /*tcgetattr(fd&options)得到与fd指向对象的相关参数,并将它们保存于options该函数还可以测试配置是否正确,
     *该串口是否可用等。若调用成功,函数返回值为0,若调用失败,函数返回值为1. */
    if  ( tcgetattr( fd&options)  !=  0)  //erro: tcgetattr( fd&options)=1
    {
        perror(“SetupSerial 1“);
        return(FALSE);
    }
    //设置串口输入波特率和输出波特率
    for ( i= 0;  i < sizeof(speed_arr) / sizeof(int);  i++)
    {
        if  (speed == name_arr[i])
        {
            cfsetispeed(&options speed_arr[i]);
            cfsetospeed(&options speed_arr[i]);
        }
    }
    //修改控制模式,保证程序不会占用串口
    options.c_cflag |= CLOCAL;
    

评论

共有 条评论

相关资源