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:UART 标志寄存器的 UART RXFE (接收 FIFO 空)位在接收到串行数据时显示为1、且 FIFO 被禁用

Guru**** 2468460 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/671597/tm4c123gh6pm-uart-rxfe-receive-fifo-empty-bit-of-uart-flag-register-shows-as-1-even-on-reception-of-serial-data-with-fifo-disabled

器件型号:TM4C123GH6PM

您好! 我感谢这个社区论坛。

问题-禁用 FIFO 时 UART 标志寄存器的 RXFE 位的行为

场景-在禁用 FIFO 的情况下使用 UART0。 使用 PC 上运行的终端应用程序通过 UART 将一个数据字节发送到 Tiva 板。 我看到的 RXFE (接收 FIFO 空)位  

即使接收到通过终端应用发送的1字节数据、UART FR (标志寄存 器)也为1;因此我无法使用 UARTCharGetNonBlocking ()进行读取。  数据表显示-

如果 FIFO 被禁用、则空和满标志将根据1字节深的保持寄存器的状态进行设置。

因此、我希望在接收到数据后该标志位为0。  

此外、正如数据表提到的-

两个 FIFO 都可以通过 UART 数据(UARTDR)寄存器访问。

我能够通过直接读取 UART 数据寄存器来访问接收到的字节。

我在这里有2个问题-

为什么 RXFE 指示 UART 接收保持寄存器为空、即使我能够通过直接访问 UART 数据寄存器来读取接收到的字节也是如此?

数据表提到了以下有关 UART 数据寄存器的信息-

重要提示:该寄存器是读敏感的。

读取敏感的含义是什么?

/*** main.c ***/

#include 
#include 
#include 
#include "driverlib/sysctL.h"
#include "driverlib/rom.h"
#include "UART_handler .h"

void controllerInit();

int main ()
{
controllerInit();
UART0_init ();
while (1);
}

