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"中所定义的可用寄存器比较一下会发现,上述写法并不可取,上述程序接受数据是字符的依次读入,其实可以在控制位和发送接受寄存器的配合下,则可以很高效的写出通信程序,而不必像上面那样显得有点"笨".
|