搜索
bottom↓
回复: 19

【AT32UC3A惊人BUG】AVR32-UC3A0512之USART0测试(EVK1100实验板)-硬件无BUFFER接收

[复制链接]

出0入0汤圆

发表于 2010-6-23 17:25:23 | 显示全部楼层 |阅读模式
【AT32UC3A惊人BUG】AVR32-UC3A0512之USART0测试(EVK1100实验板)-硬件无BUFFER接收字符串  
   这几天进行USART0测试(EVK1100实验板)-运行AVR32 Studio自带的Usart Example例程,用串口调试助手显示,修改程序为和串口助手实现双向USART0发送字符串通讯,结果显示AVR32-UC3A0512可以连续发送字符串出去但只能接收到一个字符,无法接收完整的字符串。
  按照芯片PDF手册其中接收用到的RHR寄存器也是表示接收最后一个字符。
  AVR32驱动库SOFTWARE_FRAMEWORK里面的UART函数usart.c 和usart.h 里面也没有字符串接收这个函数
  难道AVR32的串口没有FIFO buffer? 经过读其硬件AT32UC3A.pdf手册部分,发现根本就无BUFFER接收发送过来的字符串,只能接收到最后的一个字符,严重打击工程师对AVR32的研究热情,也许是芯片设计上的败笔或者有其他的办法!
  相比之下,8位的AVR单片机的UDR寄存器就可以完全接收到一串数据,,这样通讯和使用起来才方便!
  不知道  Gorgon Meducer 是怎么样解决字符串接收问题的?

出0入0汤圆

发表于 2010-6-23 18:25:55 | 显示全部楼层
我对lz无语了
没看见有接收完成中断呀

出0入618汤圆

发表于 2010-6-23 18:27:14 | 显示全部楼层
8位AVR有FIFO?!

出0入618汤圆

发表于 2010-6-23 18:35:31 | 显示全部楼层
就算不用中断,轮询CSR的RXRDY位为1时读RHR,也不至于无法接收字符串呀,这是搞单片机的基本常识了吧。
况且还有PDCA,一次收个64KB字符串都不成问题吧……

出0入0汤圆

 楼主| 发表于 2010-6-23 18:59:24 | 显示全部楼层
非常高兴听到否定我的观点!
  
  我的意思是AVR32轮询CSR的RXRDY位为1时读RHR,每次(中断接收完成RXRDY位为1时)只能收到一个字符,而不是一串字符,这样很不方便!

  由于串口无接收buffer(保存接收到的数据),调用PDCA来处理也是很不方便的,有没有可以一次性收串口寄存器中多个字符串的方法?这样也方便使用。

出0入618汤圆

发表于 2010-6-23 20:11:59 | 显示全部楼层
回复【4楼】21_MCUEL  
-----------------------------------------------------------------------

奇怪了,大部分单片机的USART都没有FIFO,你原来用的什么MCU啊?

出0入0汤圆

发表于 2010-6-23 20:20:49 | 显示全部楼层
哈哈哈哈,又见牛人,学习了!

出0入0汤圆

发表于 2010-6-23 21:00:07 | 显示全部楼层
就算没有FIFO,也不能说是BUG呀

出0入618汤圆

发表于 2010-6-24 00:03:50 | 显示全部楼层
以下是我写的RT-Thread for AVR32串口设备驱动片段,轮询读指定长度(size)的内容到指定缓冲区(buffer)中,你参考一下。

/* polling mode */
while ((rt_uint32_t)ptr - (rt_uint32_t)buffer < size)
{
    while (usart_test_hit(uart->uart_device))
    {
        *ptr = uart->uart_device->rhr & 0xff;
        ptr ++;
    }
}

完整文件可直接到代码库中看:http://code.google.com/p/rt-thread/source/browse/trunk/libcpu/avr32/uc3/serial.c
另外,如果你有时间,不妨试用一下RT-Thread AVR32 port,应该比FreeRTOS更容易上手。

出0入0汤圆

发表于 2010-6-24 00:19:38 | 显示全部楼层
标题牛,所以近来看看

出0入618汤圆

发表于 2010-6-24 11:39:11 | 显示全部楼层
自己写一个很难么?

出0入296汤圆

发表于 2010-6-24 12:41:53 | 显示全部楼层
【楼主位】 21_MCUEL
    我眼里只有Stream,没有字符串……流处理我习惯用“单字节+状态机”,所以
我不会遇到你说的问题。站在你的角度,什么是字符串,这个要依靠状态机的逻辑
来确定。

出0入0汤圆

发表于 2010-6-24 16:28:24 | 显示全部楼层
请问楼主你以前用的是什么单片机?怎样做到一次收到一个字符串的?
你不会以为这个跟在PC上用VB或者Delphi之类的接收串口数据是一样的吧?

出0入0汤圆

发表于 2010-6-24 17:47:33 | 显示全部楼层
弱弱的说一句,你自己的程序,进一次中断程序就能收光所有数据?那真是NB了.......

出0入147汤圆

发表于 2010-6-24 18:10:33 | 显示全部楼层
这个BUG确实很惊人~~

出0入0汤圆

 楼主| 发表于 2010-6-24 19:41:33 | 显示全部楼层
找到答案了。
总结:
  1.采用轮询的方法/* polling mode */ (RXRDY位为1)时接收的方法测试几天都实现不了,只能正确收到一个字符,接收2个以上字符就死机了!估计出现部分后面数据覆盖前一个数据问题。
  2.最后在Gorgon Meducer 傻孩子发表的帖子
      http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1879031&bbs_page_no=5&bbs_id=1030
  用中断触发,进入中断处理程序接收数据的方法经过试验,所有数据都可以保存到自定义数组里面了!
  3.对AVR32认识有待提高!现在也不能修改标题了,惊人BUG说法欠妥,特致歉!

  故完美解决,结贴!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-4 20:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表