void controllerInit()
{
//设置控制器
rom_sysctl | SYSC_sysctl 1 | SYSC_sysctl 1 | SYSC_sysctl 1 | SYSC_sysctl 1

/*** UART_handler.c ***/

#include "UART_handler .h"

// UART0中断服务例程
void UART0_ISR ()
{
volatile UART32_t ui32Status、ui32ReceivedData=0;
volatile uint8_t ui8RxData =0;
ui32Status = ROM_UART0 (UART0
) UART0





) UARTxbase (UART0_UART0_UART0_UART0+ UART0+ UART0+ UART0+ UART0+ UART0+ UART0+ UART0+ UART0+ UART0+ UART0+ UART0+ UART0+ UART0+ UART0+ UART0+ UART0+ UART0+ UART





}

void UART0_init ()
{
// UART 外设使能
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
// GPIO 使能、其中包含 UART 引脚
ROM_SysCtlPeripheralEnable (SYSCTL_PERIPH_GPIOA);
//主中断使能
ROM_IntMasterEnable ();
//配置 UART_PIN_0_GPIO_PUTx
(UART_GPIO0)



;//配置 UART_GPIO_PIN_PIN_0_GPIO1引脚
//配置 UART 时钟
ROM_UARTConfigSetExpClk (UART0_BASE、ROM_SysCtlClockGet ()、115200、
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE);
//禁用 FIFO
UARTFIFODisable (UART0_BASE);
/

启用 UART0_INT_INT_INTERRUPT

;/启用 UART0中断 UARTINT_INT_INT_INT_INT_RIN
/*** UART_handler.h ***/

#ifndef __UART_handler __
#define __UART_handler__

#include 
#include 
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"

#include "driverlib#driver.h"#include "driverlib.idt.idt.idt.idr.eh"#include "#include "driverlib.unicl"#include "driverlib.id.id.id.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.






 

 


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

    [引用 user="Saurabh Soni"]此处的敏感信息是什么意思?

    通过"读取敏感"(您会收到提醒)、简单的"读取行为"(例如"读取敏感声明"寄存器)可能(甚至是预期)导致"该寄存器内容的更改!"

    我怀疑您的问题(可能)是由" 密钥(即敏感) UART 寄存器"导致的、  在 IDE 中打开以查看。  "打开以查看"可能会导致(不需要的)更改您的"密钥位"-这将"被"寻址和读取"这样关键的寄存器的简单行为所更改。   (即使是 IDE -您的"官方代码读取"之前也是如此。)

    您可以通过"删除该注册表项"-从"打开以查看"状态(通过 IDE)进行检查/确认 -然后重复检查...   祝你有机会。

    BTW -非常棒的帖子-描述得很好-整洁的呈现-非常详细!   很棒!   和... 的首次发布!    远远超出了我的第一个帖子-我(深思熟虑和大声)在其中宣称 "不起作用!"

    [编辑](已添加)...  下面是  具有 IN 寄存器 UARTFR 的"RXFE"位描述导入  :(MCU 手册的真实副本)

    该位的含义取决于 UARTLCRH 寄存器中 FEN 位的状态。

    值描述

    0     接收器不为空。

    1     如果 FIFO 被禁用(FEN 为0)、则接收保持寄存器为空。   *** 这是您的情况(禁用 FIFO)

          如果 FIFO 使能(FEN 为1)、则接收 FIFO 为空。

    然后您写: "接收到数据后、我希望此标志位为0。"   我同意。

    现在、我是否可以建议您在发送该单个字符之前、在 UARTFR 中选中"Check bit "RXFE"?   位、"更改状态吗?"   看起来确实是"明智的"、让您进行检查和确认- UARTLCRH 寄存器中的 Fen 位-同意此处列出的内容...

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

    下面显示了 MCU 手册的详细信息:UARTDR 寄存器-有望"读取敏感"详细信息-但(在我看来)-"无法交付!"  

    预计 放置在适当寄存器位的 A、"R>C"(任何读取都会清除或类似的读取)将确认" 读取灵敏度"。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我能够重复您在 Fen 上提到的行为。 我对您的回答不是很好。 由于您使用的是中断、您现在是否可以忽略 Fen、而我更深入地探讨了这一点?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    因为这是我们海报的"第一篇文章"-我们应该注意到您的回答(正确)针对他。
    我在这里的尝试是为了(节省)您/他人的时间/努力-通过一个帖子中展示关键的手动摘录-和"整合和捆绑-许多关键事实"。  (我的第一个、这里)

    您是否可以评论:"宣布 "读敏感?"   据我所知、我已尽最大努力进行了解释-但注册描述被标记为"放弃承诺..."

    一如既往-感谢并感谢您的努力。    "第一计时器!"的帖子

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    是您对"读取灵敏度"的评论是有效的。 我将注意改进这一点。 "读取灵敏度"的要点是读取具有副作用。 在 FIFO 模式和非 FIFO 模式下、读操作的效果不同。 在 FIFO 模式下、读操作将从 FIFO 中弹出最早的条目。 在非 FIFO 模式下、读操作将清除 RX 中断状态位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢、Bob。

    我感谢你(措辞)"副作用"-胜过我的"修改(那个)登记册的内容"。   虽然在这种特定情况下、我的描述可能是"正确的"-您的描述是"更安全、更一般的"。

    远程时、是否可能(包括)海报和(甚至)您可能已经"被 IDE "影响该位值"的能力所吸引-即使是不需要的-因为该寄存器只是"开放/查看"和"读取敏感?"   (请注意、我在此处的初始答复中详细说明了这种情况...)

    再次感谢您...

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

    首先,谢谢主席先生的发言。

    [引用 USER="CB1_MOBIT]现在、我是否可以建议您在发送单个字符之前、在 UARTFR 中选中"RXFE"位?   位、"更改状态吗?"   看起来确实是"明智的"、供您检查和确认- UARTLCRH 寄存器中的 Fen 位-同意此处列出的内容...[/QUERP]

    我已验证-

    • 在发送第一个串行字节之前-  

    1.   UARTLCRH = 0时的 Fen 位
    2.  UARTFR = 1时的 RXFE 位  

    在发送第一个串行字节后、上述两个位也会观察到相同的状态。

    [引用 USER="CB1_MOBIT"]我怀疑您的问题(可能)是由   IDE 中的"密钥(即敏感的) UART 寄存器"、"打开查看"引起的。[/引用]

    是的,这是个问题! 我使用的是 Keil MDK uVision v5.23 我在调试时打开了 UART0窗口。 [外设->系统查看器-> UART0]

    下面是相同的快照。

    当我再次尝试时-在以调试模式运行代码之前关闭此 UART0窗口之后-我看到代码能够到达 UART_handler.c 文件的第17行,即我能够 使用  UARTCharGetNonBlocking ()进行读取 

    [引述 USER="CB1_MOBIT"]通过"读敏感"-您会收到提醒-简单的"读操作"(例如"读敏感声明"寄存器)可能(甚至是预期)导致"该寄存器内容的更改!"[/QUERPES]

    我在这里有了想法-谢谢。  

    [引用 user="CB1_MOBIT]BTW -非常棒的帖子-描述得很好-呈现得很整齐-非常详细!   很棒! [/报价]

    感谢您的感谢:)

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

      [引用用户="Bob Crosby">在 FIFO 模式和非 FIFO 模式下、读取的效果不同。 在 FIFO 模式下、读操作将从 FIFO 中弹出最早的条目。 在非 FIFO 模式下、读操作将清除 RX 中断状态位。[/引号] 感谢 SIR 提供的这些信息。 这很有帮助。

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

    [引用 user="CB1_MOBIT"] 放置在相应寄存器位上的"R>C"(任何读取将清除或类似内容)应确认为 "读取灵敏度"。

    有没有办法,我们可以得到这些遗漏的细节,先生?

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

    首先、再说一次、您的组织和对细节的期待-尤其是对于"如此新"的论坛访问者-是(并且仍然)"好极了!"    感谢您的善意验证、以便我即将"离开"(如无 )"眼泪之谷" 的"离开"可能会被一英里地盯着。   (可能)

    拥有和经营一家小型科技公司(在过去的共同创立之后-另一家上市公司)-我"不得不问"-"您有什么方法成为(令人难以置信)论坛的智慧?"    真的-您的关心、努力和专业知识"跃出"-我无法为您提供足够的补充!   谁还会像您一样"考虑"-感谢论坛-在您的"开场白"中?    (您可能会注意到(可能)这里很少有人会表现出这样的好奇心-但您/我可能会"点燃烈酒"。)   以及您的才能和专业知识...  只是需要掌声。

    怀疑 您"经验颇多"和""是不是我错的。 (限于)"此供应商"-和/或"此论坛?"   (即使如此-您的帖子仍然"出色"。)

    对于您的"遗漏详细信息"-我已确定事实-已通知供应商-他们的反应"超出了我们的控制范围"。   从"编辑 MCU 手册"(通过突出显示的颜色)中没有任何"阻止您/他人"-指示注意该寄存器的"读取灵敏度"。    (赦免-但等待供应商纠正-即使是(最高的)"沙钟/计时器"-也可能会被过度征税...)

    我是否注意到您的发帖技巧"非常出色?"