#ifndef FM_UART_DEV_H_ #define FM_UART_DEV_H_ #include "ch32v30x.h" #include "HD_UART.h" #include "comm_types.h" #include "ring_queue.h" /* 是否使用中断发送,后期可能改为DMA发送 */ #define UARTINTERRUPTSEND /* 是否使用空闲中断,后期可以改为其他方式判断总线空闲中断 */ #define RS485BUSIDLE1 #define ASCII_CHAR_BACKSPACE 0x08 /* '\b' */ #define ASCII_CHAR_CHARACTER_TABULATION 0x09 /* '\t' */ #define ASCII_CHAR_LINE_FEED 0x0A /* '\n' */ #define ASCII_CHAR_LINE_TABULATION 0x0B /* '\v' */ #define ASCII_CHAR_FORM_FEED 0x0C /* '\f' */ #define ASCII_CHAR_CARRIAGE_RETURN 0x0D /* '\r' */ typedef enum{ J1_485_INDEX = 6, J2_485_INDEX = 7, J3_485_INDEX = 2, J4_485_INDEX = 8, J5_0_485_INDEX = 3, Upward_UART_INDEX = 5, }uartIndex_e; typedef struct _uartSendInfo { uint8_t *data; //指向数据 #ifdef UARTINTERRUPTSEND uint16_t count; //已经发送数据字节个数 uint16_t len; //数据长度 #endif }uartSendInfo; /* UART 驱动数据结构,对应一个uart设备 */ typedef struct _uart_device_info{ uint8_t init; uartIndex_e uart_index; uint32_t uart_baudrate; RingQueue uart_ring_queue; uartSendInfo uart_send_data; }uart_device_info; typedef uint32_t device_handle; extern device_handle g_J1_uart6_handle; extern device_handle g_J2_uart7_handle; extern device_handle g_J3_usart2_handle; extern device_handle g_J4_uart8_handle; extern device_handle g_J5_0_usart3_handle; extern device_handle g_Upward_uart5_handle; uint8_t uart_dev_in_char(device_handle device); int uart_dev_char_present(device_handle device); void Init_J1_485(uint32_t baud); void Init_J2_485(uint32_t baud); void Init_J3_485(uint32_t baud); void Init_J4_485(uint32_t baud); void Init_J5_0_485(uint32_t baud); void Init_Upward_uart(uint32_t baud); uint8_t getUartSendState(device_handle device); #ifdef UARTINTERRUPTSEND extern void J1_485_IN_TXE(void); extern void J2_485_IN_TXE(void); extern void J3_485_IN_TXE(void); extern void J4_485_IN_TXE(void); extern void J5_0_485_IN_TXE(void); extern void Upward_USART_IN_TXE(void); uint8_t uartInterruptSend(device_handle device, uint8_t *data, uint16_t len); #endif #ifdef RS485BUSIDLE1 extern void J1_485_IN_IDLE(void); extern void J2_485_IN_IDLE(void); extern void J3_485_IN_IDLE(void); extern void J4_485_IN_IDLE(void); extern void J5_0_485_IN_IDLE(void); extern void J1_485_IN_RXNE(void); extern void J2_485_IN_RXNE(void); extern void J3_485_IN_RXNE(void); extern void J4_485_IN_RXNE(void); extern void J5_0_485_IN_RXNE(void); uint8_t getBUSIDLEFlag(device_handle device); // uint8_t getSoftwareIDLEFlag(device_handle device); void setBUSIDLEFlag(device_handle device, uint8_t state); // void setSoftwareIDLEFlag(device_handle device, uint8_t state); #endif void setJ1_485_SendState(uint8_t state); void setJ2_485_SendState(uint8_t state); void setJ3_485_SendState(uint8_t state); void setJ4_485_SendState(uint8_t state); void setJ5_0_485_SendState(uint8_t state); void setUpward_uart_SendState(uint8_t state); /* J5_0连接到哪个端口 */ typedef enum _connectPortEnum { connectJ0 = 0, connectJ5 = 5, connectJ6, connectJ7, connectJ8, connectJ9, } connectPortEnum; void setConnectPort(uint8_t port); uint8_t getConnectPort(void); #endif