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.

[参考译文] TM4C1294NCPDT:以9位 UART 模式广播

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/592291/tm4c1294ncpdt-broadcast-in-9-bit-uart-mode

器件型号:TM4C1294NCPDT

大家好、

我开发了一个系统、其中设备应通过 RS485进行通信。 为此、我想使用 UART 的9位模式。 我的问题是:

我应该如何设置设备自身监听的地址屏蔽(例如:2)和广播(0)地址?

此致、

Norbert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    诺伯特
    您是否不需要在自己的协议级别实施这些内容? 据我所知、硬件级上没有可用于定义 UART 地址的配置。
    换句话说、您将监听接收到的字节、根据您在地址位读取的内容、您将决定是否服从此类传入字节。
    如果一切都不对、我也有兴趣在这里进一步答复后进一步了解这一主题。
    此致
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Norbert、

     请使用 UART9BitAddrSet()通过 掩码设置与从属设备或一组地址相关联的地址。 如果您希望从机接收地址为2、广播地址为0、我认为您需要使用0xFD 传递 ui8Mask、使用0x2传递 ui8Addr。  

    30.2.2.2 UART9BitAddrSet
    为9位模式设置器件地址。
    原型:
    无效
    UART9BitAddrSet (uint32_t ui32Base、
    uint8_t ui8Addr、
    uint8_t ui8掩码)
    参数:
    ui32Base 是 UART 端口的基地址。
    ui8Addr 是器件地址。
    ui8Mask 是器件地址掩码。
    描述:
    此函数用于配置器件地址或响应的器件地址范围
    UART 端口上的数据请求。 接收到的地址被掩码屏蔽、然后
    与给定地址进行比较、允许单个地址(如果 ui8Mask 为0xff)或
    要匹配的地址集。
    注:
    9位模式的可用性随正在使用的 Tiva 部件而异。 请参阅的数据表
    您用来确定此支持是否可用的部件。

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

    非常详细的查尔斯-谢谢。 并非所有这些都"欢迎" Enet 的复杂性攻击-因此"多点"RS485接近-但尚未"掉下-"悬崖边"。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    我不熟悉 RS485。 只是迫使我进入维基百科了解它是什么。 :-)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    哦 Charles -我不是那么老了! (我相信、海报 Norbert 也不会。) RS485重新排列(接近)最高当(8031/8051) MCU "走向地球"时。

    采用 RS485——我的过去设计——定期、可靠地交换70层以上的数据——在纽约的一座办公楼内。   (岩石中心)

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

    您好、Charles、

    感谢您的重播! 我知道9位地址 API、并且已经阅读了相关文档。 我尝试列出使我感到困惑的内容:

    • 如果掩码为0xFF:除了与已设置的地址匹配之外、将丢弃所有通信。 按照我的理解、我将地址设置为0x2并将屏蔽保留为0xFF、只有当地址帧保持为0x2时、我才会获得中断
    • 此外、我还不理解掩码行为:由于上述完全匹配、可以在该处实现哪种 bool 逻辑

    如果我对您的解释非常了解、无论 UART 中设置的地址字段是什么、每次都会接收广播地址(0x0)。

    此致、

    Norbert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Norbert、
    您的理解是正确的。 无论掩码位为零、相应的地址位可以为0或1。 希望我这样做我认为逻辑是这样的:

    address_match =(input_address XNOR slave_address)或(非 address_mask);