NIOS II串口非阻塞方式接收数据

NIOS II串口非阻塞方式接收数据,第1张

NIOS II串口非阻塞方式接收数据

Quartus II 10.0版本以上可以用fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK)将标准输入stdin设为非阻塞模式,然后用getchar,read,scanf等函数接收串口数据。
笔者用的版本是Quartus II 13.0sp1 (64-bit)。

下面的程序实现了每隔1秒钟打印一次hello world和系统毫秒计数器的值,收到串口字符时立即打印出来的功能。
用read函数接收1字节字符,函数不阻塞,如果没有字符就会返回-1,有字符则返回1。


#include 
#include 
#include 
#include 
#include 

int main()
{
	alt_u32 now, ticks = 0;
	char ch;
	int i = 0;
	int ret;

	printf("Hello from Nios II!rn");
	printf("tick_rate=%lurn", alt_ticks_per_second());

	usleep(100000);
	printf("ticks=%lurn", alt_nticks());

	fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK);
	while (1)
	{
		now = alt_nticks();
		if (now - ticks > 1000)
		{
			ticks = now;
			printf("Hello World! i=%d, ticks=%lurn", i, now);
			i++;
		}

		ret = read(STDIN_FILENO, &ch, 1);
		if (ret == 1)
		{
			if (isprint(ch))
				printf("UART0: %crn", ch);
			else
				printf("UART0: 0x%02xrn", ch);
		}
	}
}

Qsys里面添加了Interval Timer IP核,定时时间为1ms,无起停控制位,固定定时周期。
在BSP Editor里面的Settings -> Common -> hal -> sys_clk_timer选中这个定时器,就可以用alt_nticks()函数了。这个函数就类似于STM32单片机HAL库里面的HAL_GetTick()函数。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5699671.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存