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.

[参考译文] TL16C752D:在初始化期间写入和读取寄存器

Guru**** 2392535 points
Other Parts Discussed in Thread: TL16C752D

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/755879/tl16c752d-writing-and-reading-the-registers-during-initialization

器件型号:TL16C752D

我正在使用我的 Atmega2560处理器对 TL16C752 UART 中的寄存器进行初始化。 我遇到的问题是:

  • 我向寄存器(例如 LCR)写入我需要的设置。
  • 然后、我可以转弯并正确读取它
  • 当我写入下一个寄存器(例如 DLL)并翻转并读取它时、它是正确的
  • 当我尝试返回并读取 LCR 寄存器时、它会显示我写入 DLL 的内容

 我用于写操作的步骤是:

  • 设置芯片选择
  • 使用 GPIO 端口引脚设置地址线路
  • 选择 IOW/取消选择 IOR
  • 将数据写入 D0-D7

 我用于读取的步骤是:

  • 设置芯片选择
  • 使用 GPIO 端口引脚设置地址线路
  • 选择 IOR /取消选择 IOW
  • 从 D0-D7读取数据

我正在尝试在不写入和读取需要高级访问的寄存器的情况下完成此操作。 我必须设置 LCR 分频器锁存使能位、在写入 DLL 之后、我将 LCR 返回到它的原始设置。

我将按照数据表典型应用部分中的步骤进行操作

我们将18.432 MHz 晶体用于时钟、以便能够获得115200波特。

感谢您的帮助、

Reif Heck

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

    您的读取和写入操作似乎是正确的。 您是否在器件中的所有寄存器中看到了这种行为、或者只看到了特定的行为? 我将在星期一回到办公室后深入了解这一点、看看我是否可以为您看到的内容提供一些解释。

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

    尊敬的 Max:

    是的、我在所有寄存器中都看到了这一点。 我在启动时初始化所有寄存器。

    如果我只初始化 LCR、我可以继续向其写入和读取不同的值。

    如果初始化其他寄存器(例如 DLL)、我可以继续成功写入和读取不同的值。

    但是、如果我尝试返回并读取 LCR、则该值会停留在 DLL 中的任何值。

    我使用的是 ATM2560、并将 D0-D7总线连接到8位 GPIO 端口(Porta)。

    要写入 TL16C752、我将端口方向设置为输出、并使用8位值(Pina = 8位值)设置端口。

    要从 TL16C752读取数据、我将端口方向设置为输入并读取 Pina (char = Pina)

    我正在尝试找到一种将逻辑分析仪连接到芯片的方法、但引脚间距太小、以至于我无法将芯片夹连接到芯片。 我可能必须尝试将导线焊接到 D0-D7。

    感谢 Max 的帮助、

    Reif Heck

    FINNA Group

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

    我想知道 D0-D7上锁存输入/输出的是什么? 我在查看 TL16C752B 的数据表时发现、读取数据被锁存在 IOR 引脚的高电平到低电平转换上。 在 IOW 引脚的低电平到高电平转换时、写入数据被锁存在寄存器中。 我尝试过这种方法、但似乎没有什么不同。

    谢谢、
    Reif Heck
    FINNA Group
    reif.heck@finnagroup.com
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Max:

    我忘记了提到我们使用的是 TL16C752D 器件。

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

    您尝试的操作是正确的、因此我猜您的写入/读取序列中存在一些"模拟"问题(例如连接不良、短路等)或一些漏步。 只需在软件上清除-您提到了在 D[7:0]总线中使用 Porta/Pina、但您如何控制 A[2:0]和 IOW/IOR? 这是否使用类似的 GPIO 组? (并且、您确定它正确切换了地址行吗? 您可能需要检查 Pinx 寄存器以确保它与您要写入的 Portx 值相匹配。)

    从读取切换到写入时、是否使用 ATmega2560中的 DDRA 寄存器将 GPIO 组配置为输入而不是输出?

    您已经稍微介绍了您的写入/读取过程、但您能否进行仔细检查以确保它们与 TL16C752数据表图1和图2中给出的时序图保持一致? 也就是说、写入 A[2:0]应该有效、然后/CS 变为低电平、然后/IOW 变为低电平(在地址上有足够的设置时间之后)、D[7:0]值应该稳定、 然后、在足够的设置时间之后、/IOW 可以转换为高电平(确保不违反最小选通宽度)、然后使/CS 无效。 读操作与读操作类似、因为所需地址在 A[2:0]上保持稳定、然后/CS 变为低电平、然后/IOR 变为低电平、 然后 D[7:0]切换以匹配寄存器值(在足够的稳定延迟之后、可以在 Pina 上读取该值)、之后/IOW 可以变为高电平、/CS 可以变为高电平、然后 A[2:0]值可以更改为不同的状态。

    如果存在与设置/保持计时等相关的问题、则在代码中插入一些延迟以使执行速度减慢可能会很有用。

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

    尊敬的 Max:

    我正在使用不同的 GPIO 组(PORTC 用于连接到 UART 的所有控制线、如 IOW/IOR 和 A0-A2)。 我对输出使用 DDRA = 0xFF、对输入使用 DDRA = 0x00。

    因此、看起来我正在使用正确的读取和写入步骤。 我主要关注的是,我采取的步骤顺序错误。

    我可能会看到时序问题、并将在设置地址和 IOW/IOR 行时查看是否插入延迟。

    同样、我的主要顾虑是确保我遵循正确的步骤。

    如果我仍然无法使其正常工作、我会与您再次联系。

    感谢 Max 的帮助、

    参考

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

    尊敬的 Max:

    嗯,有些人不应该被允许写入固件;~)

    出于某种原因、我的脑海中出现了这样的情况:我可以使用 Pina 作为 I/O 来写入和读取 D0-D7。 在返回我的其他一些代码后、

     我发现数据是从 Porta 中写入的、数据是从 Pina 中读取的。

    就像我的祖母一直说的“永远不能排除愚蠢!”

    感谢您的所有输入。 我相信我们可以关闭这个。

    参考

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

    感谢您的更新、我很高兴这一问题得到了解决! 在我之前查看 ATmega2560数据表时、Porta 与 Pina 的区别也使我感到困惑。 我只是在不同的讨论论坛上找到更多细节后才理解。

    如果您在实施我们的器件时遇到任何其他问题、请告知我们。

    此致、
    最大