我使用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中断
嗨jarirenejensen,
我看不懂连接图,请多提供一些信息给我让我问你一些问题,以理解设备和DA1585之间的连接。请问这两个设备是如何连接到UART的?您是只使用UART1还是同时使用UART1和UART2?您提到UART2停止工作。
谢谢,PM_Dialog
我使用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启用我看到的问题。
刘若英
嗨jarirejenensen,
感谢您上传您所使用的原理图。但是你可以请清楚了,你的问题是为了尝试复制呢?正如我能够从你的描述理解,问题是,UART2停止工作?此外,开关设备A和设备B之间UART时,你重新路由的GPIO,这是问题?
谢谢,PM_Dialog
你好,我得到一个UART中断,是保留的。我不知道该怎么处理。我现在忽略它。(UART_IIR_FCR_REG&0x0F => 7,这是"保留")
如果这种中断被忽略?
数据表Revision 3.2 04- april -2018
表37:UART中断优先级
中断ID位[3-0]= 0111:优先级最低:保留
刘若英
我有侥幸忽略中断。但我现在在我得到它不断地使一切陷于停顿的情况。
插入一个睡眠周期似乎调解的问题。
我有些重置UART如何避免睡眠?
刘若英
嗨jarirenejensen,
我无法理解,你的问题。当设备进入休眠模式时,UART不工作?所以,你想不进入睡眠模式?难道我没有理解错?请澄清这是你的问题。
谢谢,PM_Dialog
问题是,我不能切换UART的使用 - 它被卡在该中断的永不落幕的接收。
如果我使用1和重新配置之间睡觉使用2它的工作原理。
因此我
1关闭UART。
2进入睡眠
3从睡梦中醒来
4配置UART其他用途。
我真的不想通过睡眠模式,因为它增加了复杂性,使事情花费更长的时间。更糟糕的是,也许不是睡眠拯救了我,也许,如果睡眠时间太短,它不会。
我猜睡眠修复了这个问题,因为UART在睡眠期间被关闭,因此是硬件重置-但我不知道。
难道是波特率,这是问题的变化?
它是在GPIO使用,这是问题的变化?
BR Rene
嗨jarirenejensen,
抱歉耽搁,我试图复制您的问题,我会尽快回复您。没有任何睡眠模式下,你可以重新配置UART?我认为这不是一个波特率或GPIO的使用问题。
谢谢,PM_Dialog