This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

uboot下不能使用串口2



为了在uboot下使用c串口2做了一下修改

1.在配置文件文件中添加

/*
* NS16550 Configuration
*/
#define CONFIG_SERIAL_MULTI 1
#define CONFIG_SYS_NS16550
#define CONFIG_SYS_NS16550_SERIAL
#define CONFIG_SYS_NS16550_REG_SIZE (-4)
#define CONFIG_SYS_NS16550_CLK (48000000)
#define CONFIG_SYS_NS16550_COM1 0x48020000 /* Base EVM has UART0 */
#define CONFIG_SYS_NS16550_COM2 0x48022000
#define CONFIG_SYS_NS16550_COM3 0x48024000 //支持uart2

2.在mux.h中修改

我用的引脚是GP1[19]=51,GP1[20]=52

/* -116 */ BIT(5), BIT(5), BIT(6), BIT(6),

3.在evm.c中

void per_clocks_enable(void)
{
u32 temp;

__raw_writel(0x2, CM_ALWON_L3_SLOW_CLKSTCTRL);

/* TODO: No module level enable as in ti8148 ??? */
#if 0
/* TIMER 1 */
__raw_writel(0x2, CM_ALWON_TIMER_1_CLKCTRL);
#endif
/* Selects OSC0 (20MHz) for DMTIMER1 */
temp = __raw_readl(DMTIMER_CLKSRC);
temp &= ~(0x7 << 3);
temp |= (0x4 << 3);
__raw_writel(temp, DMTIMER_CLKSRC);

#if 0
while(((__raw_readl(CM_ALWON_L3_SLOW_CLKSTCTRL) & (0x80000<<1)) >> (19+1)) != 1);
while(((__raw_readl(CM_ALWON_TIMER_1_CLKCTRL) & 0x30000)>>16) !=0);
#endif
__raw_writel(0x2,(DM_TIMER1_BASE + 0x54));
while(__raw_readl(DM_TIMER1_BASE + 0x10) & 1);

__raw_writel(0x1,(DM_TIMER1_BASE + 0x38));

/* UARTs */
__raw_writel(0x2, CM_ALWON_UART_0_CLKCTRL);
while(__raw_readl(CM_ALWON_UART_0_CLKCTRL) != 0x2);

__raw_writel(0x2, CM_ALWON_UART_1_CLKCTRL);
while(__raw_readl(CM_ALWON_UART_1_CLKCTRL) != 0x2);

__raw_writel(0x2, CM_ALWON_UART_2_CLKCTRL);  //使能UART模块
while(__raw_readl(CM_ALWON_UART_2_CLKCTRL) != 0x2);

while((__raw_readl(CM_ALWON_L3_SLOW_CLKSTCTRL) & 0x2100) != 0x2100);

.......

}

4.使用uart2流程

  1>首先调用eserial2_init();函数

 2>调用_serial_putc(0x01,0x03);  //第一个参数是要发送的数据,第二个参数是串口号

 现在的情况是发送两个字节以后在ns16550.c中会死在下面的函数中

void NS16550_putc (NS16550_t com_port, char c)
{
while ((serial_in(&com_port->lsr) & UART_LSR_THRE) == 0);  //会始终等待发送完成,死在了这儿
serial_out(c, &com_port->thr);
}

ns16550.c这个文件没有修改

我还试了试串口1,没有出现这个情况。另外我还将u-boot.min.nand重新编译了再烧到flash中也不行

请问有没有遇到过相似情况的,没有头绪啊