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.

[参考译文] EK-TM4C1294XL:设置两个 EKS

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/620017/ek-tm4c1294xl-setup-two-eks

器件型号:EK-TM4C1294XL

e2e.ti.com/.../2843.EKSetup.htm

我正在尝试在两个 EK-TM4C1294XL 之间设置 UART 通信(U5)。 底部的 EK 是

发送器 EK、顶部的是接收器 EK。

两个 UART 均设置为9位模式、且 FIFO 禁用。 通过   PuTTY 上的 U0显示9位输出

格式化为16位整数。

发送器 EK 每隔10秒 向接收器 EK 发送一个十六进制数。 单独调试时(否

接收器 EK)、 发送字节会正确显示在 PuTTY 上。 接收器 EK 应发回一个不同的值

响应中的字节。 两个 UART 仅在接收模式下设置中断。

一个 EK 是否应该有外部电源? 我目前通过同一台计算机为两个 EKs 供电。

接收器 EK 未正确响应。 我还没有在示波器上看到 UART 输出、如果必须的话、我会这样做的。

EKS 列在单独的 COM 端口上、但我看到 PuTTY 仅在发送器 EK COM 端口上工作。 它不是

无论哪个 EK 连接到 U0 Rx 跳线、我在 PuTTY 上看到的唯一字节是传输的字节。

USB 记忆棒是否可以独立为  EK 供电?  USB 记忆棒示例是否有助于设置此功能?

或者、我应该为此寻找电池吗?

谢谢、

