1回答

0收藏

NIOS II的 UART

其他 其他 4850 人阅读 | 1 人回复 | 2007-08-24

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

分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

beyondzheng

发表于 2008-8-25 13:17:23 | 只看该作者

RE:NIOS II的 UART

能不能说的具体点@
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条