基于IMX515 EVK+WINCE6.0---debug串口由UART1改为UART2
1. 硬件变更
EVK评估板采用UART1作为调试口,而我们的平台用UART2作为调试口,先来看下图:
图1
由此可见,IMX515一般情况下都有多个PAD可以由软件配置为同样的功能,比如EIM_D17 PAD可以配置为UART2_RXD功能,UART2_RXD PAD也可以配置为UART2_RXD功能,这就是IMX515的灵活的地方,同时也增加了复杂性。
我们的平台是分别选择UART2_RXD和UART2_TXD这两个PAD分别作为UART2_RXD和UART2_TXD功能的。
2. 软件上的修改
2.1 debug 串口的初始化流程
图2
2.2 debug串口流程中需要修改和或是比较重要的函数介绍
⑴OEMInitDebugSerial函数
图3
BSP_BASE_REG_PA_DEBUG_SERIAL在src\inc\bsp_base_reg_cfg.h中定义如下:
#define BSP_BASE_REG_PA_DEBUG_SERIAL CSP_BASE_REG_PA_UART1
这里定义了串口debug起始物理地址,采用这样的方式比较便于根据项目需要修改debug的串口,因为我们的debug改为UART2,所以要改为:
#define BSP_BASE_REG_PA_DEBUG_SERIAL CSP_BASE_REG_PA_UART2
相应的serInfo.uartBaseAddr = CSP_BASE_REG_PA_UART1;也改为serInfo.uartBaseAddr= BSP_BASE_REG_PA_DEBUG_SERIAL
⑵OALConfigSerialUART
图4
接下来的代码是,在软件复位完成后,配置UCR1~4寄存器、UFCR、UTS、UBIR和UBMR寄存器:
图5
这里的pBspArgs->clockFreq[DDK_CLOCK_SIGNAL_UART]在OALBspArgsInit函数中赋值的,而且要注意的是在向UBMR写入数据之前必须先写入UBIR,否则写的动作被忽略。
⑶OALConfigSerialIOMUX
图6
详细信息见IOMUXC_SW_MUX_CTL_PAD_UART1_RXD寄存器,为了更好去理解,我们先来看EVK板debug串口原理图部分:
图7
由图7可知分别采用UART1_RXD和UART1_TXD这两个PAD座位UART1_RX和UART1_TX,对于IMX515,有几个功能模块的port可以连接到UART1_RXD和UART1_TXD,如下图:
图8
对于UART1_RXD来说,由图8可知,RXD_MUX、GPIO[28]、READY_ESC_OUT、EMI_DEBUG[12]和DATAOUT[10]这些Port在IOMUXC的控制下,可选择其中一个Port连接到UART1_RXD这个PAD上,具体选择哪个Port,可根据项目的实际需要由软件来选择,Port和PAD的关系如下:
图9
对于硬件设计人员来说,需要知道IMX515对外连接的有哪些PAD,每个PAD可以作为哪些功能,比如对于UART2_RXD这PAD来说,可以选择作为下面的功能:
图10
因为我们采用UART2_RXD和UART2_TXD这两个PAD分别作为UART2_RXD和UART2_TXD功能的,所以需要把OALConfigSerialIOMUX函数修改为下面的代码:
case CSP_BASE_REG_PA_UART2: // kandi add at 2013.09.07
OAL_IOMUX_SET_MUX(pIOMUX,DDK_IOMUX_PIN_UART2_RXD,
DDK_IOMUX_PIN_MUXMODE_ALT0,DDK_IOMUX_PIN_SION_REGULAR);
OAL_IOMUX_SET_MUX(pIOMUX,DDK_IOMUX_PIN_UART2_TXD,
DDK_IOMUX_PIN_MUXMODE_ALT0,DDK_IOMUX_PIN_SION_REGULAR);
OAL_IOMUX_SEL_IN(pIOMUX,DDK_IOMUX_SELECT_INPUT_UART2_IPP_UART_RXD_MUX,0x2);
最后一行OAL_IOMUX_SEL_IN是选择UART2_RXD这个PAD为ALT0模式,为什么还要做这个设置呢?先来看IOMUXC_SW_MUX_CTL_PAD_UART2_RXD寄存器相关位的描述,如下:
图11
因为UART2_RXD PAD在daisy chain结构中,我们需要先通过IOMUXC_SW_MUX_CTL_PAD_UART2_RXD寄存器选为UART2_RXDPAD为ALT0模式,然后再配置IOMUXC_UART2_IPP_UART_RXD_MUX_SELECT_INPUT寄存器,如下图:
图12