UART中断(UART_IIR_FCR_REG&0x0F => 7这是“保留”)

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
9个帖子/ 0个新
最后发表
jarirenejensen
离线
最后看到:1年3个月前
加入:2017-02-05 14:44
UART中断(UART_IIR_FCR_REG&0x0F => 7这是“保留”)

我使用UART1与2个不同的设备通信(2组Rx和Tx线)连接到单独的引脚。我首先从一个设备上读取一些数据。然后我重新配置引脚,以便UART1 Rx和TX连接到另一组gpio。然后我重新配置波特率并尝试与下一个设备通信,但uart init例程我得到一个uart中断与中断ID位[3-0]= 0111。
如果我在UART1 ISR中设置一个断点,然后按GO!当我点击断点时,它继续OK,但是UART2停止工作。

为什么会这样呢?
我应该怎么做这个中断ID的“保留”状态?

无效user_uart_init(uint16_t baudr, uint8_t dlf_value, uint8_t mode)
{
SetBits16 (CLK_PER_REG UART1_ENABLE 1);//启用clock - always @16MHz
SetBits16 (UART_LCR_REG UART_DLAB 0);
SetWord16 (UART_IIR_FCR_REG 0 x87);// Rx FIFO触发器级别设置为1/2 FULL,即16/2 = 8字节
SetWord16 (UART_IER_DLH_REG 0);
SetBits16 (UART_LCR_REG UART_DLAB 1);
SetWord16(UART_IER_DLH_REG, (baudr >> 8) & 0xFF);
SetWord16(UART_RBR_THR_DLL_REG, baudr & 0xFF);
SetWord16 (UART_LCR_REG模式);
SetWord16 (UART_DLF_REG dlf_value);
//如果uart_lcr_reg,启用发送中断,注册ier。DLAB = 0
SetBits16 (UART_LCR_REG UART_DLAB 0);-----------> 中断与UART_IIR_FCR_REG&0x0F = = 7

设备:
PM_Dialog
离线
最后看到:18小时41分钟前
工作人员
加入:2018-02-08 11:03
嗨jarirenejensen,

嗨jarirenejensen,

我看不懂连接图,请多提供一点信息给我让我问你一些问题来理解设备和DA1585之间的连接。请问这两个设备是如何连接到UART的?你是只使用UART1还是同时使用UART1和UART2?您提到UART2停止工作。

谢谢,PM_Dialog

jarirejenensen
离线
最后看到:1个月1个星期前
加入:2014-03-28 09:03
我使用UART2进行调试。

我使用UART2进行调试。UART2的停止实际上可能是由SW流停止引起的睡眠引起的。

请看附件中的原理图。

当切换与设备A和设备B之间的通信时,我像这样重新路由gpio:

void set_pad_fn_uart_deviceA(void) // set gpio port function mode
{
//关闭deviceB UART连接
GPIO_ConfigurePin(DEVB_RX_GPIO_PORT, DEVB_RX_GPIO_PIN, INPUT, PID_GPIO, false);
GPIO_ConfigurePin(DEVB_TX_GPIO_PORT, DEVB_TX_GPIO_PIN, INPUT, PID_GPIO, false);
//启用UART连接
GPIO_ConfigurePin(DEVA_RX_GPIO_PORT, DEVA_RX_GPIO_PIN, OUTPUT, PID_UART1_TX, false);
GPIO_ConfigurePin(DEVA_TX_GPIO_PORT, DEVA_TX_GPIO_PIN, INPUT, PID_UART1_RX, false);

void set_pad_fn_uart_deviceB(void) // set gpio port function mode
{
//关闭设备连接
GPIO_ConfigurePin(DEVA_RX_GPIO_PORT, DEVA_RX_GPIO_PIN, INPUT, PID_GPIO, false);
GPIO_ConfigurePin(DEVA_TX_GPIO_PORT, DEVA_TX_GPIO_PIN, INPUT, PID_GPIO, false);
//启用deviceB UART连接
GPIO_ConfigurePin(DEVB_RX_GPIO_PORT, DEVB_RX_GPIO_PIN, OUTPUT, PID_UART1_TX, false);
GPIO_ConfigurePin(DEVB_TX_GPIO_PORT, DEVB_TX_GPIO_PIN, INPUT, PID_UART1_RX, false);

在pad重新路由fn被调用后,我重新初始化uart:
user_uart_init(UART_BAUDRATE_9K6, UART_FRAC_BAUDRATE_9K6, UART_CHARFORMAT_8);
或:user_uart_init(UART_BAUDRATE_115K2, UART_FRAC_BAUDRATE_115K2, UART_CHARFORMAT_8);
取决于设备A或B。
它是在初始化功能,一旦IRQ是启用我看到的问题。

刘若英

附件:
PM_Dialog
离线
最后看到:18小时41分钟前
工作人员
加入:2018-02-08 11:03
嗨jarirejenensen,

嗨jarirejenensen,

谢谢你上传你正在使用的原理图。但是你能不能明确你的问题是什么,以便尝试复制它?从你的描述中我可以理解,问题是UART2停止工作了?另外,当在设备A和设备B之间切换UART,并重新路由gpio时,哪一个是问题?

谢谢,PM_Dialog

jarirenejensen
离线
最后看到:1年3个月前
加入:2017-02-05 14:44
你好,我得到了一个UART

你好,我得到了一个UART中断,是保留的。我不知道如何处理。我现在忽略了它。(UART_IIR_FCR_REG&0x0F => 7是“保留”)
应该忽略这个中断吗?

数据表
表37:UART中断优先级
中断ID位[3-0]= 0111:优先级最低:保留

刘若英

jarirenejensen
离线
最后看到:1年3个月前
加入:2017-02-05 14:44
我侥幸逃脱了

我忽略了这个打断。但我现在的处境是,我不断地让一切都嘎然而止。
插入一段睡眠期似乎能缓和这个问题。

我可以重置UART一些如何避免睡眠?

刘若英

PM_Dialog
离线
最后看到:18小时41分钟前
工作人员
加入:2018-02-08 11:03
嗨jarirenejensen,

嗨jarirenejensen,

我不明白你的问题是什么。当设备进入休眠模式时,UART不工作?你不想进入睡眠模式吗?我理解对了吗?请澄清你的问题。

谢谢,PM_Dialog

jarirenejensen
离线
最后看到:1年3个月前
加入:2017-02-05 14:44
问题是我不能

问题是我不能切换UART的使用-它被卡在这个中断的永不结束的接收中。
如果我在用法1和重新配置用法2之间睡觉,它就可以工作。
因此我
1关闭UART。
2进入睡眠
3从睡梦中醒来
4配置UART的其他用途。

我真的不想通过睡眠模式,因为它增加了复杂性,使事情花更长的时间。更糟的是,也许不是睡眠拯救了我,也许是如果睡眠时间太短,那就没有意义了。
我猜睡眠修复了这个问题,因为UART在睡眠期间被关闭,因此硬件复位-但我不知道。

波特率的变化是问题所在吗?
是GPIO使用的变化造成的问题吗?

BR Rene

PM_Dialog
离线
最后看到:18小时41分钟前
工作人员
加入:2018-02-08 11:03
嗨jarirenejensen,

嗨jarirenejensen,

不好意思,耽误了,我正在重复你的问题,我会尽快给你回复。如果没有任何睡眠模式,您能够重新配置UART吗?我认为这不是波特率或GPIO使用的问题。

谢谢,PM_Dialog