|
发表于 2011-9-22 11:29:05
|
显示全部楼层
上面是我以前做的AT91RM9200的485驱动,支持PDC模式,其中AT91C_VA_BASE_US0,这个口子是用普通IO口模式来控制接受与发送的,有一点要注意:
static void at91_stop_tx(struct uart_port *port, u_int from_tty)
{
struct at91_uart_port *at91_port = (struct at91_uart_port *)port;
/****RTS0 is not connect,Just use for RS485 Mode ******/
if (port->mapbase == AT91C_VA_BASE_US0)
{
/*waiting for tx over*/
udelay(2000);
udelay(2000);
AT91_SYS->PIOA_CODR = AT91C_PA21_RTS0;
}
if(at91_port->use_dma_tx) {
UART_PUT_PTCR(port,AT91C_PDC_TXTDIS);
UART_PUT_IDR (port,AT91C_US_ENDTX | AT91C_US_TXBUFE);
port->read_status_mask &= ~( AT91C_US_ENDTX | AT91C_US_TXBUFE);
}
else {
UART_PUT_IDR(port, AT91C_US_TXRDY);
port->read_status_mask &= ~AT91C_US_TXRDY;
}
}
此函数中的延时部分是必须要的,要等待数据传输完毕,再启动接受模式,否则数据发送不完,对于不同波特率时间不好控制,所以没有用自带的RTS脚来控制好 |
|