This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TL16C754B:启用 FIFO 后、它将在向外发送数据时丢失数据?

Guru**** 2454880 points
Other Parts Discussed in Thread: TL16C754B

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/612774/tl16c754b-once-fifo-enabled-it-will-loss-data-while-sending-data-out

器件型号:TL16C754B

大家好、

我使用 TL16c754b 作为 UART 扩展。 当 FIFO 被禁用、中断被启用时、通过轮询 LSR 位5或位6直到变为高电平并发送下一个数据、它运行良好。 然而、当 FIFO 被启用时、等待直到通过将 LSR 位5或位6轮询 为高电平并发送下一个数据、数据是否会丢失?  例如、我将 ASCII 字符从"0"发送到"9"、但我不会接收"0"、"1"或"5"、等等。为什么?

硬件信息、DSP 6713作为控制器。EMIF CE3配置为异步8宽度。

软件代码如下(部分)。

int UART_SENDBYTE (unsigned int 端口、unsigned char 数据)

 volatile unsigned char 金像 stmp=0;
volatile unsigned char tmpst=0x0;
volatile unsigned char tmp=0x0、tmp1、tmp2;
volatile unsigned int lsr_falt;
 lsr_falt=*(unsigned int *)(bb00000000004);
 tmp1=*(unsigned char *)(base_uart +(端口<<(20-2))+ 0x4);
 tmp2=*(unsigned char *)(base_uart +(端口<<(20-2))+ 0x5);

 金像=*(volatile unsigned char *)(base_uart +(端口<<(20-2))+ UART_LSR);//
 tmpst=(金像堆&(<LSR_TRANSMIT_AND_SHIFT_EMPTY));//
 //tmpst=(金像&(<LSR_TRANSMIT_EMPTY));
 if (tmpst)//if 为空、然后发送
 {
  *(volatile unsigned char *)(base_uart +(端口<<(20-2))+UART_THR)=数据;
  return (Sendok);   
 }
 其他
 {
  lsr_falt=*(unsigned int *)(bb00000000004);
   tmp1=*(unsigned char *)(base_uart +(端口<<(20-2))+ 0x4);
 tmp2=*(unsigned char *)(base_uart +(端口<<(20-2))+ 0x5);
  RETURN (SENDERROR);
 }

int UART_SEND_BYTE_while (unsigned int 端口、unsigned char 数据)

 while (UART_SENDBYTE (port、data)!= Sendok);

MAIN ()

for (i=0;i<1000;i++)
   for (k='0';k<='9';k++)
   {
   UART_SEND_BYTE_while (UART1、k);
   
   }

//////////////////////////////////////////

这里有一些问题、

1、DSP 在200m 频率下工作、它是否太快? 但我尝试在两个发送之间延迟、不起作用

2、您能给我一个用于测试的参考代码吗?

3、当处于 FIFO 模式时、一旦 LSR 位5为1、那么我只向 THR 发送一个数据、这是否正常? 还是应该发送到 FIFO 已满?

4、我按如下方式初始化16C754、首先通过拉高复位来重置16c754、然后设置波特率、然后 MCR、FCR、IER、LCR、这是否正常?

5、

感谢详细的解释。 这对您有很大帮助。

此致、

Praveen GD

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我轮询了 LSR 一条消息、发现当为空(LSR 5为高电平)并发送下一个数据时、寄存器 LSR 位5或6在我向 THR 写入数据几次后将保持高电平、这是否不正常?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Tao

    很抱歉、但我不清楚问题。 LSR 寄存器用于读取、这意味着您无法写入它。
    我也不清楚您的代码。
    我将尝试回答您的问题。
    此器件的工作频率高达32MHz、因此我建议您使用小于此频率的频率。 我猜您发送的数据/IOW、/IOR 和必要信号都在这些频率范围内、它们不是吗?
    我建议测试并知道 UART 正在工作、首先应用复位并读取 LCR 和 LSR 寄存器、您必须具有1D 和60。
    3、就像你说的一样。
    4.听起来不错,但是你可以给我发送代码还是只发送你正在执行的指令?
    您在帖子第二部分提到的行为是正常的。

    此致
    弗朗西斯科
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Francisco、

    此问题现已解决。 通过降低总线的频率,FIFO 工作正常。

    原因可能是我对 IC 的写入速度太快、因此数据 不 会进入 IC。

    不过、我 还想知道总线时序的 FIFO 模式和非 FIFO 模式之间的区别吗?

    非常感谢

    此致

    TAO

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Tao

    很棒! 当您使用 FIFO 模式时、最多可以保存64字节;当您使用非 FIFO 模式时、您只能使用一个字节;如果在这两种情况下只发送一个字节、则时序是相同的。

    如果您有任何其他问题、请告诉我。
    此致
    弗朗西斯科