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.

[参考译文] TL16C752C:无法从设备中获取RX数据,始终返回零

Guru**** 2468610 points
Other Parts Discussed in Thread: TL16C752C

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/581230/tl16c752c-not-able-to-get-rx-data-out-of-device-always-returns-zeros

部件号:TL16C752C

您好,TI 团队:

TL16C752C Duart A已与C6711 DSP映射,Duart芯片已配置为3.84万波特率,1个停止位,奇偶校验为无。 它也已在FIFO模式下配置。 我正在从PC传输一些虚拟数据以测试通信。 LSR寄存器正在更新Duart已在其Rx缓冲区中接收到一些数据,但RHR寄存器始终提供0 (十进制)数据。

我们还使用示波器跟踪了UART A的芯片选择引脚,并且工作正常。

另一个更新是-这是旧系统,之前我们使用的TL16C752B部件和代码对该部件运行良好。

请尽早更新。

此致,

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

    我们将很快回复您。 我们这方面的专家将于明天休假回来,他们应该能够帮助指导您朝着正确的方向前进。 很抱歉耽误你的时间。

    最大
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们没有收到任何人关于此发布的消息。 我们对这一问题持保留意见。 没有这种Duart功能,我们无法继续集成。 我们能得到支持!!!!!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Tom

    很抱歉我的耽误你的时间。 您是否可以共享有关配置的模式详细信息? 看起来你有一个溢出,但是如果这个在B版本中没有发生,我想知道更多的细节比如:VCC,时钟频率,振幅。
    B版本的工作电压最高可达3.3 V,而C和D版本的工作电压最高可达5 V

    请告诉我这些信息。

    此致
    弗朗西斯科
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的固件工程师离开了我是EE。 我们正在使用+3.3V,但在部分是可以的。 我有一个外部晶体,它是稳定的14.7456MHz。

    我们正在使用PC将TX数据发送到设备。 我在引脚5处有一根测试导线,并在那里查看我们的数据。 当SW工程师看到LSR寄存器时,LSR寄存器提供的值为0x61,它更新Rx FIFO中存在的数据,并且不存在任何奇偶校验,溢出和帧错误。 当他阅读RHR注册表时,它只提供了0的... 他发送了9个字节,每次寄存器指示数据存在时,他检测到收到9个位。

    当数据来自Duart的并行端口端时,数据可以从Duart传输。因此,我们相信Duart的这一端正在运行。

    我们正在使用通道A和B,用于对DSP进行编程的通道A,通道B与蓝牙模块连接。

    我们在针脚36处有一个外部重置信号。 它是稳定的,由监控芯片生产。

    我相信我的固件工程师已查看过发布的勘误表,并相信此勘误表不会导致此问题。

    我们以前使用TL16C752B没有问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Tom感谢您的反馈。

    我可以理解,CHA和CHB的工作方式与接收器相似,而UART的编程方式也相同。
    那么,请您解释一下如何对波特率进行编程?
    您能否确认注册DLL和DLH是否具有您在通信前后编程的值?
    您能否确认重置引脚是否处于低电平状态?
    您能否在通信之前添加额外的重置?
    您能否发送LCR寄存器的值?
    预分数值是多少?
    您是否将此设备安装在插座中?

    我提出这些问题是为了更好地了解问题,并为您提供最佳建议。

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

    来自TOM...

    IC焊接在板上。 应用于部件的重置来自超级视频集成电路。 电源正常后,重置将取消确认。
    我们不能在不关闭电源的情况下应用第二次重置。 复位处于活动状态,高电位

    我已包括波特率功能

    预分值为1。

    我将在稍后确认DLL,DLH和LCR寄存器的值并更新您的信息。

    此致,
    Anuj


    我们如何将文件附加到发布中?



    Bool UART_SetBaud( UART_PORT端口,
    UART_Baud (波特波特率)

    UINT8 ByVal;
    UINT8 (由DivisorL提供);
    UINT8 byDivisorH;
    UINT8 *pDuart;

    //选择端口
    交换机(端口)

    案例UART_A:
    pDuart = gv_pDuartA;
    中断;

    案例UART_B:
    pDuart = gv_pDuartB;
    中断;

    默认:
    返回false;
    }


    //////////////////////////////////////////////////////////////
    //为正确的波特率设置不同的程序

    交换机(波特)

    案例UART_B300:
    byDivisorH = 0x0C;
    byDivisorL = 0x00;
    中断;

    案例UART_B600:
    byDivisorH = 0x06;
    byDivisorL = 0x00;
    中断;

    案例UART_B1200:
    byDivisorH = 0x03;
    byDivisorL = 0x00;
    中断;

    案例UART_B2400:
    byDivisorH = 0x01;
    byDivisorL = 0x80;
    中断;

    案例UART_B4800:
    byDivisorH = 0x00;
    byDivisorL = 0xC0;
    中断;

    案例UART_B9600:
    byDivisorH = 0x00;
    byDivisorL = 0x60;
    中断;

    案例UART_B1.92万:
    byDivisorH = 0x00;
    byDivisorL = 0x30;
    中断;

    案例UART_B3.84万:
    byDivisorH = 0x00;
    byDivisorL = 0x18;
    中断;

    案例UART_B5.6万:
    byDivisorH = 0x00;
    byDivisorL = 0x10;
    中断;

    案例UART_B11.52万:
    byDivisorH = 0x00;
    byDivisorL = 0x08;
    中断;

    默认:
    返回false;
    }

    //访问时钟频率除数
    ByVal = pDuart[Duart_LCR];
    pDuart[Duart_LCR]= 0x80;

    //设置除数
    pDuart[Duart_DLL]= byDivisorL;
    pDuart[Duart_DLH]=由DivisorH;

    //恢复正常操作
    pDuart[Duart_LCR]= ByVal和~0x80;

    //运行良好
    返回true;
    }//结束UART_SetBaud
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Tom

    您可以使用"使用丰富格式"部分附加内容,我希望看到您的连接图。 您是否还可以附加正在编程UART的订单? 正如您在LCR中使用0x80时所说的,您有5个传输或接收的位,这些位数是从PC发送到UART的吗? 您使用的是1个停止位,不是奇偶校验。
    请附加文件,我将进行检查。

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

    程UART的e2e.ti.com/.../UART.ce2e.ti.com/.../GDS_5F00_-DUART.pdfe2e.ti.com/.../NEO_2D00_03_2D00_004_2D00_SCH_5F00_-DUART.pdfOrder:

    调用以下函数来编程UART:

    UART_Initialize(.

                    UART_A,                                //主数据端口

                    UART_B3.84万,                          // 3.84万 bps

                    UART_PARTICE_NONE,                  //不奇偶校验

                    UART_DATA_Bits_8,                   // 8个数据位

                    UART_STOP_Bits_1);                  // 1停止位

    上述函数的定义存在于附加的“UART.c”文件中。

    我正在将0x80写入LCR寄存器以启用Divisor闩锁,并且我正在将此位( LCR的第7位)重置回LCR的先前状态。 我正在将9字节的数据从PC直接传输到Duart芯片的Rx引脚。

    附上以下内容:

    UART.C

    Neo-03-004-SCH_Duart示意图页

    GDS_Duart示意图页面

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

    我正在分析您的信息,当我对该问题有更多了解时,我会再回复您。

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

    我不知道是否可能,但我想知道您是否可以进行小测试? 此测试将使用环回模式,在此模式下,您将看不到Tx或RX中的信号。 您将在内部将相同UART中的数据从TX发送到RX。
    代码为
    LCR (0x03)=> 0x80 //激活除数值
    dll (0x00)=> 0x18 //低部分,您的boud rate的值38.
    DLH (0x01)=> 0x00 //高部分
    LCR (0x03)=> 0x07 //无奇偶校验,8位,1停止位
    MCR (0x04)=> 0x14 //环回模式启用和FIFO启用
    FCR (0x02)=> 0x06 //重置TX和RX FIFO
    FCR (0x02)=> 0x09 // DMA模式启用和FIFO启用
    thr (0x00)=>值//要共享的值
    RHR (0x00)=>读取值

    此活动将在UART A中进行。请测试此活动并告诉我您的反馈。

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

    我执行了相同的代码来传输0xAA,但我只从RHR寄存器接收0。 附加图像是代码段。 我还附上了UART.h文件,该文件提供了所有Duart寄存器的索引。

     

    此致,

    Anuje2e.ti.com/.../UART.h

    我从使用相同源代码的旧主板(带有TL16C752B)和新主板(带有TL16C752C)读取Duart配置寄存器,并且新的Duart寄存器值与旧的Duart寄存器值不匹配。 在新的GDS板中,我正在将Duart配置为8个数据位,1个停止位和无奇偶校验,但当我重新读取配置寄存器时,它会将配置更新为7个数据位,2个停止位甚至奇偶校验。

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

    非常感谢您的反馈! 我想知道,如果可能的话,当你在UART中写入数据时,如果可以的话,可以获得一些信号A[0],/CS,/IOW和D[0]的示波器的屏幕截图,当你阅读时,使用/IOR而不是/IOW。 请仔细检查Vcc针脚中的电压水平,复位(必须为低电平)以及XTAL信号的振幅。 对于您的注释,UART似乎不接收数据。 当您开始对UART进行编程时,首先检查寄存器0x03 (LCR),这一个必须具有0x1D值。 如果您以前可以确认,请继续对我发送给您的最后一个代码进行编程。 我和您一样有类似的设置,我没有任何问题。

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

    您好 Francisco:

    我是从事此项目的固件工程师。

    我们确认了Vcc引脚,Rx和Tx引脚处的电压水平,它是3.3 伏特。 我们还确认了重置线路及其0 V。我已附加"Rx data.jpg" image,该图像显示Rx线路的电压水平。

    我还按照您的建议验证了LCR寄存器值,并将该值读取为0x54。 以下屏幕提供了调试模式下的代码和读出的值。

    我们使用逻辑分析器进行了验证,以下是屏幕:

    上图还更新了IOR,IOW,数据线,地址线和芯片选择线。

    关于此问题的另一个更新是-正如我所说的,我们使用的是带有TL16C752B 部件的旧工作板,因此我们将旧板上的TL16C752B部件更换为另一个新的TL16C752C部件,旧板可以完美地接收和传输数据。 即使我使用旧主板(带有TL16C752C Duart部件)执行了此回路测试代码,此测试也通过了。

    此致,

    Anuj

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

    您好Anuj

    对于寄存器的值,它看起来工作不正常,但对于您的信号,它看起来工作正常。

    您是否测试了相同版本的其他样本? 您是否知道是否有必要使用C版本? 因为我们最新的设备是D版本。

    如果可能,您可以使用此版本进行测试吗?

    当您在某些寄存器(如LCR)中读取不同的值时,问题在于电源或时钟振幅或频率,但在这种情况下一切看起来都正常。

    因此,在我看来,您可以使用我们的版本D测试其他样品或测试

    请告诉我您的意见

    此致

    弗朗西斯科

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

    您好Anuj

    请问您有没有这方面的消息? 您是否测试过我们的版本D?

    请告诉我
    此致
    弗朗西斯科

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

    您好Francisco:

    我们尚未测试版本D部件,但今天我测试了版本C部件的中断线路,下面是我的测试案例和结果:

    情况1:接收中断未启用,在循环期间读取IIR寄存器,直到中断被清除
    下图显示了代码,它是我们之前共享的UART.c文件的一部分:

    结果:

    RX线始终为高

    中断线路始终为低电平

    芯片选择线因功能而降低

    IIR寄存器返回的值为0x3B (不确定它所描述的内容),并且中断从未被清除,因此如果while循环则不会输出。

    下面是逻辑分析器图像,其中Rx行显示为"RX",芯片选择行显示为"CSA",中断行显示为"INT A"。 我还跟踪了ce0 -接口到SDRAM,CE1 -接口到闪存,CE2 -接口到FPGA,CE3 -接口到FPGA,生成CSA信号,CSA信号输入到Duart芯片。

    案例2:

    继续案例1,通过PC连续传输数据,

    结果:

    IIR寄存器返回相同的值0x3B。
    Rx行显示通过PC传输的数据。
    中断线始终为低。

    案例3:

    已启用接收中断,然后读取IR寄存器,同时循环,直至中断被清除
    下图显示了代码:

    结果:

    Rx行显示PC发送的数据
    中断较高
    IIR寄存器提供相同的值0x3B,中断从未被清除,因此不会从while循环中出来。
    芯片选择线因功能而降低
    以下是逻辑分析器图像:

    请检查并分析上述情况中提及的IIR寄存器的值。

    谢谢!

    Anuj

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

    感谢您的反馈,这是一个非常好的测试!
    我知道您从一开始就告诉我,此界面和程序与我们的上一个版本兼容,但我不知道是否可以执行相同的测试,但已采集:Data[0:7],CSA,IOR,IOW,RxA, INTA,地址[0:2]。
    我在代码中没有看到当你想读或写时你必须发送逻辑0的部分。 IIR寄存器的值很奇怪,因为默认值是0x01,如果您开始读取UART而不进行任何配置,则必须读取此值对于LCR寄存器,您必须读取0x1D。
    我仍在这里测试并分析正在发生的情况。

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

    请告诉我您是否有一些反馈。

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

    您好Francisco:

    以下是与DSP C6711的EMIF接口的摘要:

    SDRAM已映射到0x8000 0000地址与旧系统相同,ECLCKOUT为100 MHz

    闪存已映射到0x9000 0000地址,与旧系统相同

    FPGA已映射到0xA000地址,与旧系统相同

    Duart已在0xB000处映射,地址与旧系统相同。

    DSP的CLKIN为150 MHz。

    我今天上午进一步调试 了这个问题,我正在查看内存地址0xB0万0,以使用Code Composer Studio 3.0 IDE的“查看内存”选项了解Duart寄存器的值。 我使用断点逐行执行回环代码。 最初,回送代码将0x80值写入LCR寄存器,我可以看到该值正在0xB000地址位置的第四字节写入。 然后,在回环测试代码中写入DLL和DLH后,LCR将使用0x03写入,并且此0x03也已在0xB0万0位置的第四字节成功写入。 完成此步骤后,MCR将使用0x14值进行更新。 在MCR中写入0x14值后,我再次验证了0xB0万0地址位置,并且LCR值从0x03完全更改为其他值。  

    我对旧系统上的旧Duart部件执行了上述测试代码,但这种LCR值损坏并未发生。 请您推荐一些对本测试案例结果有帮助的建议。

    当我执行上述测试案例时,最初我能够调试代码,但后来没有进行调试。 main()函数从未出现调试。 正在使用相同的源代码和GEL文件的旧系统上进行调试。 请您也帮助解决此问题。

    此致,

    Anuj

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

    您好Francisco:

    由于我们必须开始制作板材,所以我们必须尽早解决这问题。 是否可以通过电话讨论此问题,或者如果TI FAE可以在我们的站点调试此问题,也会对我们有所帮助。

    调试器问题已完全阻止我们继续进一步调试UART问题。

    此致,

    Anuj

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


    我认为打电话可能非常有用。 请给我发一封电子邮件到Francisc.Zamudio at ti .com,我们可以安排会议。

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

    感谢您进行通话中的讨论。

    根据我们的讨论,我们连接了另一个电路板,并读出LCR和IIR寄存器的默认配置值,零件不提供相应的默认值"1D"和"01"。 此外,我从PC向主板传输了一些字节,但它仍在接收“0”。

    然后我们卸下TL16C752C部件并安装TL16C752B部件并验证其功能。 这种组合(新设计+旧Duart零件)运行良好。 DSP正在接收发送至Duart芯片的数据。

    您可以更新吗- TL16C752C部件是TL16C752B的完美取件和跌落部件吗? 我们是否需要修改固件以支持TL16C752C部件?

    您是否希望我们提供不工作的TL16C752C芯片供您分析?

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

    非常感谢您的反馈,我将通过电子邮件向您发送详细信息。 让我在您的样品到达时检查一下,我会向您发送我们的反馈。 我们必须分析样品。

    此致
    弗朗西斯科