首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UART初始化:防止UART将RTS拉高

UART初始化:防止UART将RTS拉高
EN

Stack Overflow用户
提问于 2011-02-10 11:17:07
回答 1查看 2.5K关注 0票数 4

我正在为Linux AT91SAM9260板编写一个AT91SAM9260驱动程序。

当我初始化UART时,RTS信号线会变得很高(1)。我想这将而且应该是RS232操作模式中的标准行为。然而,在RS485模式下,这是不需要的。

我使用的标准功能提供的手臂拱部分,以初始化UART。因此,重要的步骤是:

代码语言:javascript
复制
at91_register_uart(AT91SAM9260_ID_US2, 3, ATMEL_UART_CTS | ATMEL_UART_RTS);
//consisting of:

// >> configure/mux the pins
    at91_set_A_periph(AT91_PIN_PB10, 1);        /* TXD */
    at91_set_A_periph(AT91_PIN_PB11, 0);        /* RXD */

    if (pins & ATMEL_UART_RTS)
        at91_set_B_periph(AT91_PIN_PC8, 0);     /* RTS */
    if (pins & ATMEL_UART_CTS)
        at91_set_B_periph(AT91_PIN_PC10, 0);    /* CTS */

// >> associate the clock
axm_clock_associate("usart3_clk", &pdev->dev, "usart");

// >> et voilà

正如你所看到的

at91_set_B_periph(AT91_PIN_PC8,0);

RTS引脚上的拉力没有启动。

  • 为什么UART将RTS设置得很高?仅仅因为这将是RS232模式下的标准行为?
  • 对于UART来说,保持沉默难道不是一个更好的标准吗? 是否显式设置了操作模式?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-07 09:52:57

初始化后的高RTS信号似乎是许多平台上的标准行为。它很大程度上取决于启动例程所期望的接口的串行操作模式。

为了防止在运行Linux的ATMEL AT91SAM9260板上出现right,您必须在修改at91_set_X_periph() Pins并注册设备之前将UART置于正确的模式中。

由于LinuxKernel2.6.35版本,ATMEL串行驱动程序支持RS485模式。在此驱动程序中,在将Pins (GPIO)设置为该角色之前,正确地配置了UART。

对于运行较旧Linux版本的嵌入式设备,我使用以下代码行解决了问题:

代码语言:javascript
复制
/* write control flags */

control |= ATMEL_US_RTSEN;
mode |= ATMEL_US_USMODE_RS485;  

  UART_PUT(uartbaseaddr, ATMEL_US_CR, control);
  UART_PUT(uartbaseaddr, ATMEL_US_MR,mode);

现在Pins们可以把他们的角色屏蔽掉了

at91_set_X_periph(RTS_PIN,0);

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4956379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档