板子是黑金的。    

    昨天看书,是关于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!\n");

    char *msg="you are successful!\n";

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

posted on 2016-02-20 11:50  farbeyond  阅读(3954)  评论(0编辑  收藏  举报