nios中关于串口(uart)的一种非常简单的操作方式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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!\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来定义,因为其他的文件描述符指针,都是和这个类型兼容的。 至于结果就不贴图片呢,百度空间这个编辑不是很方便,大家有兴趣可以试一下。
以上是关于nios中关于串口(uart)的一种非常简单的操作方式的主要内容,如果未能解决你的问题,请参考以下文章