打印

M051 的 UART0的FIFO是多少bytes

[复制链接]
4205|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
雨下枫|  楼主 | 2011-7-15 16:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 雨下枫 于 2011-7-15 16:53 编辑

大侠我在使用官方提供的库时,测试UART0的中断接收时,发现它的FIFO只有16bytes(之所以这么说是因为我通过PC发送超过16bytes的数据时,就只能接收显示16bytes的数据而且第1byte字符会被最后一个字符给覆盖)。而资料上却说UART0有64bytes的FIFO。请问是提供的Smpl_DrvUART.c函数中有可以设置FIFO大小的,而我没发现,还是说对于有些器件UART0的FIFO就是16bytes?
在线的大侠请指教!急需答案!

相关帖子

沙发
john_lee| | 2011-7-15 17:03 | 只看该作者
M051:
    独立的接收/发送15字节 (UART0/UART1) FIFO数据装载区。
NUC1xx:
    独立接收 / 发送 63/15/15 字节 (UART0/UART1/UART2) FIFO,用于装载数据

使用特权

评论回复
板凳
雨下枫|  楼主 | 2011-7-16 13:33 | 只看该作者
另问:M051的UART中断处理函数如下:
void UART_INT_HANDLE(uint32_t u32IntStatus)
{

        uint8_t bInChar[1]={0xFF};
       

        if(u32IntStatus & DRVUART_RDAINT)
        {
                printf("\r\nInput:");
               
                /* Get all the input characters */
                while(UART0->ISR.RDA_IF==1)
                {
                        /* Get the character from UART Buffer */
                        DrvUART_Read(UART_PORT0,bInChar,1);

                        printf("%c ", bInChar[0]);
                       
                        if(bInChar[0] == '0')       
                        {       
                                g_bWait = FALSE;
                        }
               
                        /* Check if buffer full */
                        if(comRbytes < RXBUFSIZE)
                        {
                                /* Enqueue the character */
                                comRbuf[comRtail] = bInChar[0];
                                comRtail = (comRtail == (RXBUFSIZE-1)) ? 0 : (comRtail+1);
                                comRbytes++;
                        }                       
                }
                printf("\r\nTransmission Test:");
        }
        else if(u32IntStatus & DRVUART_THREINT)
        {   
                  
        uint16_t tmp;
        tmp = comRtail;
                if(comRhead != tmp)
                {
                        bInChar[0] = comRbuf[comRhead];
                        DrvUART_Write(UART_PORT0,bInChar,1);
                        comRhead = (comRhead == (RXBUFSIZE-1)) ? 0 : (comRhead+1);
                        comRbytes--;
                }
        }

}

那为什么我接收时会出现如下现象:


+-----------------------------------------------------------+

|               UART Sample Program                         |

+-----------------------------------------------------------+

| UART function test                                  - [1] |

| IrDA funtion test                                   - [2] |

| RS485 Receive funtion test                          - [3] |

| RS485 Transmit funtion test                         - [4] |

+-----------------------------------------------------------+

| Quit                                                    - [ESC] |

+-----------------------------------------------------------+

Please Select key (1~4): 1

UART Sample Demo. (Press '0' to exit)



Input:u

Transmission Test:

Input:t r t   i n t e r r u p t   t e

Transmission Test:utrt interrupt te

请注意红色这体部分,接收程序和实际接收的数据不符?
我通过PC发送的数据为uart interrupt test,之所以会少了,这个在前面已经说到过,这里要讨论的是为什么会输出两次的input,两次的transmission test。按我的理解应该只出现一次。
感觉上是                while(UART0->ISR.RDA_IF==1) 这条语句在做第二次判断的时候不成立,所以才会退出while循环。请问这是为什么呢?还有单步的时候没发现这个问题!

使用特权

评论回复
地板
雨下枫|  楼主 | 2011-7-18 08:40 | 只看该作者
新唐的FAE上哪了,进了解释一下!

使用特权

评论回复
5
giant0913| | 2011-8-22 14:55 | 只看该作者
我也正在纳闷 4# 雨下枫

使用特权

评论回复
6
maoyanketi| | 2011-8-23 13:51 | 只看该作者
不懂啊,帮顶

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

466

帖子

3

粉丝