3.UART相关介绍

https://www.jianshu.com/p/14ae99223683

1.uart初始化

#define LCR_BAUD_LATCH (1<<7) // 1000 0000
#define LCR_EIGHT_BITS (3<<0) // 11
#define FCR_FIFO_ENABLE (1<<0)// 1
#define FCR_FIFO_CLEAR (3<<1) // 110
#define IER_RX_ENABLE (1<<0)  // 1
#define IER_TX_ENABLE (1<<1)  // 10
void uartinit(void) {
  // 关闭中断
  WriteReg(IER, 0x00);
  // special mode to set baud rate.
  WriteReg(LCR, LCR_BAUD_LATCH);
  // LSB for baud rate of 38.4K.
  WriteReg(0, 0x03);
  // MSB for baud rate of 38.4K.
  WriteReg(1, 0x00);
  // leave set-baud mode,
  // and set word length to 8 bits, no parity.
  WriteReg(LCR, LCR_EIGHT_BITS);
  // reset and enable FIFOs.
  WriteReg(FCR, FCR_FIFO_ENABLE | FCR_FIFO_CLEAR);
  // enable transmit and receive interrupts.
  WriteReg(IER, IER_TX_ENABLE | IER_RX_ENABLE);
  initlock(&uart_tx_lock, "uart");
}

1.1 IER

中断使能寄存器(IER)用于管理接收器就绪、发送器空、线路状态和调制解调器状态寄存器到 INT 输出引脚的传入中断。

  • 位 0:接收器就绪中断
  • 位 1:发送器空中断
  • 位 2:接收器线路状态中断。
  • 位 3:调制解调器状态寄存器中断。
  • 位 7-4:保留位,均为零。

1.2 LCR

线路控制寄存器用于指定异步数据通信的格式。可通过在该寄存器中写入适当的位来选择字长、停止位和奇偶校验。

  • 位 1-0
    这两位指定要传输或接收的字长。

    位1   位0		字长
     0     0     5
     0     1     6
     1     0     7
     1     1     8
    
  • 位 7
    是否切换到设置波特率模式,当被置为 1 时,允许用户通过寄存器设置波特率。

FCR

用于启用、清除、设置接收 FIFO 触发级别以及选择 DMA 信号类型。

  • 位0:

    启用或禁用FIFO

    在设置 FIFO 触发级别之前应启用此位。

  • 位1:

    当设置为1时,清除FIFO发送管道中的内容,并将计数清除为0

    清除完成后,本位将自动变为零。

  • 位2:

    当设置为1时,清除FIFO接收管道中的内容,并将计数清除为0

    清除完成后,本位将自动变为零。

2. uartgetc

int uartgetc(void) {
  if(ReadReg(LSR) & 0x01){
    // input data is ready.
    return ReadReg(RHR);
  } else {
    return -1;
  }
}

LSR

LSR(线路状态寄存器)是 UART(通用异步收发传输器)中的一个寄存器,用于提供有关接收和发送操作的状态信息。LSR 包含一些位字段,这些字段提供了有关接收和发送数据的状态的信息。

  • BIT-0: Data Ready (DR):此位指示接收数据寄存器中是否有可用的数据。当接收数据寄存器中有数据可读时,此位将置位。
  • BIT-1: Overrun Error (OE):此位指示接收数据寄存器是否溢出。如果接收数据寄存器溢出,此位将被置位。
  • BIT-2: Parity Error (PE):此位指示接收数据的奇偶校验是否错误。如果接收到的数据的奇偶校验与期望的奇偶校验不匹配,此位将被置位。
  • BIT-3: Framing Error (FE):此位指示接收数据中的帧错误。如果接收到的数据中有帧错误,此位将被置位。
  • BIT-4: Break Interrupt (BI):此位指示是否检测到了中断信号。如果接收到了中断信号(如通信线路上的中断信号),此位将被置位。
  • BIT-5: Transmitter Holding Register Empty (THRE):此位指示发送保持寄存器是否为空。当发送保持寄存器为空且允许接受新的数据时,此位将被置位。
  • BIT-6: Transmitter Empty (TEMT):此位指示发送寄存器和发送移位寄存器是否都为空。当发送寄存器和发送移位寄存器都为空时,此位将被置位。
  • BIT-7: Reserved:此位保留,未使用。

RHR

RHR(接收保持寄存器)是 UART(通用异步收发传输器)中的一个寄存器,用于存储接收到的字符数据。当 UART 接收到一个字符时,它将被存储在 RHR 中,等待被处理或读取。通常,读取 RHR 寄存器的操作将导致将接收到的字符从 RHR 中取出并传递给处理器或应用程序。

简而言之,RHR 是 UART 中用于暂存接收到的字符的寄存器。

Reference

http://byterunner.com/16550.html

posted @ 2024-04-21 00:13  INnoVation-V2  阅读(14)  评论(0编辑  收藏  举报