共2条
1/1 1 跳转至页
44b0,UART 求助:关于44b0 UART的若干问题
问
又要劳烦各位了,呵呵。
问题一:
UART有FIFO和非FIFO模式,在这两种模式下,分别是如何触发发送和接收中断的,也就是说,什么时候会引发中断?
UFCON[7:6]、UFCON[5:4]分别决定发送FIFO和接收FIFO触发条件,表示什么意思?是触发中断的条件吗???
我的看法:无论在FIFO模式还是非FIFO模式,发送中断都是在发送缓冲区变空时引发的,可不明白的是UFCON[7:6]作用是什么???
比如,UFCON[7:6]=10,是指发送FIFO中有8个字节时引发中断吗?
问题二:在pc键入'\n',在开发板uart接收到不是'\n',而是'\r',为什么???
问题三:
在FIFO模式下,FIFO和接收缓冲寄存器在读写顺序上是什么关系?以下是我的理解:
发送时过程:先将待发送的数据输出至FIFO,然后再由FIFO保存至发送缓冲寄存器,再通过发送移位寄存器发出去。
接收过程:先将接收移位寄存器中数据至接收FIFO,然后再保存至接收缓冲寄存器,用户读数据时,是从接收缓冲寄存器中读出???
发送保持寄存器和发送移位寄存器是两个不同的寄存器吧?
移位寄存器有多少位?
这几个问题困扰我好久,请各位点拨一下,谢了先 答 1: 帮忙啊,各位!
帮帮忙吧,谢谢了 答 2: 谈谈我自己的理解吧,不对请指正刚才看了下datasheet,谈谈我自己的理解吧,不对请指正
非FIFO模式时,产生中断条件如下:
1)每当发送保持寄存器为空时,将产生一个发送中断
2)每当接收缓冲寄存器满时,产生一个接收中断
FIFO模式时:
1)接收FIFO满时,引发接收中断
2)发送FIFO为空时,引发发送中断
所谓FIFO接收和发送触发水平,意思是(假设UFCON[7:6]=10,UFCON[5:4]=01):
1)当接收FIFO接收到8B时,产生一个接收中断
2)当发送FIFO里只剩下8B时,产生一个发送中断
移位寄存器是8位?
以上是我自己的理解,不知对否,请各位指点一下,呵呵!
谢谢了 答 3: 问题二还是不明白
问题一和问题三我觉得自己理解应该没错,不过问题二还是不明白。
为什么在pc上键入回车,uart接收到的不是'\n'而是'\r'呢?
各位,有知道的请发个话,呵呵。
谢谢哈 答 4: 贴子沉的太快了前天没看到.你用什么软件发的呢? 答 5: 没用什么软件,就是在网页上直接发
我就是直接发的啊,是沉得太快了。
前几天有人问我问题,我也是昨天才看到,感觉这里是很热闹,呵呵
难道还有专门的发帖软件? 答 6: 我问你用什么软件发的'\n'这个字符都怪我语文学的不好描述不清楚. 答 7: 没用什么软件啊呵呵,是我理解错了。
也没用什么软件啊,这就是44b0的一个测试程序,可以在pc上键入一个字符串,然后通过uart发给目标板,板子再通过uart回送给pc,在超级终端上显示出来。
例如,Uart_SendByte实现函数如下:
void Uart_SendByte(int data)//发送字符的实现函数
{
if(whichUart==0)
{
if(data=='\n')//如果输入回车
{
/* 如果发送缓冲寄存器中还有有效数据,则等待直到发送缓冲器中的数据都被发送出去,缓冲器为空; 如果UART使用FIFO,则应检查UFSTAT寄存器的Tx FIFO计数位UFSTAT0[7:4]和Tx FIFO(UFSTAT0[9])
满标志位,以代替检查该位 */
while(!(rUTRSTAT0 & 0x2));
Delay(10); //延时,因为超级终端的响应慢 WrUTXH0('\r');//为什么'\n'变为'\r'???
}
while(!(rUTRSTAT0 & 0x2)); //等待直到发送缓冲(保持)寄存器为 空(Wait until THR is empty).
Delay(10);//延时
WrUTXH0(data);//将字符写到UART发送缓冲(保持)寄存器
}
......
我就是在WrUTXH0('\r');那句不明白,为什么要把'\n'变为'\r'发送出去呢? 答 8: 直接送数据0x0a,0x0d不同编译系统对\n \r的理解是不同的。
有的是两个都送,有的送一个数字,顺序也可能不一样。
接受的时候也至判断数字,不要用\n \r 。这应应该就没问题了。
谁都没错,放在一起就错了。 答 9: 同意wangkj 答 10: 同意wangkj老兄我以前做只判断数值.
问题一:
UART有FIFO和非FIFO模式,在这两种模式下,分别是如何触发发送和接收中断的,也就是说,什么时候会引发中断?
UFCON[7:6]、UFCON[5:4]分别决定发送FIFO和接收FIFO触发条件,表示什么意思?是触发中断的条件吗???
我的看法:无论在FIFO模式还是非FIFO模式,发送中断都是在发送缓冲区变空时引发的,可不明白的是UFCON[7:6]作用是什么???
比如,UFCON[7:6]=10,是指发送FIFO中有8个字节时引发中断吗?
问题二:在pc键入'\n',在开发板uart接收到不是'\n',而是'\r',为什么???
问题三:
在FIFO模式下,FIFO和接收缓冲寄存器在读写顺序上是什么关系?以下是我的理解:
发送时过程:先将待发送的数据输出至FIFO,然后再由FIFO保存至发送缓冲寄存器,再通过发送移位寄存器发出去。
接收过程:先将接收移位寄存器中数据至接收FIFO,然后再保存至接收缓冲寄存器,用户读数据时,是从接收缓冲寄存器中读出???
发送保持寄存器和发送移位寄存器是两个不同的寄存器吧?
移位寄存器有多少位?
这几个问题困扰我好久,请各位点拨一下,谢了先 答 1: 帮忙啊,各位!
帮帮忙吧,谢谢了 答 2: 谈谈我自己的理解吧,不对请指正刚才看了下datasheet,谈谈我自己的理解吧,不对请指正
非FIFO模式时,产生中断条件如下:
1)每当发送保持寄存器为空时,将产生一个发送中断
2)每当接收缓冲寄存器满时,产生一个接收中断
FIFO模式时:
1)接收FIFO满时,引发接收中断
2)发送FIFO为空时,引发发送中断
所谓FIFO接收和发送触发水平,意思是(假设UFCON[7:6]=10,UFCON[5:4]=01):
1)当接收FIFO接收到8B时,产生一个接收中断
2)当发送FIFO里只剩下8B时,产生一个发送中断
移位寄存器是8位?
以上是我自己的理解,不知对否,请各位指点一下,呵呵!
谢谢了 答 3: 问题二还是不明白
问题一和问题三我觉得自己理解应该没错,不过问题二还是不明白。
为什么在pc上键入回车,uart接收到的不是'\n'而是'\r'呢?
各位,有知道的请发个话,呵呵。
谢谢哈 答 4: 贴子沉的太快了前天没看到.你用什么软件发的呢? 答 5: 没用什么软件,就是在网页上直接发
我就是直接发的啊,是沉得太快了。
前几天有人问我问题,我也是昨天才看到,感觉这里是很热闹,呵呵
难道还有专门的发帖软件? 答 6: 我问你用什么软件发的'\n'这个字符都怪我语文学的不好描述不清楚. 答 7: 没用什么软件啊呵呵,是我理解错了。
也没用什么软件啊,这就是44b0的一个测试程序,可以在pc上键入一个字符串,然后通过uart发给目标板,板子再通过uart回送给pc,在超级终端上显示出来。
例如,Uart_SendByte实现函数如下:
void Uart_SendByte(int data)//发送字符的实现函数
{
if(whichUart==0)
{
if(data=='\n')//如果输入回车
{
/* 如果发送缓冲寄存器中还有有效数据,则等待直到发送缓冲器中的数据都被发送出去,缓冲器为空; 如果UART使用FIFO,则应检查UFSTAT寄存器的Tx FIFO计数位UFSTAT0[7:4]和Tx FIFO(UFSTAT0[9])
满标志位,以代替检查该位 */
while(!(rUTRSTAT0 & 0x2));
Delay(10); //延时,因为超级终端的响应慢 WrUTXH0('\r');//为什么'\n'变为'\r'???
}
while(!(rUTRSTAT0 & 0x2)); //等待直到发送缓冲(保持)寄存器为 空(Wait until THR is empty).
Delay(10);//延时
WrUTXH0(data);//将字符写到UART发送缓冲(保持)寄存器
}
......
我就是在WrUTXH0('\r');那句不明白,为什么要把'\n'变为'\r'发送出去呢? 答 8: 直接送数据0x0a,0x0d不同编译系统对\n \r的理解是不同的。
有的是两个都送,有的送一个数字,顺序也可能不一样。
接受的时候也至判断数字,不要用\n \r 。这应应该就没问题了。
谁都没错,放在一起就错了。 答 9: 同意wangkj 答 10: 同意wangkj老兄我以前做只判断数值.
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |