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

⚠️
您好..感谢来参加论坛。令人振奋的消息!我们现在在移动到我们的新论坛的平台,将提供更好的功能,并且包含在主对话框网站中的过程。所有职位和帐户已迁移。现在我们接受的新论坛的流量只有 - 请发表任何新的线程在//www.xmece.com/support。我们将修复bug /优化搜索和标记在未来的日子里。
9个员额/ 0个新员额
最后发表
jarirenejensen
离线
最后一次露面:1年3个月前
加入:2017-02-05 14:44
UART Interrup (UART_IIR_FCR_REG&0x0F => 7,这是“保留”)

我使用UART1用于与连接到独立的引脚2个不同的设备(2套Rx和Tx导线)的通信。我第一次从一个设备读取一些数据。然后我重新配置引脚使UART1 Rx和Tx连接到一组不同的GPIO。然后我重新配置波特率并试图与下一个设备,但是UART初始化例程获得带有中断ID位[3-0] = 0111的UART中断通信。
如果我设置在UART1 ISR,只是按GO一个破发点!只要我打的断点继续确定,但UART2停止工作。

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

空隙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,0×87);// 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);
// ENABLE TX中断,REGISTER IER IF UART_LCR_REG.DLAB = 0
SetBits16(UART_LCR_REG,UART_DLAB,0);----------->使用UART_IIR_FCR_REG&为0x0F == 7中断

设备:
PM_Dialog
离线
最后一次露面:4天19小时之前
职员
加入:2018年2月8日11:03
嗨jarirenejensen,

嗨jarirenejensen,

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

谢谢,PM_Dialog

jarirejenensen
离线
最后一次露面:1周4天前
加入:2014年3月28日09:03
我使用UART2调试出来。

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

请参阅附示意图。

当与设备A和设备B之间的通信开关I重新路由的GPIO像这样:

void set_pad_fn_uart_deviceA(void) //设置gpio端口功能模式
{
//禁用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);
}

空隙set_pad_fn_uart_deviceB(无效)//组GPIO端口功能模式
{
//禁用deviceA连接
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);
}

垫重新路由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
离线
最后一次露面:4天19小时之前
职员
加入:2018年2月8日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,这是"保留")
如果这种中断被忽略?

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

刘若英

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

我有侥幸忽略中断。但我现在在我得到它不断地使一切陷于停顿的情况。
插入一个睡眠周期似乎调解的问题。

我有些重置UART如何避免睡眠?

刘若英

PM_Dialog
离线
最后一次露面:4天19小时之前
职员
加入:2018年2月8日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
离线
最后一次露面:4天19小时之前
职员
加入:2018年2月8日11:03
嗨jarirenejensen,

嗨jarirenejensen,

抱歉耽搁,我试图复制您的问题,我会尽快回复您。没有任何睡眠模式下,你可以重新配置UART?我认为这不是一个波特率或GPIO的使用问题。

谢谢,PM_Dialog