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:FIFO 中出现帧错误

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1077665/tl16c752c-framing-error-in-fifo

部件号:TL16C752C
“线程”中讨论的其它部件:TL16C752测试TL16C752D

您好,我目前正在将此64字节 FIFO (TL16C752)与 C6747 DSP 一起使用。 目前,我使用 FIFO 在50Hz (20毫秒周期)时接收26字节的定期消息。 我已从 INTA 设置中断以触发我的读取功能。 下面是 FIFO UART 的设置。

UART 设置:1个起始位,1个停止位,8个数据位,115200波特,无奇偶校验。  

输入 clk 为24MHz (XTAL1)

波特率= 24MHz (输入 clk)/1 (重新计算器)  /13 (DLL)/16

        = 115,385

/******************************************************** /

无效配置 Uart (无效)

SK_TL16C752_LCR |= 0x80;//启用除数寄存器

SK_TL16C752_DLL = 13;//将分隔值设置为13

SK_TL16C752_DLH = 0;

UINT8 DLL = SK_TL16C752_DLL;//读取分隔符的值
UINT8 DLH = SK_TL16C752_DLH;
UINT16分隔符= DLL | DLH <<8;

SK_TL16C752_LCR &= 0x7F;//禁用除数寄存器

//将单词长度设置为8位,1个停止,无奇偶校验,无中断 Ctrl,禁用除数器锁存
SK_TL16C752_LCR = 0x3;

SK_TL16C752_FCR |= 0x47;//触发时为16个字符

//启用 RHR 中断
SK_TL16C752_IER |= 0x01;

}

/*********************************************************** /

//接收功能

接收无效()

行动

tLSR = SK_TL16C752_LSR;//获取注册状态
log_printf(&TRAT),“tLSR:0x%x”,tLSR);

recv_BUF[RDATA_index]= SK_TL16C752_RHR;
log_printf (跟踪,"0x%x %x",RECV_BUF[RDATA_index],tLSR);
RDATA_index++;

} While ((((tLSR = SK_TL16C752_LSR)& 0x01));


log_printf (&trace,">>>>>>>>>>>>>>>>>> buf %d ",RDATA_INDEX);

}

/********************************************** /

结果如下:

1297 0x34 E1
1298 0x12 E1
1299 0xcd E1
1300 0xab E1
1301 0x16 E1
1302 0x0 E1
1303 0x11 E1
1304 0x0 E1
1305 0x1f E1
1306 0x1 E1
1307 0x0 E1
1308 0x0 E1
1309 0x0 E1
1310 0x0 E1
1311 0x80 E1
1312 0x80 E1
1313 0x80 E9
1314 0x80 E9
1315 0x80 E9
1316 0x80 E9
1317 0x80 E9
1318 0x80 E9
1319 0x80 E9
1320 0x80 E9
1321 0x3b E9
1322 0xe4 61.
1323 >>>>>>>>>> 女性26.
1324 0x34 E1
1325 0x12 E1
1326 0xcd E1
1327 0xab E1
1328 0x16 E1
1329 0x0 E1
1330 0x11 E1
1331 0x0 E1
1332 0x20 E1
1333 0x1 E1
1334 0x0 E1
1335 0x0 E1
1336 0x0 E1
1337 0x0 E1
1338 0x80 E1
1339 0x80 E1
1340 0x80 E9
1341 0x80 E9
1342 0x80 E9
1343 0x80 E9
1344 0x80 E9
1345 0x80 E9
1346 0x80 E9
1347 0x80 E9
1348 0xc7 61.
1349 0xFE 61
1350 >>>>>>> 女性26.
1351 0x34 E1
1352 0x12 E1
1353 0xcd E1
1354 0xab E1
1355 0x16 E1
1356 0x0 E1
1357 0x11 E1
1358 0x0 E1
1359 0x21 E1
1360 0x1 E1
1361 0x0 E1
1362 0x0 E1
1363 0x0 E1
1364 0x0 E1
1365 0x0 E1
1366 0x80 E1
1367 0x80 E1
1368 0x80 E9
1369 0x80 E9
1370 0x80 E9
1371 0x80 E9
1372 0x80 E9
1373 0x80 E9
1374 0x80 E9
1375 0x3f E9
1376 0xf9 61.
1377 >>>>>>> 女性26.
1378 0x34 E1
1379 0x12 E1
1380 0xcd E1
1381 0xab E1
1382 0x16 E1
1383 0x0 E1
1384 0x11 E1
1385 0x0 E1
1386 0x22 E1
1387 0x1 E1
1388 0x0 E1
1389 0x0 E1
1390 0x0 E1
1391 0x0 E1
1392 0x0 E1
1393 0x80 E1
1394 0x80 E1
1395 0x80 E9
1396 0x80 E9
1397 0x80 E9
1398 0x80 E9
1399 0x80 E9
1400 0x80 E9
1401 0x80 E9
1402 0xdb E9
1403 0xbe 61
1404 >>>>>>> 女性26.

我的预期消息是0x34 0x12 0xCD 0xAB 0x16 0x00 0x11 0x00 (2字节计数器)(14字节为零)(2字节校验和)

奇怪的是,我一直在消息中间看到0x80,我猜0x80是因为出现帧错误而停止位。 此外,末尾的校验和也不正确。 有什么想法可以解决这个问题?

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

    你好,阿尔文,

    感谢您对我们的设备提出问题。  

    我对您提供的代码有几个问题:

    您是否通过软件或硬件执行回路测试?  

    [引用 userid="510159" url="~ë/support/interface-group/interface/f/interface-forum/1077665/tl16c752c-fring-error-ifio"]SK_TL16C752_FCR |= 0x47;//触发器,16个字符

    这一行代码似乎启用了传输和接收 FIFO,清除了 FIFO,设置了 DMA 模式=0,TX FIFO 为8个空格,RX FIFO 为4个字符。 请问您是如何找到“触发器为16个字符?”  

    在您的代码中:

    1297 0x34 E1
    1298 0x12 E1
    1299 0xcd E1
    1300 0xab E1...

    我的解释是否正确?  

    [行号][RHR][LS]  

    0xE1表示 FIFO 中至少有1个奇偶校验/帧/中断指示。  

    0xE9表示与 E1相同,但在读取数据时出现帧错误-(接收到的数据没有有效的停止位)

    0x61是唯一一种没有错误的情况。

    我要突出显示 LSR = 0xE9。 似乎存在停止位帧错误,接收器在该错误中未收到有效的停止位。 本设备确实有一个简短的勘误表。 您可以 在此处找到该勘误表。 一个修复方法是切换到此设备的"D"版本(TL16C752D)。 或者,您可以尝试按照勘误表中的协议来修复停止位问题。 尝试将除数减少1。 不要使用除数=13,而是尝试使用除数=12。 这将提高波特率,并尝试稍快采样数据,可能捕获停止位。  

    此致,

    泰勒

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

    您好,泰勒

    感谢您的回复!

    [引用 userid="450801" url="~ë/support/interface-group/interface/f/interface-forum/1077665/tl16c752c-fring-error-in fifo/3989415#3989415"]您是否通过软件或硬件执行回路测试?

    我正在进行硬件测试。

    [引用 userid="450801" url="~/support/interface-group/interface/f/interface-forum/1077665/ tl16c752c-fring-error--in-fifo/3989415#3989415"]这一行代码似乎启用了 FIFO 的传输和接收功能,并清除了 FIFO,为 TX FIFO 设置了 DMA 模式=0,8个字符和4个字符。 请问您是如何找到“触发器为16个字符?”

    没错。 触发器16个字符是我可以使用的最小值,可以获得所需的正确标头。 事实上,我尝试了8个用于 RX 的字符,但无法在消息中获取标题,因此我使用了16个字符。

    我尝试使用除数12,但它在我的消息中混淆了我的标题。 这是否意味着只有“D”版本才能解决我的问题?

    以下是使用除数12的结果。


    1767 0x34 E9
    1768 0x12 E9
    1769 0x8d E1
    1770 0x6b E1
    1771 0x16 E9
    1772 0x0 F9
    1773 0x11 E9
    1774 0x0 F9
    1775 0x8b E9
    1776 0x1 E9
    1777 0x0 F9
    1778 0x0 F9
    1779 0x0 F9
    1780 0x0 F9
    1781 0x0 F9
    1782 0x0 F9
    1783 0x0 F9
    1784 0x0 F9
    1785 0x0 F9
    1786 0x0 F9
    1787 0x0 F9
    1788 0x0 F9
    1789 0x0 F9
    1790 0x0 F9
    1791 0x6b E9
    1792 0xF E9
    1794 >>>>>>>
    1795 0x34 E9
    1796 0x12 E9
    1797 0x8d E1
    1798 0x6b E1
    1799 0x16 E9
    1800 0x0 F9
    1801 0x11 E9
    1802 0x0 F9
    1803 0x8c E9
    1804 0x1 E9
    1805 0x0 F9
    1806 0x0 F9
    1807 0x0 F9
    1808 0x0 F9
    1809 0x0 F9
    1810 0x0 F9
    1811 0x0 F9
    1812 0x0 F9
    1813 0x0 F9
    1814 0x0 F9
    1815 0x0 F9
    1816 0x0 F9
    1817 0x0 F9
    1818 0x0 F9
    1819 0x74 E1
    1820 0xe7 E9

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

    你好,阿尔文,

    [引用 userid="510159" url="~ë/support/interface-group/interface/f/interface-forum/1077665/tl16c752c-framing -error-in fifo/3991189#3991189"]我正在进行硬件测试。

    好的。 因此,752C 上的 TXD 和 RXD 针脚电气短路。

    您能否确保我对您的代码的解释正确?

    1795 0x34 E9
    1796 0x12 E9
    1797 0x8d E1
    1798 0x6b E1

    [行号][RHR][LS]  

    [引用 userid="510159" url="~ë/support/interface-group/interface/f/interface-forum/1077665/tl16c752c-fring-error-In-fifo/3991189#3991189"]

    没错。 触发器16个字符是我可以使用的最小值,可以获得所需的正确标头。 事实上,我尝试了8个用于 RX 的字符,但无法在消息中获取标题,因此我使用了16个字符。

    [/引用]

    我知道你正试图在16个字符处触发。 我看到你设置了 FCR = 0x47h。 这意味着 FCR[7:6]= 01 = 4个字符。 您能解释一下您是如何得出总共16个字符的?  

    [引用 userid="510159" url="~ë/support/interface-group/interface/f/interface-forum/1077665/tl16c752c-framing -error-in fifo/3991189#3991189]I 尝试使用除数12,但它在消息中混淆了我的标题。 这是否意味着只有“D”版本才能解决我的问题?

    看起来,该代码所造成的错误比以前多得多。 让我们尝试将遮阳板移回13。 这次,配置 UART 帧以生成2个停止位,而不是1个。 如果我们的问题只是一个短暂的停留,“D”版本可能会解决您的问题。 此设备的“D”版本更正了短停止位勘误表。 如果您的问题不是一个短暂的停留,那么订购"D"版将不会有什么作用。

    此致,

    泰勒