学习目标

  • 模拟 UART 设备
  • 实现寄存器读写
  • 连接标准输入输出

13.1 思考:如何模拟 UART?

真实的 UART 连接串口线,模拟器怎么办?

答案:连接到终端

程序写 UART → 模拟器 → printf 到终端
终端输入 → 模拟器 → 程序读 UART

13.2 UART 寄存器

typedef struct {
    uint8_t thr;  // 发送
    uint8_t rhr;  // 接收
    uint8_t lsr;  // 状态
} UART;

UART uart;

13.3 实现

uint32_t uart_read(uint32_t addr) {
    switch (addr & 0xFF) {
        case 0: return getchar();  // RHR
        case 5: return 0x60;       // LSR (ready)
    }
}

void uart_write(uint32_t addr, uint32_t data) {
    if ((addr & 0xFF) == 0) {
        putchar(data);  // THR
    }
}

下一步

第 14 章:Timer 模拟

更新时间: