教程11_nios ii软核uart的用法之三fp文件操作fopen与fwrite

前面两节,分别介绍了nios ii软核UART的寄存器操作方式C标准库操作方式。除了这两种用法,其实还有第三种。在第三种方法中,使用fopen函数打开串口,使用fwrite函数给串口发送数据。

接触过Linux环境的人,看到这里肯定感觉很熟悉。因为这种方式和Linux环境下的操作有些像,都是把串口当成一个文件,对其进行读或写操作。

打开上一节下载的Embedded Peripherals IP User Guide文件,第148页,有这样一段代码:

对于这段代码,文档中并没有给出太多的说明,只是说可以参考两个文档:《Nios II Software Developer’s Handbook》和《Nios® V Embedded Processor Design Handbook》。

在《Nios II Software Developer’s Handbook》中,7.7章节,简单描述了这种方式的特点:

字符模式设备是一种硬件外设,它要么发送要么接收字符,或者两者兼而有之,串行进行。一个常见的例子是UART(通用异步接收/发送器)。字符模式设备在HAL文件系统中注册为节点。通常情况下,程序将文件描述符与设备名称关联起来,然后使用file.h中定义的ANSI C文件操作来写入和读取文件中的字符。HAL还支持标准输入、标准输出和标准错误的概念,允许程序调用stdio.h中的I/O函数。

回到程序中,我们可以简单分析下这段代码的功能:

  • 定义了一个字符串:msg;
  • 定义了一个文件指针:fp;
  • 使用打开文件的方式打开uart1;
  • 判断文件指针是否正常,正常的话做一些接收或发送的操作。

大致就这些。

从内容上不难看出,这种方式也很简便。它在处理串口时,把串口当成了一个文件,先打开,然后读,或者写。操作完成后,关闭该设备。

接下来,验证一下这段程序的功能。打开NIOS II软件,使用core_led.sopcinfo软核新建一个工程,工程命名为:uart_fp。记得工程间相关联。

然后把上面代码复制下来,粘贴到main.c里面:

#include <stdio.h>
#include <string.h>
int main()
{
	char *msg = "Detectde the character 't'.\n";
	FILE *fp;
	char prompt = 0;
	fp = fopen("/dev/uart_0","r+");	//open file for reading and writing
	if(fp)
	{
		while(prompt != 'v')
		{
			//loop until we receive a 'v'.
			prompt = getc(fp);	//get a character from the UART
			if(prompt == 't')
			{
				//print a message if character is 't'.
				fwrite(msg,strlen(msg),1,fp);
			}
		}
		fprintf(fp,"Closing the UART file.\n");
		fclose(fp);
	}
  return 0;

聪明的你一定能看懂,所以不解释了。保存、编译、下载。

       首先发送字符‘t’,软核返回了字符串:Detectde the character ‘t’.

       尝试发一些其它的字符,无反应。

       最后发送字符‘v’,软核返回了字符串:Closing the UART file.

       用法上和之前的不太一样,但都很方便。看个人选择吧!

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据