zoukankan      html  css  js  c++  java
  • nios中关于串口(uart)的一种非常简单的操作方式

    板子是黑金的。    

        昨天看书,是关于nios中字符设备的使用,有关于uart的内容,看到一个使用系统函数操作uart口的方式,当时很感兴趣,感觉很方便,因为不用自己写驱动程序。然后按照书上的方式做了一下,经过验证和调试,发现这种方式的确很简单,在此和大家一起分享。     首先解释一下,这里所谓的字符设备。在nios中,系统将flash,uart,lcd以及dma等设备抽象化为字符设备,以方便开发者进行使用。程序开发只需要获得被操作设备的文件描述符,然后使用系统的文件函数来读写,获取设备中的数据。 当然开发者也可以自己写驱动程序,但是那是相当的繁琐的。所以建议大家还是使用系统自带的程序,因为这样程序简洁一些,可移植性也强一些。 前几天也做过uart口的实验,是按照黑金视频中提供的方式来弄的,驱动程序和头文件都自己写的,因为程序较长,所以还是很麻烦。关于那个较长的程序就不说了,现在直接说那个简单的操作吧。

    #include "system.h"

    #include <unistd.h>

    #include <stdio.h>

    #include "../inc/sopc.h"

    #include<string.h>

    #include"sys/alt_cache.h"

    int main(void)

    {

        printf("This application will print 'hello 88' to uart! ");

        char *msg="you are successful! ";

         FILE *fp;  

         while(1) {  

          fp=fopen("/dev/uart","w");

          if(fp!=NULL) {  

           alt_dcache_free(msg);  

           fprintf(fp,"%s",msg);

                   fclose(fp);

                }

             usleep(100000);

           }

    return 0;

    }

        这里需要注意一下这个函数alt_dcache_free(msg); 因为我用的cpu的核是f核,高速的核配备了数据缓存,正常情况下,数据都会先进入缓存,但是数据进入缓存就会导致输出出错。所以这里需要把发送的数据旁路掉了,避免进入到缓存中。当然数据缓存旁路有很多方式,我这里仅仅提供一种而已。

        另外那个文件描述符的句柄,因为书中没定义,我就用了FILE来定义,因为其他的文件描述符指针,都是和这个类型兼容的。 至于结果就不贴图片呢,百度空间这个编辑不是很方便,大家有兴趣可以试一下。

  • 相关阅读:
    web中的懒加载
    数据库表的关系
    struts2的MVC模式
    servlet与tomcat的关系
    servlet解析
    解决Mac外接显示器字体模糊的问题
    insmod: ERROR: could not insert module dm-snapshot.ko: Unknown symbol in module
    linux ssh tunnel
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic).错误的解决
    Best practices for a new Go developer
  • 原文地址:https://www.cnblogs.com/farbeyond/p/5202990.html
Copyright © 2011-2022 走看看