📄 uart.txt
字号:
NIOS II的 UART
NIOS II的UART 与通用串口兼容,用于可以设置自己的需求通信模式,比如波特率 奇偶校验 停止位 数据位和其他控制信号
主要的寄存器有: txdata,rxdata,status control divisor endof packet,串口要说的东西其实不是很多,但是其确有很多很多的位定义,比如irrdy itrdy等等发送接受传输和错误检测等控制位,这里就不一一列出了,太多了,用的东西在NIOS中看名字大概也能看出来.具体见头文件
#i nclude "altera_avalon_uart_regs.h"
下面是我曾经用过的一个UART通信中断程序
int handle_uart_interrupts(void* context, alt_u32 id)
{
FILE *uart_file;
uart_file=fopen("/dev/uart_0","r+");
if (uart_file == NULL)
{
printf("can't open uart_device!");
return 0 ;
}
uart_buf[k++]=IORD_ALTERA_AVALON_UART_RXDATA(UART_0_BASE);
if(uart_buf[k-1]=='f')
{
char search[20] = "s ";
uart_buf[k-1]='\0';
k=0;
//printf("串口%s ", uart_buf);
if (cur_panel.id == 0)
{
search[0] = 'c';
if (strlen(uart_buf) == 2)
{
search[2] = '0';
search[3] = '\0';
}
}
if (strlen(uart_buf) == 6)
{
search[2] = '9';
search[3] = '\0';
}
strcat(search, uart_buf);
strcpy(sendbuf, search);
}
fclose(uart_file);
return 0;
}
仔细看看上面的程序,并与头文件 #i nclude "altera_avalon_uart_regs.h"中所定义的可用寄存器比较一下会发现,上述写法并不可取,上述程序接受数据是字符的依次读入,其实可以在控制位和发送接受寄存器的配合下,则可以很高效的写出通信程序,而不必像上面那样显得有点"笨".
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -