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.

[参考译文] TM4C123GH6PM:Tivaware GPIO 函数似乎与它们所需的东西一团糟

Guru**** 2465220 points
Other Parts Discussed in Thread: TM4C1231H6PGE

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/659088/tm4c123gh6pm-tivaware-gpio-functions-seem-to-mess-with-things-they-shouldn-t

器件型号:TM4C123GH6PM
主题中讨论的其他器件:TM4C1231H6PGE

我正在尝试在启用内部上拉的情况下有效地实现开漏 GPIO、但每次更改 GPIO 模式时、库都会复位引脚状态。

如何在不更改 GPIO 其他参数的情况下仅更改引脚方向?

我希望以下代码最终将 GPIO 切换为高电平/低电平、但"GPIODirModeSet (SPI_CSZ、GPIO_DIR_MODE_OUT);"似乎也将输出状态设置为高电平、而不仅仅是方向。

void TestGPIO()

   #define SPI_CSZ GPIO_PORta_base、GPIO_PIN_3
   
   ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
   
   GPIOPadConfigSet (SPI_CSZ、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU);

   GPIOPinWrite (SPI_CSZ、0);

   while (1)
   {
      GPIODirModeSet (SPI_CSZ、GPIO_DIR_MODE_OUT);//将 GPIO 设置为低电平
      GPIODirModeSet (SPI_CSZ、GPIO_DIR_MODE_IN);//LET GPIO 变为高电平
   }

在设置 MODE OUT 之后不能简单地添加"GPIOPinWrite (SPI_CSZ、0);"、因为如果有任何东西连接到 GPIO、将其拉低、那么设置输出模式和将 GPIO 设置为低电平之间的时间将驱动为高电平、 从而导致 GPIO 上的争用和毛刺脉冲。

如何更改 GPIO 的方向而不接触有关 GPIO 的任何其他信息?

BR、

Steve

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Steve、
    您可以尝试 GPIOPadConfigSet (SPI_CSZ、GPIO_Strength _2mA、GPIO_PIN_TYPE_OD)吗? 我还假设您有一个外部上拉电阻器、对吧?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    查尔斯
    否、没有外部上拉、因此使用 GPIO_PIN_TYPE_STD_WPU。
    BR、
    Steve
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可能需要查看代码。 我记得其中一个 OEM 库、用于 Tiva 或 STM8、它可以实现这一目的。

    如果不是、则对寄存器 DIR 进行操作、例如方向。

    当我有一段时间时、我可以显示一段代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Steve、
    如果看一下 GPIODirModeSet(),它不会复位引脚状态。 它仅更改 GPIO_DIR 寄存器中的方向位。 您连接到 GPIO 引脚的是什么? 您的外部器件是驱动 GPIO 引脚还是始终处于输入模式? 如果外部器件处于输入模式、那么我不明白您的意思是驱动冲突。 调用 GPIODirModeSet (SPI_CSZ、GPIO_DIR_MODE_OUT)时、应将 GPIO 引脚驱动为低电平。 稍后、当您调用 GPIODirModeSet (SPI_CSZ、GPIO_DIR_MODE_IN)时、GPIO 引脚变为具有弱上拉电阻的输入引脚。

    无效
    GPIODirModeSet (uint32_t ui32Port、uint8_t ui8引脚、uint32_t ui32PinIO)

    //
    //检查参数。
    //
    assert (_GPIOBaseValid (ui32Port));
    assert ((ui32PinIO == GPIO_DIR_MODE_IN)||
    (ui32PinIO = GPIO_DIR_MODE_OUT)||
    (ui32PinIO = GPIO_DIR_MODE_HW);

    //
    //设置引脚方向和模式。
    //
    HWREG (ui32Port + GPIO_DIR)=((ui32PinIO 和1)?
    (HWREG (ui32Port + GPIO_DIR)| ui8引脚):
    (HWREG (ui32Port + GPIO_DIR)和~(ui8引脚)));
    HWREG (ui32Port + GPIO_AFSEL)=((ui32PinIO 和2)?
    (HWREG (ui32Port + GPIO_AFSEL)|
    ui8引脚):
    (HWREG (ui32Port + GPIO_AFSEL)和
    ~(ui8引脚)));
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    查尔斯

    感谢您查看此内容。

    在我发布之后、我查看了 GPIODirModeSet、并同意它看起来与方向不同。

    进一步的调查确实解释了正在发生的情况,但我认为它真的是设计的硬件太差了!!!

    当您将方向寄存器的状态从输出更改为输入、然后再返回输出时、数据寄存器会锁存输入引脚的状态、而不是输出寄存器中以前的状态。

    这使得引脚完全无法确保"安全"输出条件、因为您无法控制它实际驱动的内容。

    考虑以下情形(并且是我的真实生活问题)

    我有多个引脚驱动器、并希望 Tiva 提供上拉电阻(我的硬件已经构建、因此无法轻松更改)。 所有其他信号驱动器只会强制引脚处于低电平(完全标准的开漏行为)。

    现在、如果 Tiva 想让引脚保持独立(即在输入模式中应用一个弱上拉和引脚)、那么一切都正常。 其他器件可以安全地下拉或让其浮动。 如果 Tiva 现在想驱动为低电平、它应该能够立即从弱上拉转换为强制低电平、但它不能。 它必须切换到输出(并且由于其输出数据寄存器检测到高电平、它将驱动为高电平)、然后将引脚设置为低电平。 在这个小时间窗口中、它将驱动输出高电平。 如果同时一个外部器件也开始驱动低电平、那么在一段时间内、Tiva 驱动高电平、而另一个器件驱动低电平。 只需很短的时间、但仍然系统地不正确、并且我们首先具有漏极开路行为的全部原因。

    我所使用的任何其他微控制器在切换方向时都无法根据输入状态自动更改输出数据寄存器的值!!!

    我可以收集的唯一解决方案是添加一个外部上拉电阻器并使引脚类型的漏极开路。

    下面是清楚地显示问题的寄存器访问代码...

    void TestGPIO()

       ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
       while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOF));

       GPIOPadConfigSet (GPIO_PORTF_BASE、GPIO_PIN_1、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU);//引脚应为输入、但具有弱上拉电阻、因此实际上转换为高电平。 外部电压会按预期升高

       //将引脚设置为输出
       HWREG (GPIO_PORTF_BASE + GPIO_DIR)= GPIO_PIN_1;
       //wigle 高电平然后低电平来检查实际输出以及它处于什么状态
       GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、0xff);
       //leave the output register in state 0
       GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、0);

       //将引脚设置为输入。 由于弱上拉、引脚会按预期变为高电平
       HWREG (GPIO_PORTF_BASE + GPIO_DIR)= 0x00;
       //将引脚设置回输出。 我希望该引脚恢复低电平、因为这是它所处的最后一个输出状态
       HWREG (GPIO_PORTF_BASE + GPIO_DIR)= GPIO_PIN_1;
       //不幸的是,必须将输出数据寄存器“重置”为低电平
       GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、0);


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Steve、
    我理解您的说法。 我想原因是只有 GPIODATA 寄存器。 在我使用的不同 MCU 中、每个引脚都有两个独立的 DOUT 和 DIN 寄存器。 正如我在第一份答覆中所说,建议是把引脚置于开漏模式,并有一个外部上拉。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    "当您将方向寄存器的状态从输出更改为输入、然后再返回输出时、数据寄存器会锁存输入引脚的状态、而不是输出寄存器中以前的状态。"

    对我来说、这是输入/输出数据寄存器组合的理想(一般)行为。

    您可能需要寻找具有单独输入/输出数据寄存器的芯片。

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

    我不赞同。

    "回声"是逻辑的、而不是物理的。

    读操作应简单地返回在引脚上看到的内容(当配置为输出读数时、返回写入的内容、配置为输入时、返回输入状态)。

    这些寄存器实际上并不是"组合"的、它们只是出现在存储器空间中的同一地址。

    无论是哪种方式、写入一个寄存器(数据方向寄存器)不应影响完全不同的寄存器(数据寄存器)。

    不管怎样,宗教讨论除外,行为是这样的,所以我需要解决这个问题。

    BR、

    Steve

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "读操作应简单地返回在引脚上看到的内容(当配置为输出读数时、返回写入的内容、配置为输入时、返回输入状态)。"

    精确地。 因此、当您将方向从输出转换为输入时、数据寄存器将获取"引脚"的状态、而不是您之前向这些引脚写入的状态。 这正是芯片的作用。

    要执行所需的操作、您将需要一个具有输入数据寄存器和输出数据寄存器的芯片。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    正如海报"Danny F"(早期)所说的那样-我也记得(我一直在这里)"这一问题已经解决了!

    通过 hallowed "Forum Search box"-如果选择正确的关键字-我相信、"Light may esce @ Tunnel’s end!"

    我被迫"退出欢乐时光"、并参与(部分/简要)盈利-但答案位于"API 函数调用序列"中!   (有点意外-实际上-作为一个"孩子"、我已经"测试/验证过的"照片存储器"、我记得(过去)帖子-回答您的问题-完全正确!)   阿尔利斯!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    数据"列表器"不是"真实"。 它只是一个选择输入路径(或内部总线驱动器)的多路复用器。 当方向改变时、不应将引脚输入状态锁存在数据寄存器。

    尽管数据输出和数据输入"显示"在存储器空间中的同一地址、但它们通常是完全不同的硬件路径。 TM4C 是我遇到的唯一一款在改变方向时将数据输出寄存器中的输入引脚状态锁存的处理器。

    实际上、请看一下它应该是什么样子的图。
    请看图6.7
    users.ece.utexas.edu/.../C6_MicrocontrollerPorts.htm

    他们有一条语句"常见错误:许多程序错误可追溯到 I/O 端口和常规存储器之间的混淆。 例如、您不应写入输入端口、有时我们不能从输出端口读取"、这就是我认为您所指的内容。

    我会说、在图6.7中、标签错误、"写入端口地址方向位"应显示"写入端口数据位"。

    您可以从此图中看到(无论标签命名如何) 更改端口方向寄存器不会将输入引脚状态回路回路到输出触发器、因为此时只能激活"从端口地址读取"或"写入端口数据位"或"写入端口方向寄存器"中的一个。

    这里的关键点是、读取返回 PIN 状态、而不一定是写入寄存器的状态、并且输出触发器(顶部触发器)应仅在显式写入时才会更新。 方向触发器与数据触发器的状态无关。

    但这并不是事物看起来的行为方式、几乎就像在"写入端口数据位"时钟输入 ORing 到"读取端口地址"上有一个或门一样
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Steve、
    UT 图可能是一个通用 IO 图,对于某些其他 TI MCU (即 TMS570 MCU)而言是如此。 我刚刚与我的同事(Amit)确认、TM4C 中只有一个物理数据寄存器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于我没有照片存储器、但确实记得类似的问题、我尝试找到上一篇文章、但20分钟后我找不到、因此决定再次寻求帮助。

    我刚刚再次尝试查找该帖子、甚至直接搜索我自己的帖子、但仍然无法找到它、因此如果您有链接、请告知我。 我真诚地想回顾一下、因为当前的行为似乎不正确、让我认为自己做的是错误的。

    论坛搜索框非常适合您根据需要调整术语。 我做不到。 抱歉。

    但是、前一个问题与 Tivaware 序列以及函数调用中"隐藏"的内容(即、设置方向寄存器也显式更改了配置... 反之亦然... 不记得了)

    该线程现在专门介绍了硬件的行为方式、即使是最低硬件级别也是如此、因此虽然当然是相似的、但大多数线程肯定不是"完全"相同的。

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

    我们必须同意"不同意"-我坚持"完全"-或至少 "快结束"。   (通常我对"剪切/粘贴"高价值"信息有足够的"约束"。)   注意-新海报 "Danny F."也有"类似回忆"-这是"两对一"-是不是吗?   (我们被告知 "丢了钥匙"-这 是一个内存不足-必须假设...)

    大多数供应商员工在周末退出-如果您到达这里-我将在明天进行搜索。

    一些"盈利活动"(此处未充分制定)预期-我有一个客户会议-明天会参与-如果您到达并发出信号...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    查尔斯
    (首先、澄清... 我将开始使用"触发器"一词来表示物理硬件"寄存器"、并将"寄存器"一词用于固件可访问的存储器位置、因为该术语意味着软件领域和物理硬件领域中的事物非常不同。)

    我同意只有一个触发器、并且只有一个用于数据的 FW 寄存器。 这就是所需的全部、也是 UT 图中的全部。

    读取存储器寄存器只需使能输入引脚即可驱动总线。 它不需要物理硬件触发器、"寄存器"映射到地址、而读操作使输入缓冲器能够驱动总线。 对于写入、触发器负载使能是根据相同的地址设置的、但事实是它是写入。

    正如我刚才提到的、相同的逻辑寄存器地址可以(并且将)映射到不同的硬件。

    我真正想看到的是图10-1的"数据控制"块中的详细信息。 《TivaTmTM4C1231H6PGE 微控制器数据表》中的数字 I/O 板。 我在数据表中的任何位置都找不到这个。

    BR、
    Steve
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "这里的要点是、读取返回的是 PIN 状态、而不是写入寄存器的状态、并且输出触发器(顶部触发器)应仅在显式写入时更新。"

    我认为这种行为可能有用、但我不确定这是否普遍可取。

    如您所述、使用(内部)上拉可以正常工作。 另一种方法是使用影子寄存器-不过、会出现小/快的干扰。 您还可以在输出引脚上悬挂一个电容器/电阻器网络以减轻这种情况。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们当前的解决方案是让瞬时驱动器保持高电平。 如果它在我们的系统中处于极低的竞争状态、甚至是如此、那么它的可能性就不会成为问题。

    我里面的净化器不是很喜欢:)

    BR、
    Steve
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    “虽然我的净化器不是很喜欢:)”

    我也可以理解这一点。 如果有任何问题、我可以确认您描述的行为是真实的-正如我能够复制的那样。

    我更希望使用两个数据寄存器、正如 TI 在 MSP430/432系列或大多数现代 MCU 中所做的那样。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Steve、

    [引用 user="Steve Clynes">读取存储器寄存器只需使能输入引脚即可驱动总线。 它不需要物理硬件触发器、"寄存器"映射到地址、而读操作使输入缓冲器能够驱动总线。 对于写入、触发器负载使能是根据相同的地址设置的、但事实是它是写入。 [/报价]

     根据我的经验、我很少看到引脚状态直接驱动外设总线、然后返回 CPU。 它始终被锁存(使用触发器)、原因包括在 STA 期间去毛刺脉冲、中断时序环路(静态时序分析)或在 GIO 的情况下检测边沿转换以生成中断。  

     下面是数据表的摘录。  

    GPIO 方向寄存器(GPIODIR)用来配置每个单独的管脚
    输入或输出。 当数据方向位清零时、GPIO 配置为输入、和
    相应的数据寄存器位捕获并存储 GPIO 端口上的值。 数据时
    方向位被置位、GPIO 被配置为输出、而相应的数据寄存器位被配置为输出
    GPIO 端口上的输出。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为我们都同意(我希望吗?) 这种行为符合数据表要求。

    如果这种行为是可取的,那么辩论似乎已经开始。 不幸的是、这非常主观、如此处所示。 我个人认为双方都可以提出论点。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    数据表、嗯、我想。 " GPIO 配置为输入、相应的数据寄存器位捕获并存储 GPIO 端口上的值"确实如此、 但是、物理硬件对于出现在同一寄存器地址的输入和输出数据具有不同的触发器是很常见的。

    正如你所说的,静音点因为这是它的行为方式,现在我知道我必须忍受输出高干扰并继续:-)

    不过讨论得很好。

    BR、
    Steve
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    查尔斯
    回复:“我很少看到直接驱动外设总线的引脚状态”,我同意并尝试逻辑简化信号流。 在 UT 演示中、您可以看到我试图传达的内容。 有时实际端口和系统总线之间还有其他"关断"、但最终结果是总线上在请求时弹出引脚状态。
    此数据也会自动弹入另一个触发器并不常见。

    BR、
    Steve
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "但是、物理硬件对于出现在同一寄存器地址的输入和输出数据具有不同的触发器是很常见的。 "

    同意。 例如、您可以在其中翻转引脚的方向寄存器以输出脉冲。 TI 在此处的实施使这种方法变得困难(但并非不可能)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    经过简单的搜索-我成功地找到了这个职位、"  相信"、以实现 您的目标。   

    "验证答案"是 由过去的论坛负责人 Amit Ashara 先生通过 2016年4月19日发布的@ 12:30撰写的。   原始海报"Brett Preston"-包含示例代码的 Amit 详细发现-出现于同一日期(2016年4月19日、@ 14:14 (下午2:14))

    文章详细介绍了" 一种克服 API 代码"干扰"GPIO 输出(低电平)的方法-在订购 GPIO 时立即从"输入"中删除。   该方法采用了 GPIO 函数调用的"异常序列"、正如我之前所回顾和注意到的。   

    这可能会直接"回答您的需求"、也 可能会建议  您 进一步考虑/调查的"新途径"。

    找到过去(2016年的主题帖)(如下所示)-主题帖的第1页中显示了2个重要帖子。   (主题包含"2页"-  第2页上的链接"存款读取器"-您必须向下滚动以显示"页面后退箭头"。  以便第1页的内容显示...)    也请注意-因为 "原因不明/不合理" - 过去的话题已 被"锁定" - 防止(或至少增加)寻求(进一步)建议和/或指导所需的努力...

    e2e.ti.com/.../1841296

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

    正如我之前提到的、参考帖子讨论了 API 的操作顺序、虽然它是绝对正确和相关的、但实际上并不是我特定问题的根本原因、也不是完整的故事。

    在您链接到的主题中、有一条注释"在本例中、您必须完全设置引脚的初始状态、然后才能启用输出驱动程序。"、但这实际上并不是整个故事。

    我的特定问题的真正原因是、当 DIR 寄存器被更改时、输出寄存器会被更新以反映输入的当前状态 (或由于它是输入而不断更新)。这完全排除了在改变方向寄存器之前"预先设置"输出状态的能力。 我猜、这种行为旨在确保在从输入切换到输出时引脚的状态不会出现毛刺脉冲、但这不是我需要的行为。 我需要确保我永远不能驱动高电平、只能驱动低电平(例如开漏)。 我需要 OD 行为、但使用内部上拉电阻器、但似乎无法同时配置 OD 和 WPU。

    因此、在我的例子中、我希望在引脚上"预加载"一个零、这样、如果/当我启用输出时、它只驱动低电平、 但是、如果外部引脚状态为高电平(由于内部或外部上拉)、则由于引脚是输入、数据寄存器将不接受预加载、并将保持高电平设置。 这意味着、即使我尝试在启用输出驱动器之前"完全设置引脚的初始状态"、切换时的输出状态仍将仅输出切换前输入端的状态、而不是输出我要强制的值。

    我不愿意将这一点弄清楚、但这是一种微妙但至关重要的区别、目前为止我在任何 E2E 主题中都未对此加以澄清。 数据表中确实显示了这种行为、但人类却将其埋在那里、这肯定不是我曾经使用过的其他微控制器的行为方式。

    我想我们已经把这种做法打败了死机了,但我想确保 E2E 上针对未来几代的硬件行为提供了完整的解释:)

    非常感谢您花时间研究这个问题。 像您这样的人会让 E2E 成为一个很棒的资源。

    BR、

    Steve

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我同意 Steve 的观点。 假设数据表准确、此行为由硬件驱动。 当方向从输入变为输出时、数据寄存器不会更新以反映输出数据寄存器的内容。

    因此、我不知道如何通过软件解决方案来解决这一问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的感谢、亲切/结束语。

    您是否根据规定的方法(过去(尚未搜索和找到)线程)实际尝试过(即使用硬件)?

    公司/我经常发现、"现实世界"挖掘/发现可能会导致"未探索(甚至)意外的道路!" ("在多种情况下"、"已编号/展开/超出"(任何/全部)数据表重复项...)