UART Interpup(UART_IIR_FCR_REG&0x0F => 7为“保留”)

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
9个帖子/ 0新
最后一篇
JarireneJensen.
离线
最后一次露面:2个月前1年
加入:2017-02-05 14:44
UART Interpup(UART_IIR_FCR_REG&0x0F => 7为“保留”)

我正在使用UART1与2个不同的设备(2组RX和TX线)通信,连接到单独的引脚。我首先从一个设备读取一些数据。然后我重新配置引脚,使UART1 RX和TX连接到不同的GPIO集。然后我重新配置波特率并尝试与下一个设备通信,但UART init例程我通过中断ID位[3-0] = 0111获取UART中断。
如果我在UART1 ISR中设置了一个断点,只需按Go!一旦我击中打破点,它会继续确定,但UART2停止工作。

为什么会发生这种情况?
我应该做什么关于中断ID的“保留”状态?

void user_uart_init(uint16_t baudr,uint8_t dlf_value,uint8_t模式)
{
setBits16(CLK_PER_REG,UART1_ENABLE,1);//启用时钟 - 始终@ 16MHz
setBits16(UART_LCR_REG,UART_DLAB,0);
setword16(UART_IIR_FCR_REG,0x87);// 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);
//启用TX中断,如果UART_LCR_REG.DLAB = 0,则注册IER
setBits16(UART_LCR_REG,UART_DLAB,0);----------->中断UART_IIR_FCR_REG&0x0f == 7

设备:
PM_DIALOG.
离线
最后一次露面:2天1小时前
职员
加入:2018-02-08 11:03
嗨Jarirenejensen,

嗨Jarirenejensen,

我无法理解连接图,所以请为我提供一些有关它的信息。让我问你一些问题要了解设备与DA1585之间的连接。请澄清2个设备如何连接到UART?您只使用UART1或UART1和UART2吗?你提到uart2停止工作。

谢谢,PM_DIALOG.

Jarirejenensen.
离线
最后一次露面:1个月3小时前
加入:2014-03-28 09:03
我使用UART2来调试。

我使用UART2来调试。UART2停止可能实际上是由SW流动停止产生的睡眠引起的。

请参阅附件的原理图。

在与设备A和设备的通信之间切换时,我将像这样的GPIOS一样:

void set_pad_fn_uart_devicea(void)//设置GPIO端口函数模式
{
//禁用DeviceB UART连接
gpio_configurepin(devb_rx_gpio_port,devb_rx_gpio_pin,输入,pid_gpio,false);
gpio_configurepin(devb_tx_gpio_port,devb_tx_gpio_pin,输入,pid_gpio,false);
//启用设备auart connectaction
gpio_configurepin(deva_rx_gpio_port,deva_rx_gpio_pin,输出,pid_uart1_tx,false);
gpio_configurepin(deva_tx_gpio_port,deva_tx_gpio_pin,输入,pid_uart1_rx,false);
}

void set_pad_fn_uart_deviceb(void)//设置gpio端口函数模式
{
//禁用Devicea Connection
gpio_configurepin(deva_rx_gpio_port,deva_rx_gpio_pin,输入,pid_gpio,false);
gpio_configurepin(deva_tx_gpio_port,deva_tx_gpio_pin,输入,pid_gpio,false);
//启用DeviceB UART连接
gpio_configurepin(devb_rx_gpio_port,devb_rx_gpio_pin,输出,pid_uart1_tx,false);
gpio_configurepin(devb_tx_gpio_port,devb_tx_gpio_pin,输入,pid_uart1_rx,false);
}

在焊盘重新路由Fn之后被称为I Re-Init 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启用,它就在init函数中,我看到了这个问题。

rene.

附件:
PM_DIALOG.
离线
最后一次露面:2天1小时前
职员
加入:2018-02-08 11:03
嗨Jarirejenensen,

嗨Jarirejenensen,

感谢您上传您正在使用的原理图。但是你能清楚你的问题是为了尝试复制它吗?因为我能从您的描述中理解,问题是UART2停止工作?此外,在设备A和设备B之间切换UART并且您重新路由GPIOS,这是问题?

谢谢,PM_DIALOG.

JarireneJensen.
离线
最后一次露面:2个月前1年
加入:2017-02-05 14:44
嗨,我得到了一个uart

嗨,我得到了保留的UART Interfup。我不知道如何处理。我目前忽略了它。(UART_IIR_FCR_REG&0x0f => 7,它是“保留”)
这种中断应该被忽略吗?

Datasheet Revision 3.2 04-APR-2018
表37:UART中断优先级
中断ID位[3-0] = 0111:优先级最低:保留

rene.

JarireneJensen.
离线
最后一次露面:2个月前1年
加入:2017-02-05 14:44
我已经离开了

我已经忽略了这个中断。但我现在处于一个情况下,我不断地让其他一切都磨损到停止。
插入睡眠周期似乎调解了问题。

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

仁茹

PM_DIALOG.
离线
最后一次露面:2天1小时前
职员
加入:2018-02-08 11:03
嗨Jarirenejensen,

嗨Jarirenejensen,

我无法理解你的问题是什么。当设备进入睡眠模式时,UART不起作用?那么,你想要没有进入睡眠模式?我明白了吗?请澄清你的问题。

谢谢,PM_DIALOG.

JarireneJensen.
离线
最后一次露面:2个月前1年
加入:2017-02-05 14:44
问题是我不能

问题是我无法切换UART的用法 - 它陷入了此中断的永无止境接收。
如果我在使用中睡眠1和重新配置使用2,它有效。
因此,我
1禁用UART。
2进入睡眠
3从睡梦中醒来
4配置UART其他用法。

我真的不想通过睡眠模式来通过睡眠模式,因为它增加了复杂性并且使事情变长。更糟,它可能不是节省我的睡眠,也许a如果睡眠周期太短,那就没有。
我猜睡眠修复了问题,因为UART在睡眠期间关闭,因此硬件复位 - 但我不知道。

是问题的变化吗?
这是GPIO使用情况的变化吗?

布鲁尼茹

PM_DIALOG.
离线
最后一次露面:2天1小时前
职员
加入:2018-02-08 11:03
嗨Jarirenejensen,

嗨Jarirenejensen,

抱歉延迟,我正在尝试复制您的问题,我会尽快回复您。没有任何睡眠模式,您是否能够重新配置UART?我认为这不是波特率或GPIO使用问题。

谢谢,PM_DIALOG.