大家好,我在davinci dm6446的linux-2.6.18_pro500上使用UART1来做485的收发,我的修改有:
1,增加
static struct uart_port serial_platform_data[] = {
{
.membase = (unsigned char __iomem *)IO_ADDRESS(DAVINCI_UART0_BASE),
.mapbase = (unsigned long)DAVINCI_UART0_BASE,
.iotype = UPIO_MEM,
.irq = IRQ_UARTINT0,
.uartclk = 27000000,
.regshift = 2,
.type = PORT_16550A,
.line = 0,
.flags = ASYNC_SKIP_TEST,
},
{
.membase = (unsigned char __iomem *)IO_ADDRESS(DAVINCI_UART1_BASE),
.mapbase = (unsigned long)DAVINCI_UART1_BASE,
.iotype = UPIO_MEM,
.irq = IRQ_UARTINT1,
.uartclk = 27000000,
.regshift = 2,
.type = PORT_16550A,
.line = 1,
.flags = ASYNC_SKIP_TEST,
}
};
2,在函数
static void board_init(void)中增加
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_UART1, 1);
3,在arch/arm/mach-davinci/mux_cfg.c里
#if 1 //ATA功能不用
MUX_CFG("HDIREN", 0, 16, 1, 0, 1)
MUX_CFG("ATAEN", 0, 17, 1, 0, 1)
#else
MUX_CFG("HDIREN", 0, 16, 1, 1, 1)
MUX_CFG("ATAEN", 0, 17, 1, 1, 1)
#endif
MUX_CFG("UART1", 1, 2, 1, 1, 1)
这样修改后,再调用WRITE向uart1写数据时,还是不能发送出去,清问是什么原因导致啊?我跟踪数据已经到了打开发送中断了,
port->ops->start_tx(port); ---> serial8250_start_tx(); ---> up->ier |= UART_IER_THRI;但是数据就是没有发送出来。
请教大家,这可能是什么原因导致?还是有什么地方还没有考虑到吗?