uart.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /**
  2. * @file uart.h
  3. * @author longjin ([email protected])
  4. * @brief uart驱动程序 RS-232驱动
  5. * @version 0.1
  6. * @date 2022-04-15
  7. *
  8. * @copyright Copyright (c) 2022
  9. *
  10. */
  11. #pragma once
  12. #include <common/glib.h>
  13. #define UART_SUCCESS 0
  14. #define E_UART_BITS_RATE_ERROR 1
  15. #define E_UART_SERIAL_FAULT 2
  16. enum uart_port_io_addr
  17. {
  18. COM1 = 0x3f8,
  19. COM2 = 0x2f8,
  20. COM3 = 0x3e8,
  21. COM4 = 0x2e8,
  22. COM5 = 0x5f8,
  23. COM6 = 0x4f8,
  24. COM7 = 0x5e8,
  25. COM8 = 0x4E8,
  26. };
  27. enum uart_register_offset
  28. {
  29. REG_DATA = 0,
  30. REG_INTERRUPT_ENABLE = 1,
  31. REG_II_FIFO = 2, // Interrupt Identification and FIFO control registers
  32. REG_LINE_CONTROL = 3,
  33. REG_MODEM_CONTROL = 4,
  34. REG_LINE_STATUS = 5,
  35. REG_MODEM_STATUE = 6,
  36. REG_SCRATCH = 7
  37. };
  38. /**
  39. * @brief 初始化com口
  40. *
  41. * @param port com口的端口号
  42. * @param bits_rate 通信的比特率
  43. */
  44. int uart_init(uint32_t port, uint32_t bits_rate);
  45. /**
  46. * @brief 发送数据
  47. *
  48. * @param port 端口号
  49. * @param c 要发送的数据
  50. */
  51. void uart_send(uint32_t port, char c);
  52. /**
  53. * @brief 从uart接收数据
  54. *
  55. * @param port 端口号
  56. * @return uchar 接收到的数据
  57. */
  58. uchar uart_read(uint32_t port);