找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

各位牛友,请问手册上说15字节的FIFO怎么理解

[复制链接]
跳转到指定楼层
楼主
fan168668 发表于 2014-1-13 09:23:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看新塘的技术手册关于发送数据缓存与接收数据缓存,有15字节的FIFO,那么是不是说一次最多只能发送/接收15字节的数据呢?DrvUART_Write(UART_PORT1,string,24);(string[24]={0x21,0x22,......,0x45};)这样会不会溢出呢?实际运行证明,可以实现功能的。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

沙发
bkn1860 发表于 2014-1-13 10:10:19 | 只看该作者
一次可以连续发送或者接收15个字节数据,多于15个字节的时候可以分次发送或者接收
回复 支持 反对

使用道具 举报

板凳
 楼主| fan168668 发表于 2014-1-13 10:21:12 | 只看该作者
bkn1860 发表于 2014-1-13 10:10
一次可以连续发送或者接收15个字节数据,多于15个字节的时候可以分次发送或者接收 ...

这里的分次发送或者接受是咱们自己写程序来实现:比如DrvUART_Write(UART_PORT1,string1,15);DrvUART_Write(UART_PORT1,string2,9);(string1[15]={0x21,0x22,......,0x36}  string2[9]={0x37,0x38,......,0x45};),就是把原来的指令分成两部分来发。还是芯片自动识别指令然后分次发送或接受呢
回复 支持 反对

使用道具 举报

地板
bkn1860 发表于 2014-1-13 10:26:43 | 只看该作者
这里的分次是自己用程序来实现
回复 支持 反对

使用道具 举报

5#
 楼主| fan168668 发表于 2014-1-13 10:34:15 | 只看该作者
bkn1860 发表于 2014-1-13 10:26
这里的分次是自己用程序来实现

看来我得修改一下程序了
回复 支持 反对

使用道具 举报

6#
 楼主| fan168668 发表于 2014-1-13 10:38:55 | 只看该作者
bkn1860 发表于 2014-1-13 10:26
这里的分次是自己用程序来实现

可是我用UART0口与外接触摸屏之间的通信,有很多指令都是超过15字节的额,并没有分次发送,功能照常实现啊!
回复 支持 反对

使用道具 举报

7#
bkn1860 发表于 2014-1-13 10:50:58 | 只看该作者
你往15个FIFO写入的过程数据也在发送,你一次性写入的数据超过15个那有可能是已经有数据发送出去了刚好填补了空出来的FIFO。如果有数据丢失的情况出现那这里出问题的可能比较大。
回复 支持 反对

使用道具 举报

8#
a_ziliu 发表于 2014-1-13 21:33:34 | 只看该作者
In the function, it has checked tx fifo is empty, fifo empty transfer data to uart fifo.

int32_t DrvUART_Write(E_UART_PORT        u32Port,uint8_t        *pu8TxBuf,         uint32_t u32WriteBytes)
{
    uint32_t  u32Count, u32delayno;

        UART_T * tUART;

        tUART = (UART_T *)((uint32_t)UART0 + u32Port);  

    for (u32Count=0; u32Count<u32WriteBytes; u32Count++)
    {
       u32delayno = 0;
           while (tUART->FSR.TE_FLAG !=1)                                                            /* Wait Tx empty and Time-out manner */       {
                   u32delayno++;
                   if ( u32delayno >= 0x40000000 )                 
                      return E_DRVUART_ERR_TIMEOUT;                    
                                  
       }
           tUART->DATA = pu8TxBuf[u32Count];                                                /* Send UART Data from buffer */
    }

    return E_SUCCESS;
       
  
}
回复 支持 反对

使用道具 举报

9#
 楼主| fan168668 发表于 2014-1-14 15:52:10 | 只看该作者
a_ziliu 发表于 2014-1-13 21:33
In the function, it has checked tx fifo is empty, fifo empty transfer data to uart fifo.

int32_t D ...

等到发送数据缓存区空了再发是吗?这个函数内部就自己判断了
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU