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来定义,因为其他的文件描述符指针,都是和这个类型兼容的。 至于结果就不贴图片呢,百度空间这个编辑不是很方便,大家有兴趣可以试一下。

  • 相关阅读:
    【leetcode】416. Partition Equal Subset Sum
    【leetcode】893. Groups of Special-Equivalent Strings
    【leetcode】892. Surface Area of 3D Shapes
    【leetcode】883. Projection Area of 3D Shapes
    【leetcode】140. Word Break II
    【leetcode】126. Word Ladder II
    【leetcode】44. Wildcard Matching
    【leetcode】336. Palindrome Pairs
    【leetcode】354. Russian Doll Envelopes
    2017.12.22 英语面试手记
  • 原文地址:https://www.cnblogs.com/farbeyond/p/5202990.html
Copyright © 2011-2022 走看看