usart.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #ifndef USART_H
  2. #define USART_H
  3. #include "at32f403a_407.h"
  4. #include "ring_buf.h"
  5. #include "FreeRTOS.h"
  6. #include "semphr.h"
  7. #include <stdint.h>
  8. #include <stdbool.h>
  9. /*------индексы в массиве uarts --------------*/
  10. #define DEBUG_USART 0 // USART1
  11. #define MODEM_USART 1 // USART2
  12. #define EXT_1_USART 2 // USART3
  13. #define EXT_2_USART 3 // USART4
  14. #define EXT_3_USART 4 // USART5
  15. #define EXT_4_USART 5 // USART6
  16. /**
  17. * @brief Скорость USART
  18. */
  19. typedef enum
  20. {
  21. BRD_1200 = 0,
  22. BRD_2400,
  23. BRD_4800,
  24. BRD_9600,
  25. BRD_19200,
  26. BRD_38400,
  27. BRD_57600,
  28. BRD_115200,
  29. BRD_230400,
  30. BRD_460800,
  31. } rate_t;
  32. /**
  33. * @brief Длина данных USART
  34. */
  35. typedef enum
  36. {
  37. DATABITS_7 = 0,
  38. DATABITS_8,
  39. } databits_t;
  40. /**
  41. * @brief Количество стоповых бит USART
  42. */
  43. typedef enum
  44. {
  45. STOP_0_5 = 0,
  46. STOP_1,
  47. STOP_1_5,
  48. STOP_2,
  49. } stopbits_t;
  50. /**
  51. * @brief Четность прозрачного порта
  52. */
  53. typedef enum
  54. {
  55. NO_PAR = 0,
  56. ODD_PAR,
  57. EVEN_PAR,
  58. MAX_PARITY_TYPES
  59. } parity_t;
  60. typedef struct{
  61. rate_t baud; // Скорость порта
  62. parity_t parity; // Четность
  63. databits_t databits; // Число бит данных
  64. stopbits_t stopbits; // Число стоп-бит
  65. }uart_settings_t;
  66. typedef struct{
  67. QueueHandle_t *txQ;
  68. QueueHandle_t *rxQ;
  69. }transport_queue_t;
  70. typedef struct uart_s {
  71. bool enabled;
  72. uart_settings_t setting;
  73. //USART_TypeDef *addr;
  74. usart_type *addr;
  75. uint8_t *rx_fifo;
  76. uint8_t *tx_fifo;
  77. uint32_t buf_size;
  78. bool (*get_uart_settings)(uart_settings_t *struct_sett_value, uint8_t num_uart);
  79. transport_queue_t trans_queue;
  80. void (*set_uart_queue)(transport_queue_t *trans_queue, uint8_t num_uart);
  81. rbuf_t rx_buf;
  82. rbuf_t tx_buf;
  83. SemaphoreHandle_t rx_buf_sem;
  84. SemaphoreHandle_t tx_buf_sem;
  85. } uart_t;
  86. void usart_init_struct(void);
  87. void usart_reinit(void);
  88. void transport_enable_tx(uint8_t indx_uarts);
  89. #if 0
  90. void uart_irq_enable(uint8_t indx_uarts);
  91. int uart_getchar(uint8_t indx_uarts, unsigned int timeout);
  92. int uart_send_block(uint8_t indx_uarts, void *data, uint8_t len);
  93. void uart_putchar(uint8_t indx_uarts, uint8_t byte);
  94. uart_t* uart_get_settings_ptr(void);
  95. void putc_(void *p, char c);
  96. void putchar_(uint8_t c);
  97. #endif
  98. #endif /* #ifndef USART_H */
  99. /****************************** (C) LiteMesh ***************** end of file ****/