Priya

 

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

    为了更快速/更轻松(即 kiss)地测试这样的连接-使用更"正常/习惯"的8位 UART 配置"开始"是否更容易?

    这样、您就可以"测试/验证"这一事实、即两个板都提供了一个功能正常的 UART 输出。

    注-您必须在每个 EK 之间创建一个"共同基础"。   您是否已投保-您是否"已满足要求"(断电了吗?)

    我担心使用您的"U0 RX 跳线"-我担心-可能会因其"一次一个器件"方法而阻止 UART 到 UART 通信的传输。   这个"一次一个、有限的机械连接"是否不能确保-当处于 RX 位置时- RX 不能接收 TX 信号?    那么、RX UART 如何"知道"它已被指示/命令发送?   为避免这种情况、"命令接收失败"可以编写一个简单的程序、使 RX UART 输出一个字符。 每秒-独立于数据到达。   您的第一个目标-我相信-是实现被指定为"UART RX"的电路板输出。

    我假设 RX 跳线可能(仅)路由到 PC -通过监控 UART 输出进行充电-这将(不)中断通信链路-但您的描述并未充分阐明这一事实。

    我将注意力转向实现 RX UART 最简单的输出(即8位)、并且仅在清除障碍后继续...

    电源必须始终正确-如果有任何疑问-"方便的电源"(通过电路板的 USB 插座从 PC 引入)绝不应"适当的电源"。   在运行时、您是否在每个板上测量了电压(假设) 5V (通过 USB)和3V3 (到 MCU)?    您还会说:"使用 USB 记忆棒独立供电。"   为了澄清-您是否提到了通过 USB 插座连接到 EK 的非 PC 电源?   我不知道您的电路板- "您"必须确保(预期)为5V 电压供电证明足以满足(两者) EKs -在运行的各个方面-这只是基本要求!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    也许 TI 的某个人可以对此做出回应? 我在两个 EKs 上都设置了 U0以进行显示。 我目前不使用 U0、现在我在示波器上观察 U5输出。 我无法调试接收器 EK、因为两个 EKs 都连接到同一台计算机、看起来 CCS 程序两个 EKS 的项目输出相同。 这就是外部电源将使事情变得更轻松的原因。

    就示波器输出而言、我可以看到在 EK2 (U5Rx)上接收到的来自 EK1 (U5Tx)的发送字节。 这是 UART 9位模式。 但 Ek2 U5 Tx 没有响应。 我有两个 U5在中断时接收。 在 EK2接收到一个字节后不久、我将在 UART 中断处理程序函数中发送响应字节。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我也希望供应商能够并将作出回应。

    也许在未来-您可能会注意到"仅供应商回应!"的要求 ——这将会为您“节省”我的时间/精力!   值得注意的是、我的所有观点都被驳回(减去任何感谢) -预计供应商会要求(类似)澄清...   您的帖子"开始"中的清晰图表-这可能会增加(部分)"非常必要"的清晰度...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢你能抽出时间。 供应商的响应可能更易于理解。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    继续回答 CB1的问题

    您是否为两个电路板使用相同的电源(以及检查电平)? 请注意、如果您使用 PC 上的两个不同 USB 端口、我不能保证您的电源是相同的。 如果使用两个有源集线器、则绝对不会。

    如果您没有连接公共区域? 在任何情况下、您都可能应该通过电阻器。 如果两个板位于不同的电源域中、则所有赌注都将关闭。

    还有另一项选择、即使用标准8位模式进行测试。

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请注意、您"立即"添加了文件 EKSetup.htm。 希望供应商的答复以及"另一个"都是"更容易理解"。 实际上-验证每个 EK 板之间的"共同点"连接-(可能)过度挑战!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    CB1_MOBILE--我不理解你的回答

    也许您刚刚看到了 EKSetup.htm? 这一直是我原始帖子的第一部分。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Priya、

    您是否能够验证8位模式 UART 是否按预期用于启动器? 这将确认您的硬件是否设置正确、这似乎是您当前关注的焦点。

    我没有9位 UART 模式的相关经验、因此让我们从8位模式开始、确保所有硬件按预期工作。 然后、问题就需要通过软件调整来解决9位模式下的变化。 此外、使用8位模式将允许更好地使用 UART 终端软件来验证硬件设置是否正确。 从 UART_echo 示例开始、应该是一个好地方。

    我还不确定您在涉及跳线与导线时所做的连接。 您能否提供所有连接的完整详细信息? 该图像对我查看所有详细信息不是很有用。

    您是否还将每个 EK 板上的 GND 电位连接在一起? 确保两个电路板在相同的 GND 电平下运行是一个谨慎的步骤。

    [引述 USER="Priya Nadathur70">是否应该有一个 EK 外部电源? 我目前通过同一台计算机为两个 EKs 供电。

    [/报价]

    我认为这不是必要的、现代 PC 应该在两个端口上提供足够的电源。 如果您想进行验证、CB1的接线柱中有关电源和测量电压的部分非常适用。

    同样、作为供参考、我们有一个关于旧 Stellaris 器件的9位模式的旧应用手册、如果您尚未找到 以下内容、您可能会在这里找到一些有用的信息:http://www.ti.com/lit/an/spma032/spma032.pdf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回答和重复。 在8位模式下、两个 EKs 之间的握手工作正常。 两个 USB 端口均提供5V 电压。 我正在阅读有关9位 UART 的应用手册、如果有更多问题、我将稍后再回来。

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

    让记录显示(新)引入的"握手"(据说)工作正常-但没有明确的 UART 数据传输成功确认(正常)!   (即 Krazzy-Making)

    KISS -与"类似"(此处均已禁止)一样、指示您在进入"9位 Swamp "之前采用简单的"8位 UART 模式"-确保工作正常。   (哪些(承诺)会漏掉...)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    CB1-您对什么进行评论/询问? 我在示波器上查看了来自 EK1的 U5 Tx、在示波器上也查看了来自 EK2的 U5 Tx。 当传输发生时、两个 EKS 上的 LED 闪烁。 不过、我没有进行屏幕截图。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的朋友-您(突然-没有解释)使用了"握手"一词-始终且只有(之前)您写道、

    "我没有看到 UART 输出"

    "我在 PuTTY 上看到的唯一字节是传输的字节。"

    因此,我们不应该质疑你 "握手"的新使用,因为这种使用没有解释?     (最常见的情况是-表示一个用于切换以确认操作的位。)

    您是否意味着、您现在能够"查看" RX UART 的传输字节?    或者-是否只有"LED"在响应-仍然没有 UART_RX 传输?    这一点一点一点不清楚-并且引起了我(适当)的评论。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用了8位模式。 我发送了0x50并用0x05进行确认。 因此、在示波器上很容易看到响应是通过 EK2 UART 发生的。 我没有看 PuTTY。 我还不知道为什么9位模式不做同样的事情。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Priya Nadathur70"]我使用了8位模式

    的-遵循"亲吻"-肯定是您取得成功的最佳途径。   (由我和其他人提出)

    [引用 user="Priya Nadathur70"]我发送了0x50并使用0x05进行了确认。

    现在这是个好消息-但您将此内容(首次字节传输成功)描述为"握手!"   (从技术上讲、它是-但过于模糊、无法发挥作用、并且"打破您过去的 UART 字节"描述。)

    "远程诊断技术问题"是很难的-引入全新的术语(即握手)-减去(任何)解释-不符合您的最佳利益...

    "8位模式正在工作"(正如人们所怀疑的)这一事实现在为您的互连和(两个 MCU 的编程)提供了(部分)信心-并且应该为您的"9位练习"设置阶段。

    正如我所看到的、最好(现在)放弃 UART_RX"响应" UART_TX"的任何想法-只是让 UART_RX (持续)输出字符。 @ 1Hz (首先在8位模式下确认代码更改)、一旦确认、仅"切换到9位模式"、并确定 PuTTY 是否识别此类数据...   这是一个完美的"kiss"(一次一步)的图示、它能以最佳速度确保您的项目成功!

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

    [引用 USER="CB1_MOBIT"]-仅限于"切换到9位模式"-并确定 PuTTY 是否识别此类数据...   [/报价]

    Putty 处理9位数据是否很好? 我们过去曾在这里指出、它没有、大多数终端仿真器没有。


    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为了解决 PuTTY 不处理9位数据的问题、我将通过 U0打印16位整数。
    我必须更仔细地查看示波器上的9位传输。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们仍然强烈要求您不要"将9位模式作为人质"、而不是"命令响应"类型的操作、这与 PuTTY 的性能无关。

    如前所述-仅启用 UART_RX 器件即可"持续输出-~1Hz"(通过更改现有的"UART_RX"程序)消除任何此类"人质扣留!"   一如既往-此类合规性符合 kiss"标准、这证明了它始终是有用的、可以加速/简化您的成功之路...  (尽管、尤其是、这种强大的"亲吻"技术从未在这里提到、也从未推广过!)   用户-他们的"不受引导、过于宽泛的本能"会继续发声...

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

    现在-让您的"UART_RX"持续输出"9位"-无需依赖从 UART_TX 接收数据!   请注意、您"必须更改代码、以便 UART_RX 持续输出字符-没有其他条件!   (我不知道如何更清楚地说明这一点!)

    在这个早期阶段、这会使 UART_RX 从不必要的复杂性中"释放"出来。 您只需尝试输出"9位 UART"即可在串行终端的示波器(当然)和 iirc (有时)上查看。 (我们已经这样做了-我不能忘记哪个终端)

    很难知道您如何无法将先前的写操作描述为"连续输出-~1Hz"(粗体)、即"超越纯英语"。

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

    请记住、并非所有字节都是在9位模式下接收的

    [引用用户='123手册"]

    13.3.7 9位 UART 模式

    UART 模块提供9位模式、可通过 UART9BITADDR 寄存器的9BITEN 位启用。 此功能在 UART 的多分支配置中非常有用、在该配置中、连接到多个从机的单个主机可以通过某个从机的地址或地址集以及地址字节限定符与该从机进行通信。 所有从器件在奇偶校验位的位置检查地址限定符、如果置位、则将接收到的字节与预编程地址进行比较。 如果地址匹配、则接收或发送更多数据。 如果地址不匹配、则丢弃地址字节和任何后续数据字节。 如果 UART 处于9位模式、则接收器在无奇偶校验模式下运行。 该地址可以预定义为与接收到的字节匹配、也可以通过 UART9BITADDR 寄存器进行配置。 使用 UART9BITAMASK 寄存器中的地址掩码、匹配可以扩展到一组地址。 默认情况下、UART9BITAMASK 为0xFF、这意味着只匹配指定的地址。

    当找不到匹配项时、将丢弃其余数据字节以及清零的第9位。 如果找到匹配项、则会向 NVIC 产生中断、以采取进一步的操作。 后续数据字节和清零的第9位保存在 FIFO 中。 在启用 μ μDMA 和/或 FIFO 操作的情况下、软件可以屏蔽该中断、无需处理器干预。 9位模式下的所有发送事务都是数据字节、第9位清零。 软件可以通过将奇偶校验设置覆盖为粘着奇偶校验来覆盖要置位的第9位(以指示地址)、并为特定字节启用奇偶校验。 为了将传输时间与正确的奇偶校验设置相匹配、地址字节可作为单次传输发送、然后是突发传输。 发送 FIFO 不保存地址/数据位、因此软件应该适当地使能地址位。

    [/报价]

     

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复和指导。 在9位模式中、发送器 EK1在示波器上显示了一个9位输出。 我确保传输的字节需要9位 x143。 外设 EK2的地址为0xA1。 我在接收器 EK2中以这种方式设置9位模式:

    UART9BitAddrSet (UART5_BASE、0xA1、0xFF);
    // UART9BitAddrSet (UART5_BASE、0x0、0xFF);
    UART9BitEnable (UART5_BASE);
    UARTFIFODisable (UART5_BASE);

    发送器 EK1设置为9位 UART、如下所示:
    UART9BitAddrSet (UART5_BASE、0xA1、0xFF);
    UART9BitEnable (UART5_BASE);
    UARTFIFODisable (UART5_BASE);
    UART9BitAddrSend (UART5_BASE、0xA1);

    虽然我可以在示波器上看到 U5Rx 接收到这个9位值、但在接收到这个字节时、EK2上的 LED 不会闪烁。 我在 EK2上还有一个1秒的周期定时器、可独立传输字节0x10b。 在 U5Tx 上完全没有活动、仅在示波器上具有高电压电平。 在2个 EKS 之间的地址设置中、是否有问题?

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

    [引用 USER="Priya Nadathur70">我在 EK2上还有一个1秒的周期定时器、独立传输字节0x10b。 在 U5Tx 上完全没有活动、仅在示波器上具有高电压电平。[/quot]

    这似乎是您对我的建议的接受-"生成9位 UART 输出-完全不依赖-尤其是"数据接收!"   是这样吗?

    请注意、"0x10b"不需要9位-这可能会影响9位输出吗?  (可疑-但可以快速测试/解决。)

    我会快速切换到8位 UART 输出-然后查看示波器(然后)是否显示"正常"UART 输出。   如果是-请报告...

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

    [引用 USER="Priya Nadathur70">我在 EK2上还有一个1秒的周期定时器、独立传输字节0x10b。 在 U5Tx 上完全没有活动、仅在示波器上具有高电压电平。[/quot]

    您为什么会期望任何? 与您设置的地址不匹配。

    您确实意识到第九位仅用于地址、您不知道吗?

    Robert

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

    [引用 user="CB1_MOBIST"]请注意,"0x10b"不需要9位

    这是二进制的100001011。 我要对九位进行计数。 实际上、我怀疑设置第9位至少是问题的一部分。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 MDB 中、我了解主器件何时发送到外设、第九位指示其地址字节。 从0x143的第9位开始、我以为0xa1将是地址。 这是不是其他问题吗?

    对于 EK2、定时器独立于 UART 接收。 我将检查8位模式下的内容。

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

    [引用 user="Priya Nadathur70"]在 MDB 中,我了解主设备何时发送到外设,第九位指示其地址字节。

    是的、这是9位协议的典型情况。

    [引用 user="Priya Nadathur70"]删除0x143中的第9位,我认为0xa1将是地址

    嗯、如果你将0x143中的第9位拖放到了一起、你得到的是0x43。 但删除第9位的概念毫无意义。 您可以通过特定的 TIVAWare 函数 IIRC 将地址位添加到输出中。

    但是、这也不是您声称的那样。 您已经知道您发送的是0x10B。 那么、您实际上要发送什么呢? 此时、您的发送方式可能至少同样重要?

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    mdb 表示 LSB 表示地址位。 我丢弃了位0以获取 A1作为外设地址。

    0x10B 是随机选择的字节、看起来与来自 ek2的示波器上的143不同。 我将使用 UartCharPut 从计时器中断处理程序函数发送此消息。

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

    [引用 user="Priya Nadathur70"]我正在使用 UartCharPut 从计时器中断处理程序函数发送此消息。[/quot]

    如何实现? 我们需要查看您的代码示例。 UartCharPut 无法发送9位字符、因为 UART 不支持(几乎没有 UART 支持)。

    [引用 user="Priya Nadathur70"]MDB 表示 LSB 表示地址位。 我丢弃了位0以获取 A1作为外设地址。

    这在硬件上几乎每个方面都是错误的。

    第9位是奇偶校验位。

    UART 按照从 LSB 到 MSB 的顺序发送位、后跟奇偶校验位。

    如果 MDB 反转这些位、这似乎是一件非常奇怪的事情、那么您将无法使用 TM4C 9位硬件支持、但需要在软件中创建您自己的支持。 我的怀疑是你对某件事的误解*。

    Robert

    *事实上、快速使用该标准也表明您阅读错误。 地址位(模式位)不是 lsb。 请参阅版本4的第2.1节

    LSB       -->                       MSB

    START 0 1 2 3 4 5 6 7模式停止

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我意识到 MDB 文档在左侧显示了 LSB。 这是否意味着我不能将 Tiva 9位 UART API 用于 MDB? 只有 Stellaris 似乎具有用于软件9位 UART 的 API。 EK2中定时器中断句柄内的 LED 每秒闪烁一次。 因此、在9位模式下、UART 确实存在地址问题、这使得 EK2无法发送响应。 编写9位软件 UART 似乎很复杂、不是吗?

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

    [引用 user="Priya Nadathur70"]是的,我意识到 MDB 文档在左侧显示 LSB。

    您是否还注意到 MODE 位处于 MSB 位置?

    [引用 user="Priya Nadathur70"]这是否意味着我无法将 Tiva 9位 UART API 用于 MDB?

    不、这意味着您已经混淆了自己。

    [引用 USER="Priya Nadathur70">只有 Stellaris 似乎具有用于软件9位 UART 的 API。 [/报价]

    如果它们不能以同样的方式工作、那将是令人震惊的。

    [引用 USER="Priya Nadathur70">编写9位软件 UART 似乎很复杂、不是吗? [/报价]

    您确实需要比现在更清楚地了解正在发生的情况。

    首先停止考虑9位模式、使用9位值。 它不是。 它使用一个8位值加上一个额外的标志位。 该位的设置决定了8位值是数据位还是地址位。 该位与数据分开管理、Tiva API 通过单独的调用来反映该情况、以发送一个带有标志位设置的8位数据字节。

    Robert

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

    Robert、

    要用数字示例进行澄清:

    这是字节0x43。 从 EK1开始传输 x43。 我在示波器上看到了这一点。 9位模式

    示波器上的持续时间为11位长。 UART9BitAddrSet 发送的地址

    和 UART9BitAddrSend API 均为0x43。 从 EK2开始、我想发送0x21来查看响应

    范围。 虽然 EK2接收到 X43、但我仍然看不到来自 EK2的任何信息。

    我缺少什么?

    谢谢、

    Priya

    UART
    起始位 LSB MSB 模式 停下
    0 1100 0010. 1

    1

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

    [引用用户="Priya Nadathur70"]

    从 EK2开始、我想发送0x21来查看响应

    范围。 我仍然看不到来自 EK2的任何消息

    [/报价]

    您正在做什么? 您仍然没有为此演示代码。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是 EK2的代码。 该 EK 从 EK1接收 x43并发回 x21。
    谢谢、
    Priya

    uint32_t g_ui32SysClock;

    unsigned char txcomplete = 0;
    unsigned char timerComplete = 0;
    uint8_t TrxBuffer[1]={0x21};
    uint8_t i = 0;
    void UARTSend (const uint8_t * pui8Buffer、uint32_t ui32Count);
    空 Timer3IntHandler (空);

    //
    //
    //驱动程序库遇到错误时调用的错误例程。
    //
    //
    #ifdef 调试
    无效
    _error__(char * pcFilename、uint32_t ui32Line)


    #endif

    //
    //
    //向 UART 发送字符串。
    //
    //
    无效
    UARTSend (const uint8_t * pui8缓冲器、uint32_t ui32计数)

    //
    //循环,同时有更多字符要发送。
    //

    while (ui32Count---)

    //
    //将下一个字符写入 UART。

    UARTCharPut (UART5_BASE、* pui8Buffer++);
    // UARTprintf ("%x "、TrxBuffer[i++]);
    #if 0
    //闪烁 LED 以显示字符传输正在发生。
    //
    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、GPIO_PIN_0);

    //
    //延迟1毫秒。 每个 SysCtlDelay 大约为3个时钟。
    //
    SysCtlDelay (g_ui32SysClock /(1000 * 3));

    //
    //关闭 LED
    //
    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、0);
    #endif



    空 Timer3IntHandler (空)

    //清除计时器中断
    TimerIntClear (TIMER3_base、TIMER_TINA_TIMEOUT);

    //闪烁 LED 以显示字符传输正在发生。
    //
    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、GPIO_PIN_0);

    //
    //延迟1毫秒。 每个 SysCtlDelay 大约为3个时钟。
    //
    SysCtlDelay (g_ui32SysClock /(1000 * 3));

    //
    //关闭 LED
    //
    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、0);

    UARTSend (TrxBuffer、1);
    I = 0;

    timerComplete = 1;



    //
    //
    // UART 中断处理程序。
    //
    //
    无效
    UARTIntHandler (空)

    uint32_t ui32Status;

    //
    //获取中断状态。
    //
    ui32Status = UARTIntStatus (UART5_BASE、TRUE);

    //

    //
    //清除已发出的中断。
    //
    UARTIntClear (UART5_BASE、ui32Status);

    //接收 UART 字符
    while (ROM_UARTCharsAvail (UART5_BASE))

    //
    //从 UART 读取下一个字符并将其写回 UART。
    //

    UARTCharGet (UART5_BASE);



    //闪烁 LED 以显示字符传输正在发生。
    //
    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、GPIO_PIN_0);

    //
    //延迟1毫秒。 每个 SysCtlDelay 大约为3个时钟。
    //
    SysCtlDelay (g_ui32SysClock /(1000 * 3));

    //
    //关闭 LED
    //
    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、0);




    //
    //
    //此示例演示了如何将一串数据发送到 UART。
    //
    //
    内部
    main (空)

    uint32_t ui32Period;

    //
    //将时钟设置为直接从频率为120MHz 的晶体运行。
    //
    G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、120000000);
    //
    //启用用于板载 LED 的 GPIO 端口。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
    //
    //为 LED (PN0)启用 GPIO 引脚。
    //
    ROM_GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0|GPIO_PIN_1);


    //
    //启用此示例使用的外设。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART5);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);

    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

    //
    //启用处理器中断。
    //
    ROM_IntMasterEnable();

    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER3);
    TimerConfigure (TIMER3_base、TIMER_CFG_PERIODICASE);

    ui32Period = g_ui32SysClock/2;
    TimerLoadSet (TIMER3_base、timer_A、ui32Period-1);

    IntEnable (INT_TIMER3A);
    TimerIntEnable (TIMER3_base、TIMER_TINA_TIMEOUT);
    IntMasterEnable();

    TimerEnable (TIMER3_base、TIMER_A);

    //
    //将 GPIO A0和 A1设置为 UART 引脚。
    //
    GPIOPinConfigure (GPIO_PC6_U5RX);
    GPIOPinConfigure (GPIO_PC7_U5TX);
    ROM_GPIOPinTypeUART (GPIO_PORTC_BASE、GPIO_PIN_6 | GPIO_PIN_7);


    //
    //将 UART 配置为9600、8-N-1操作。
    //
    ROM_UARTConfigSetExpClk (UART5_BASE、g_ui32SysClock、9600、
    (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
    UART_CONFIG_PAR_NONE));


    GPIOPinConfigure (GPIO_PA0_U0RX);
    GPIOPinConfigure (GPIO_PA1_U0TX);
    ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);

    UARTStdioConfig (0、9600、g_ui32SysClock);


    UART9BitAddrSet (UART5_BASE、0x43、0xFF);
    UART9BitEnable (UART5_BASE);


    UARTFIFODisable (UART5_BASE);

    //
    //启用 UART 中断。
    //
    ROM_IntEnable (INT_UART5);
    ROM_UARTIntEnable (UART5_BASE、UART_INT_RX | UART_INT_RT | UART_INT_9BIT);
    // ROM_UARTIntEnable (UART5_BASE、UART_INT_RX | UART_INT_RT);
    // ROM_UARTIntEnable (UART5_BASE、UART_INT_TX | UART_TXINT_MODE_EOT | UART_INT_9BIT);
    // ROM_UARTIntEnable (UART5_BASE、UART_INT_TX|UART_TXINT_MODE_EOT | UART_INT_9BIT | UART_INT_RX|UART_INT_RT);



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

    使用过去的代码 选项。 结果可读性要高得多。

    让我们从中断例程开始

    void
    UARTIntHandler (void)
    {
    uint32_t ui32Status;
    
    //
    //获取中断状态。
    //
    ui32Status = UARTIntStatus (UART5_BASE、TRUE);
    
    //
    
    
    ////清除已发出的中断。
    //
    UARTIntClear (UART5_BASE、ui32Status);
    
    //接收 UART char
    while (ROM_UARTCharsAvail (UART5_BASE)
    ){
    //
    从 UART 读取下一个字符并将其写回 UART。
    //
    
    UARTCharGet (UART5_BASE);
    
    }
    //闪烁 LED 以显示正在发生字符传输。
    //
    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、GPIO_PIN_0);
    
    //
    延迟1毫秒。 每个 SysCtlDelay 大约为3个时钟。
    //
    SysCtlDelay (g_ui32SysClock /(1000 * 3));
    
    //
    关闭 LED
    //
    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、0);
    } 

    分段以供评论。

    这种情况

    //获取中断状态。
    //
    ui32Status = UARTIntStatus (UART5_BASE、TRUE);
    
    //
    
    
    ////清除已发出的中断。
    //
    UARTIntClear (UART5_BASE、ui32Status);
    

    如果您稍后正确处理状态结果、则表示正常。 问题是你没有

    //接收 UART char
    while (ROM_UARTCharsAvail (UART5_BASE)
    ){
    //
    从 UART 读取下一个字符并将其写回 UART。
    //
    
    UARTCharGet (UART5_BASE);
    
    } 

    这就是问题、您永远不会处理其他中断。 具体来说、您永远不会处理9位匹配接收中断。 这一点、尽管您启用了它。

    这是:

    //
    //延迟1毫秒。 每个 SysCtlDelay 大约为3个时钟。
    //
    SysCtlDelay (g_ui32SysClock /(1000 * 3)); 

    不是很大的问题

    Robert

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

    我更改了 LED 闪烁代码以在没有任何延迟的情况下进行切换。 这使得两个 EKS 在定时器中断时都正确发送。 但是、9位模式下的接收 UART 不能与任何一个 EK 一起工作。

    这是 EK2的更新代码。

    我感谢代码审核和反馈。

    谢谢、

    Priya

    uint32_t g_ui32SysClock;

    unsigned char txcomplete = 0;
    unsigned char timerComplete = 0;
    uint8_t TrxBuffer[1]={0x21};
    uint8_t i = 0;
    void UARTSend (const uint8_t * pui8Buffer、uint32_t ui32Count);
    空 Timer3IntHandler (空);


    //
    //
    //驱动程序库遇到错误时调用的错误例程。
    //
    //
    #ifdef 调试
    无效
    _error__(char * pcFilename、uint32_t ui32Line)


    #endif

    //
    //
    //向 UART 发送字符串。
    //
    //
    无效
    UARTSend (const uint8_t * pui8缓冲器、uint32_t ui32计数)

       //
       //循环,同时有更多字符要发送。
       //

       while (ui32Count---)
       {
           //
           //将下一个字符写入 UART。

           UARTCharPut (UART5_BASE、* pui8Buffer++);
    //       UARTprintf ("%x "、TrxBuffer[i++]);

       }

    空 Timer3IntHandler (空)

       //清除计时器中断
       TimerIntClear (TIMER3_base、TIMER_TINA_TIMEOUT);

       //闪烁 LED 以显示字符传输正在发生。

       IF (GPIOPinRead (GPIO_PORTN_BASE、GPIO_PIN_1))
               {
                   GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、0);
               }
       其他
               {
                   GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、2);
               }

       UARTSend (TrxBuffer、1);
       I = 0;

       timerComplete = 1;

    //
    //
    // UART 中断处理程序。
    //
    //
    无效
    UARTIntHandler (空)

       uint32_t ui32Status;

       //
       //获取中断状态。
       //
       ui32Status = UARTIntStatus (UART5_BASE、TRUE);
       uint8_t interrupt_type =(uint8_t)(((ui32Status & 0x1000)>> 12);

       //

       //
       //清除已发出的中断。
       //
       UARTIntClear (UART5_BASE、ui32Status);

       if (interrupt_type = 1){
           //接收 UART 字符
                while (UARTCharsAvail (UART5_BASE))
                {
                    //
                    //从 UART 读取下一个字符并将其写回 UART。
                    //

                    UARTCharGet (UART5_BASE);
                }

       IF (GPIOPinRead (GPIO_PORTN_BASE、GPIO_PIN_1))
           {
               GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、0);
           }
       其他
           {
               GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、2);
           }
       }

    //
    //
    //此示例演示了如何将一串数据发送到 UART。
    //
    //
    内部
    main (空)

       uint32_t ui32Period;

       //
       //将时钟设置为直接从频率为120MHz 的晶体运行。
       //
       G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
                                                SYSCTL_OSC_MAIN |
                                                SYSCTL_USE_PLL |
                                                SYSCTL_CFG_VCO_480)、120000000);
       //
       //启用用于板载 LED 的 GPIO 端口。
       //
       SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
       //
       //为 LED (PN0)启用 GPIO 引脚。
       //
       GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0|GPIO_PIN_1);


       //
       //启用此示例使用的外设。
       //
       SysCtlPeripheralEnable (SYSCTL_Periph_UART5);
       SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);

       SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
       SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

       //
       //启用处理器中断。
       //
       IntMasterEnable();

           SysCtlPeripheralEnable (SYSCTL_Periph_TIMER3);
    //       TimerConfigure (TIMER3_base、TIMER_CFG_ONE_SHOT);
           TimerConfigure (TIMER3_base、TIMER_CFG_PERIODICASE);


           ui32Period = g_ui32SysClock/2;// 1ms 一次性计时器

    //       ui32Period = 5*g_ui32SysClock;
           TimerLoadSet (TIMER3_base、timer_A、ui32Period-1);

           IntEnable (INT_TIMER3A);
           TimerIntEnable (TIMER3_base、TIMER_TINA_TIMEOUT);
           IntMasterEnable();

           TimerEnable (TIMER3_base、TIMER_A);


       //
       //将 GPIO A0和 A1设置为 UART 引脚。
       //
       GPIOPinConfigure (GPIO_PC6_U5RX);
       GPIOPinConfigure (GPIO_PC7_U5TX);
       GPIOPinTypeUART (GPIO_PORTC_BASE、GPIO_PIN_6 | GPIO_PIN_7);


       //
       //将 UART 配置为9600、8-N-1操作。
       //
       UARTConfigSetExpClk (UART5_BASE、g_ui32SysClock、9600、
                               (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
                                UART_CONFIG_PAR_NONE));


       GPIOPinConfigure (GPIO_PA0_U0RX);
       GPIOPinConfigure (GPIO_PA1_U0TX);
       GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);

       UARTStdioConfig (0、9600、g_ui32SysClock);

       UART9BitAddrSet (UART5_BASE、0x43、0xFF);
       UART9BitEnable (UART5_BASE);


       UARTFIFODisable (UART5_BASE);

       //
       //启用 UART 中断。
       //
       IntEnable (INT_UART5);
       UARTIntEnable (UART5_BASE、UART_INT_RX | UART_INT_RT | UART_INT_9BIT);
    //   ROM_UARTIntEnable (UART5_BASE、UART_INT_RX | UART_INT_RT);
    //   ROM_UARTIntEnable (UART5_BASE、UART_INT_TX | UART_TXINT_MODE_EOT | UART_INT_9BIT);
    //   ROM_UARTIntEnable (UART5_BASE、UART_INT_TX|UART_TXINT_MODE_EOT | UART_INT_9BIT | UART_INT_RX|UART_INT_RT);

    //   UARTSend (TrxBuffer、1);


    //   while (!(txcomplete));
       while (1);

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

    使用过去的代码 选项。 结果可读性要高得多。

    [引用 user="Priya Nadathur70">我已将 LED 闪烁代码更改为无延迟切换。 这使得两个 EKS 在定时器中断时都正确发送。 但是、9位模式下的接收 UART 不能与任何一个 EK 配合使用。[/QUERT]

    还记得吗?

    //接收 UART char
    while (ROM_UARTCharsAvail (UART5_BASE)
    ){
    //
    从 UART 读取下一个字符并将其写回 UART。
    //
    
    UARTCharGet (UART5_BASE);
    
    } 

    这就是问题、您永远不会处理其他中断。 具体来说、您永远不会处理9位匹配接收中断。 这一点、尽管您启用了它。

    您仍然没有处理它。

    Robert

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

    我在9位 UART 中断上执行了该操作以接收。 请告诉我是否应该做其他事情:

    无效

    UARTIntHandler (空)

       uint32_t ui32Status;

       //

       //获取中断状态。

       //

       ui32Status = UARTIntStatus (UART5_BASE、TRUE);

       uint8_t interrupt_type =(uint8_t)(((ui32Status & 0x1000)>> 12);

       //

       //

       //清除已发出的中断。

       //

       UARTIntClear (UART5_BASE、ui32Status);

       if (interrupt_type = 1){

           //接收 UART 字符

                while (UARTCharsAvail (UART5_BASE))

                {

                    //

                    //从 UART 读取下一个字符并将其写回 UART。

                    //

                    UARTCharGet (UART5_BASE);

                }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    祈祷说、忽略问题有何帮助?

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

    我被要求放大。

    考虑以下问题:

    • 当您接收到除正在屏蔽的中断之外的任何中断时、您会怎么做?
      • 如何检测它?
      • 您如何应对它的出现?
        • 您对它有什么期待?
      • 如何清除它?

    相关问题:

    • 当 UART 接收到9位字符时、会有什么结果?
      • 手册中的内容是什么?

    Robert