Modify as Angus's suggestion:
1. Set XXX_TAG static, remove extern XXX_TAG in uart.h/ledc.h/gpio.h 2. I removed uart_set/get_print_port() functions, these functions are not well tested, I removed them for now. 3. Modify some function names for uart_read/write_bytes 4. Modify uart_write_bytes and uart_write_bytes_with_break.
This commit is contained in:
parent
15474b9b7e
commit
3ec23f1b83
6 changed files with 96 additions and 247 deletions
|
@ -20,7 +20,7 @@
|
||||||
#include "soc/soc.h"
|
#include "soc/soc.h"
|
||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
|
|
||||||
const char* GPIO_TAG = "GPIO";
|
static const char* GPIO_TAG = "GPIO";
|
||||||
#define GPIO_CHECK(a, str, ret_val) if (!(a)) { \
|
#define GPIO_CHECK(a, str, ret_val) if (!(a)) { \
|
||||||
ESP_LOGE(GPIO_TAG,"%s:%d (%s):%s\n", __FILE__, __LINE__, __FUNCTION__, str); \
|
ESP_LOGE(GPIO_TAG,"%s:%d (%s):%s\n", __FILE__, __LINE__, __FUNCTION__, str); \
|
||||||
return (ret_val); \
|
return (ret_val); \
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
extern const char* GPIO_TAG;
|
|
||||||
#define GPIO_SEL_0 (BIT(0)) /*!< Pin 0 selected */
|
#define GPIO_SEL_0 (BIT(0)) /*!< Pin 0 selected */
|
||||||
#define GPIO_SEL_1 (BIT(1)) /*!< Pin 1 selected */
|
#define GPIO_SEL_1 (BIT(1)) /*!< Pin 1 selected */
|
||||||
#define GPIO_SEL_2 (BIT(2)) /*!< Pin 2 selected */
|
#define GPIO_SEL_2 (BIT(2)) /*!< Pin 2 selected */
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern const char* LEDC_TAG;
|
|
||||||
#define LEDC_APB_CLK_HZ (APB_CLK_FREQ)
|
#define LEDC_APB_CLK_HZ (APB_CLK_FREQ)
|
||||||
#define LEDC_REF_CLK_HZ (1*1000000)
|
#define LEDC_REF_CLK_HZ (1*1000000)
|
||||||
|
|
||||||
|
|
|
@ -32,11 +32,11 @@ extern "C" {
|
||||||
#include "freertos/ringbuf.h"
|
#include "freertos/ringbuf.h"
|
||||||
#include <esp_types.h>
|
#include <esp_types.h>
|
||||||
|
|
||||||
extern const char* UART_TAG;
|
#define UART_FIFO_LEN (128) /*< Length of the hardware FIFO buffers */
|
||||||
#define UART_FIFO_LEN (128) //Do not change this, this value describes the length of the gardware FIFO in the ESP32
|
|
||||||
#define UART_INTR_MASK 0x1ff
|
#define UART_INTR_MASK 0x1ff
|
||||||
#define UART_LINE_INV_MASK (0x3f << 19)
|
#define UART_LINE_INV_MASK (0x3f << 19)
|
||||||
#define UART_BITRATE_MAX 5000000
|
#define UART_BITRATE_MAX 5000000
|
||||||
|
#define UART_PIN_NO_CHANGE (-1)
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
UART_DATA_5_BITS = 0x0, /*!< word length: 5bits*/
|
UART_DATA_5_BITS = 0x0, /*!< word length: 5bits*/
|
||||||
|
@ -243,6 +243,8 @@ esp_err_t uart_set_line_inverse(uart_port_t uart_no, uint32_t inverse_mask) ;
|
||||||
*
|
*
|
||||||
* @param rx_thresh Threshold of Hardware RX flow control(0 ~ UART_FIFO_LEN)
|
* @param rx_thresh Threshold of Hardware RX flow control(0 ~ UART_FIFO_LEN)
|
||||||
*
|
*
|
||||||
|
* Only when UART_HW_FLOWCTRL_RTS is set , will the rx_thresh value be set.
|
||||||
|
*
|
||||||
* @return
|
* @return
|
||||||
* - ESP_OK Success
|
* - ESP_OK Success
|
||||||
* - ESP_FAIL Parameter error
|
* - ESP_FAIL Parameter error
|
||||||
|
@ -380,15 +382,19 @@ esp_err_t uart_isr_register(uart_port_t uart_num, uint8_t uart_intr_num, void (*
|
||||||
/**
|
/**
|
||||||
* @brief Set UART pin number
|
* @brief Set UART pin number
|
||||||
*
|
*
|
||||||
|
* @note
|
||||||
|
* Internal signal can be output to multiple GPIO pads
|
||||||
|
* Only one GPIO pad can connect with input signal
|
||||||
|
*
|
||||||
* @param uart_no UART_NUM_0, UART_NUM_1 or UART_NUM_2
|
* @param uart_no UART_NUM_0, UART_NUM_1 or UART_NUM_2
|
||||||
*
|
*
|
||||||
* @param tx_io_num UART TX pin GPIO number
|
* @param tx_io_num UART TX pin GPIO number, if set to UART_PIN_NO_CHANGE, use the current pin.
|
||||||
*
|
*
|
||||||
* @param rx_io_num UART RX pin GPIO number
|
* @param rx_io_num UART RX pin GPIO number, if set to UART_PIN_NO_CHANGE, use the current pin.
|
||||||
*
|
*
|
||||||
* @param rts_io_num UART RTS pin GPIO number
|
* @param rts_io_num UART RTS pin GPIO number, if set to UART_PIN_NO_CHANGE, use the current pin.
|
||||||
*
|
*
|
||||||
* @param cts_io_num UART CTS pin GPIO number
|
* @param cts_io_num UART CTS pin GPIO number, if set to UART_PIN_NO_CHANGE, use the current pin.
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
* - ESP_OK Success
|
* - ESP_OK Success
|
||||||
|
@ -434,20 +440,20 @@ esp_err_t uart_set_dtr(uart_port_t uart_num, int level);
|
||||||
* - ESP_OK Success
|
* - ESP_OK Success
|
||||||
* - ESP_FAIL Parameter error
|
* - ESP_FAIL Parameter error
|
||||||
*/
|
*/
|
||||||
esp_err_t uart_param_config(uart_port_t uart_num, uart_config_t *uart_config);
|
esp_err_t uart_param_config(uart_port_t uart_num, const uart_config_t *uart_config);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief UART interrupt configure
|
* @brief UART interrupt configure
|
||||||
*
|
*
|
||||||
* @param uart_no UART_NUM_0, UART_NUM_1 or UART_NUM_2
|
* @param uart_no UART_NUM_0, UART_NUM_1 or UART_NUM_2
|
||||||
*
|
*
|
||||||
* @param p_intr_conf UART interrupt settings
|
* @param intr_conf UART interrupt settings
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
* - ESP_OK Success
|
* - ESP_OK Success
|
||||||
* - ESP_FAIL Parameter error
|
* - ESP_FAIL Parameter error
|
||||||
*/
|
*/
|
||||||
esp_err_t uart_intr_config(uart_port_t uart_num, uart_intr_config_t *p_intr_conf);
|
esp_err_t uart_intr_config(uart_port_t uart_num, const uart_intr_config_t *intr_conf);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Install UART driver.
|
* @brief Install UART driver.
|
||||||
|
@ -504,6 +510,9 @@ esp_err_t uart_wait_tx_done(uart_port_t uart_num, TickType_t ticks_to_wait);
|
||||||
/**
|
/**
|
||||||
* @brief Send data to the UART port from a given buffer and length,
|
* @brief Send data to the UART port from a given buffer and length,
|
||||||
* This function will not wait for the space in TX FIFO, just fill the TX FIFO and return when the FIFO is full.
|
* This function will not wait for the space in TX FIFO, just fill the TX FIFO and return when the FIFO is full.
|
||||||
|
* @note
|
||||||
|
* This function should only be used when UART TX buffer is not enabled.
|
||||||
|
*
|
||||||
*
|
*
|
||||||
* @param uart_no UART_NUM_0, UART_NUM_1 or UART_NUM_2
|
* @param uart_no UART_NUM_0, UART_NUM_1 or UART_NUM_2
|
||||||
*
|
*
|
||||||
|
@ -515,7 +524,7 @@ esp_err_t uart_wait_tx_done(uart_port_t uart_num, TickType_t ticks_to_wait);
|
||||||
* - (-1) Parameter error
|
* - (-1) Parameter error
|
||||||
* - OTHERS(>=0) The number of data that pushed to the TX FIFO
|
* - OTHERS(>=0) The number of data that pushed to the TX FIFO
|
||||||
*/
|
*/
|
||||||
int uart_tx_chars(uart_port_t uart_no, char* buffer, uint32_t len);
|
int uart_tx_chars(uart_port_t uart_no, const char* buffer, uint32_t len);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Send data to the UART port from a given buffer and length,
|
* @brief Send data to the UART port from a given buffer and length,
|
||||||
|
@ -536,7 +545,7 @@ int uart_tx_chars(uart_port_t uart_no, char* buffer, uint32_t len);
|
||||||
* - (-1) Parameter error
|
* - (-1) Parameter error
|
||||||
* - OTHERS(>=0) The number of data that pushed to the TX FIFO
|
* - OTHERS(>=0) The number of data that pushed to the TX FIFO
|
||||||
*/
|
*/
|
||||||
int uart_tx_all_chars(uart_port_t uart_num, const char* src, size_t size);
|
int uart_write_bytes(uart_port_t uart_num, const char* src, size_t size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Send data to the UART port from a given buffer and length,
|
* @brief Send data to the UART port from a given buffer and length,
|
||||||
|
@ -564,20 +573,7 @@ int uart_tx_all_chars(uart_port_t uart_num, const char* src, size_t size);
|
||||||
* - OTHERS(>=0) The number of data that pushed to the TX FIFO
|
* - OTHERS(>=0) The number of data that pushed to the TX FIFO
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int uart_tx_all_chars_with_break(uart_port_t uart_num, const char* src, size_t size, int brk_len);
|
int uart_write_bytes_with_break(uart_port_t uart_num, const char* src, size_t size, int brk_len);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief UART read one char
|
|
||||||
*
|
|
||||||
* @param uart_no UART_NUM_0, UART_NUM_1 or UART_NUM_2
|
|
||||||
*
|
|
||||||
* @param ticks_to_wait Timeout, count in RTOS ticks
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
* - (-1) Error
|
|
||||||
* - Others return a char data from UART.
|
|
||||||
*/
|
|
||||||
int uart_read_char(uart_port_t uart_num, TickType_t ticks_to_wait);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief UART read bytes from UART buffer
|
* @brief UART read bytes from UART buffer
|
||||||
|
@ -608,25 +604,6 @@ int uart_read_bytes(uart_port_t uart_num, uint8_t* buf, uint32_t length, TickTyp
|
||||||
*/
|
*/
|
||||||
esp_err_t uart_flush(uart_port_t uart_num);
|
esp_err_t uart_flush(uart_port_t uart_num);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Set the serial output port for ets_printf function, not effective for ESP_LOGX macro.
|
|
||||||
*
|
|
||||||
* @param uart_no UART_NUM_0, UART_NUM_1 or UART_NUM_2
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
* - ESP_OK Success
|
|
||||||
* - ESP_FAIL Parameter error, or UART driver not installed.
|
|
||||||
*/
|
|
||||||
esp_err_t uart_set_print_port(uart_port_t uart_no);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Get the current serial port for ets_printf function
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @return current print port(0: UART0; 1: UART1; 2: UART2)
|
|
||||||
*/
|
|
||||||
int uart_get_print_port(void);
|
|
||||||
|
|
||||||
/***************************EXAMPLE**********************************
|
/***************************EXAMPLE**********************************
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
|
@ -658,7 +635,7 @@ int uart_get_print_port(void);
|
||||||
* @code{c}
|
* @code{c}
|
||||||
* //2. Set UART pin
|
* //2. Set UART pin
|
||||||
* //set UART pin, not needed if use default pins.
|
* //set UART pin, not needed if use default pins.
|
||||||
* uart_set_pin(uart_num, -1, -1, 15, 13);
|
* uart_set_pin(uart_num, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, 15, 13);
|
||||||
* @endcode
|
* @endcode
|
||||||
*-----------------------------------------------------------------------------*
|
*-----------------------------------------------------------------------------*
|
||||||
* @code{c}
|
* @code{c}
|
||||||
|
@ -671,12 +648,12 @@ int uart_get_print_port(void);
|
||||||
* @code{c}
|
* @code{c}
|
||||||
* //4. Write data to UART.
|
* //4. Write data to UART.
|
||||||
* char* test_str = "This is a test string.\n"
|
* char* test_str = "This is a test string.\n"
|
||||||
* uart_tx_all_chars(uart_num, (const char*)test_str, strlen(test_str));
|
* uart_write_bytes(uart_num, (const char*)test_str, strlen(test_str));
|
||||||
* @endcode
|
* @endcode
|
||||||
*-----------------------------------------------------------------------------*
|
*-----------------------------------------------------------------------------*
|
||||||
* @code{c}
|
* @code{c}
|
||||||
* //5. Write data to UART, end with a break signal.
|
* //5. Write data to UART, end with a break signal.
|
||||||
* uart_tx_all_chars_with_break(0, "test break\n",strlen("test break\n"), 100);
|
* uart_write_bytes_with_break(0, "test break\n",strlen("test break\n"), 100);
|
||||||
* @endcode
|
* @endcode
|
||||||
*-----------------------------------------------------------------------------*
|
*-----------------------------------------------------------------------------*
|
||||||
* @code{c}
|
* @code{c}
|
||||||
|
@ -696,8 +673,6 @@ int uart_get_print_port(void);
|
||||||
* uart_param_config(uart_num, &uart_config);
|
* uart_param_config(uart_num, &uart_config);
|
||||||
* //Set UART1 pins(TX: IO16, RX: IO17, RTS: IO18, CTS: IO19)
|
* //Set UART1 pins(TX: IO16, RX: IO17, RTS: IO18, CTS: IO19)
|
||||||
* uart_set_pin(uart_num, 16, 17, 18, 19);
|
* uart_set_pin(uart_num, 16, 17, 18, 19);
|
||||||
* //Set UART log level
|
|
||||||
* esp_log_level_set(UART_TAG, ESP_LOG_ERROR);
|
|
||||||
* //Install UART driver( We don't need an event queue here)
|
* //Install UART driver( We don't need an event queue here)
|
||||||
* uart_driver_install(uart_num, 1024 * 2, 1024*4, 10, 17, NULL, RINGBUF_TYPE_BYTEBUF);
|
* uart_driver_install(uart_num, 1024 * 2, 1024*4, 10, 17, NULL, RINGBUF_TYPE_BYTEBUF);
|
||||||
* uint8_t data[1000];
|
* uint8_t data[1000];
|
||||||
|
@ -705,7 +680,7 @@ int uart_get_print_port(void);
|
||||||
* //Read data from UART
|
* //Read data from UART
|
||||||
* int len = uart_read_bytes(uart_num, data, sizeof(data), 10);
|
* int len = uart_read_bytes(uart_num, data, sizeof(data), 10);
|
||||||
* //Write data back to UART
|
* //Write data back to UART
|
||||||
* uart_tx_all_chars(uart_num, (const char*)data, len);
|
* uart_write_bytes(uart_num, (const char*)data, len);
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
* @endcode
|
* @endcode
|
||||||
|
@ -715,6 +690,7 @@ int uart_get_print_port(void);
|
||||||
* #include "freertos/queue.h"
|
* #include "freertos/queue.h"
|
||||||
* //A queue to handle UART event.
|
* //A queue to handle UART event.
|
||||||
* QueueHandle_t uart0_queue;
|
* QueueHandle_t uart0_queue;
|
||||||
|
* static const char *TAG = "uart_example";
|
||||||
* void uart_task(void *pvParameters)
|
* void uart_task(void *pvParameters)
|
||||||
* {
|
* {
|
||||||
* int uart_num = (int)pvParameters;
|
* int uart_num = (int)pvParameters;
|
||||||
|
@ -723,37 +699,37 @@ int uart_get_print_port(void);
|
||||||
* for(;;) {
|
* for(;;) {
|
||||||
* //Waiting for UART event.
|
* //Waiting for UART event.
|
||||||
* if(xQueueReceive(uart0_queue, (void * )&event, (portTickType)portMAX_DELAY)) {
|
* if(xQueueReceive(uart0_queue, (void * )&event, (portTickType)portMAX_DELAY)) {
|
||||||
* ESP_LOGI(UART_TAG, "uart[%d] event:", uart_num);
|
* ESP_LOGI(TAG, "uart[%d] event:", uart_num);
|
||||||
* switch(event.type) {
|
* switch(event.type) {
|
||||||
* //Event of UART receving data
|
* //Event of UART receving data
|
||||||
* case UART_DATA:
|
* case UART_DATA:
|
||||||
* ESP_LOGI(UART_TAG,"data, len: %d\n", event.data.size);
|
* ESP_LOGI(TAG,"data, len: %d\n", event.data.size);
|
||||||
* int len = uart_read_bytes(uart_num, dtmp, event.data.size, 10);
|
* int len = uart_read_bytes(uart_num, dtmp, event.data.size, 10);
|
||||||
* ESP_LOGI(UART_TAG, "uart read: %d\n", len);
|
* ESP_LOGI(TAG, "uart read: %d\n", len);
|
||||||
* break;
|
* break;
|
||||||
* //Event of HW FIFO overflow detected
|
* //Event of HW FIFO overflow detected
|
||||||
* case UART_FIFO_OVF:
|
* case UART_FIFO_OVF:
|
||||||
* ESP_LOGI(UART_TAG, "hw fifo overflow\n");
|
* ESP_LOGI(TAG, "hw fifo overflow\n");
|
||||||
* break;
|
* break;
|
||||||
* //Event of UART ring buffer full
|
* //Event of UART ring buffer full
|
||||||
* case UART_BUFFER_FULL:
|
* case UART_BUFFER_FULL:
|
||||||
* ESP_LOGI(UART_TAG, "ring buffer full\n");
|
* ESP_LOGI(TAG, "ring buffer full\n");
|
||||||
* break;
|
* break;
|
||||||
* //Event of UART RX break detected
|
* //Event of UART RX break detected
|
||||||
* case UART_BREAK:
|
* case UART_BREAK:
|
||||||
* ESP_LOGI(UART_TAG, "uart rx break\n");
|
* ESP_LOGI(TAG, "uart rx break\n");
|
||||||
* break;
|
* break;
|
||||||
* //Event of UART parity check error
|
* //Event of UART parity check error
|
||||||
* case UART_PARITY_ERR:
|
* case UART_PARITY_ERR:
|
||||||
* ESP_LOGI(UART_TAG, "uart parity error\n");
|
* ESP_LOGI(TAG, "uart parity error\n");
|
||||||
* break;
|
* break;
|
||||||
* //Event of UART frame error
|
* //Event of UART frame error
|
||||||
* case UART_FRAME_ERR:
|
* case UART_FRAME_ERR:
|
||||||
* ESP_LOGI(UART_TAG, "uart frame error\n");
|
* ESP_LOGI(TAG, "uart frame error\n");
|
||||||
* break;
|
* break;
|
||||||
* //Others
|
* //Others
|
||||||
* default:
|
* default:
|
||||||
* ESP_LOGI(UART_TAG, "uart event type: %d\n", event.type);
|
* ESP_LOGI(TAG, "uart event type: %d\n", event.type);
|
||||||
* break;
|
* break;
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
|
@ -775,9 +751,9 @@ int uart_get_print_port(void);
|
||||||
* //Set UART parameters
|
* //Set UART parameters
|
||||||
* uart_param_config(uart_num, &uart_config);
|
* uart_param_config(uart_num, &uart_config);
|
||||||
* //Set UART pins,(-1: default pin, no change.)
|
* //Set UART pins,(-1: default pin, no change.)
|
||||||
* uart_set_pin(uart_num, -1, -1, 15, 13);
|
* uart_set_pin(uart_num, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, 15, 13);
|
||||||
* //Set UART log level
|
* //Set UART log level
|
||||||
* esp_log_level_set(UART_TAG, ESP_LOG_INFO);
|
* esp_log_level_set(TAG, ESP_LOG_INFO);
|
||||||
* //Install UART driver, and get the queue.
|
* //Install UART driver, and get the queue.
|
||||||
* uart_driver_install(uart_num, 1024 * 2, 1024*4, 10, 17, &uart0_queue, RINGBUF_TYPE_BYTEBUF);
|
* uart_driver_install(uart_num, 1024 * 2, 1024*4, 10, 17, &uart0_queue, RINGBUF_TYPE_BYTEBUF);
|
||||||
* //Create a task to handler UART event from ISR
|
* //Create a task to handler UART event from ISR
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#include "driver/ledc.h"
|
#include "driver/ledc.h"
|
||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
|
|
||||||
const char* LEDC_TAG = "LEDC";
|
static const char* LEDC_TAG = "LEDC";
|
||||||
static portMUX_TYPE ledc_spinlock = portMUX_INITIALIZER_UNLOCKED;
|
static portMUX_TYPE ledc_spinlock = portMUX_INITIALIZER_UNLOCKED;
|
||||||
#define LEDC_CHECK(a, str, ret_val) if (!(a)) { \
|
#define LEDC_CHECK(a, str, ret_val) if (!(a)) { \
|
||||||
ESP_LOGE(LEDC_TAG,"%s:%d (%s):%s\n", __FILE__, __LINE__, __FUNCTION__, str); \
|
ESP_LOGE(LEDC_TAG,"%s:%d (%s):%s\n", __FILE__, __LINE__, __FUNCTION__, str); \
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include "driver/gpio.h"
|
#include "driver/gpio.h"
|
||||||
#include "soc/uart_struct.h"
|
#include "soc/uart_struct.h"
|
||||||
|
|
||||||
const char* UART_TAG = "UART";
|
static const char* UART_TAG = "UART";
|
||||||
#define UART_CHECK(a, str, ret) if (!(a)) { \
|
#define UART_CHECK(a, str, ret) if (!(a)) { \
|
||||||
ESP_LOGE(UART_TAG,"%s:%d (%s):%s\n", __FILE__, __LINE__, __FUNCTION__, str); \
|
ESP_LOGE(UART_TAG,"%s:%d (%s):%s\n", __FILE__, __LINE__, __FUNCTION__, str); \
|
||||||
return (ret); \
|
return (ret); \
|
||||||
|
@ -249,28 +249,19 @@ esp_err_t uart_disable_intr_mask(uart_port_t uart_num, uint32_t disable_mask)
|
||||||
|
|
||||||
esp_err_t uart_enable_rx_intr(uart_port_t uart_num)
|
esp_err_t uart_enable_rx_intr(uart_port_t uart_num)
|
||||||
{
|
{
|
||||||
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", ESP_FAIL);
|
uart_enable_intr_mask(uart_num, UART_RXFIFO_FULL_INT_ENA|UART_RXFIFO_TOUT_INT_ENA);
|
||||||
UART_ENTER_CRITICAL(&uart_spinlock[uart_num]);
|
|
||||||
SET_PERI_REG_MASK(UART_INT_ENA_REG(uart_num), UART_RXFIFO_FULL_INT_ENA|UART_RXFIFO_TOUT_INT_ENA);
|
|
||||||
UART_EXIT_CRITICAL(&uart_spinlock[uart_num]);
|
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t uart_disable_rx_intr(uart_port_t uart_num)
|
esp_err_t uart_disable_rx_intr(uart_port_t uart_num)
|
||||||
{
|
{
|
||||||
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", ESP_FAIL);
|
uart_disable_intr_mask(uart_num, UART_RXFIFO_FULL_INT_ENA|UART_RXFIFO_TOUT_INT_ENA);
|
||||||
UART_ENTER_CRITICAL(&uart_spinlock[uart_num]);
|
|
||||||
CLEAR_PERI_REG_MASK(UART_INT_ENA_REG(uart_num), UART_RXFIFO_FULL_INT_ENA|UART_RXFIFO_TOUT_INT_ENA);
|
|
||||||
UART_EXIT_CRITICAL(&uart_spinlock[uart_num]);
|
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t uart_disable_tx_intr(uart_port_t uart_num)
|
esp_err_t uart_disable_tx_intr(uart_port_t uart_num)
|
||||||
{
|
{
|
||||||
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", ESP_FAIL);
|
uart_disable_intr_mask(uart_num, UART_TXFIFO_EMPTY_INT_ENA);
|
||||||
UART_ENTER_CRITICAL(&uart_spinlock[uart_num]);
|
|
||||||
UART[uart_num]->int_ena.txfifo_empty = 0;
|
|
||||||
UART_EXIT_CRITICAL(&uart_spinlock[uart_num]);
|
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -391,7 +382,7 @@ esp_err_t uart_set_dtr(uart_port_t uart_num, int level)
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t uart_param_config(uart_port_t uart_num, uart_config_t *uart_config)
|
esp_err_t uart_param_config(uart_port_t uart_num, const uart_config_t *uart_config)
|
||||||
{
|
{
|
||||||
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", ESP_FAIL);
|
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", ESP_FAIL);
|
||||||
UART_CHECK((uart_config), "param null\n", ESP_FAIL);
|
UART_CHECK((uart_config), "param null\n", ESP_FAIL);
|
||||||
|
@ -413,25 +404,25 @@ esp_err_t uart_param_config(uart_port_t uart_num, uart_config_t *uart_config)
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t uart_intr_config(uart_port_t uart_num, uart_intr_config_t *p_intr_conf)
|
esp_err_t uart_intr_config(uart_port_t uart_num, const uart_intr_config_t *intr_conf)
|
||||||
{
|
{
|
||||||
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", ESP_FAIL);
|
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", ESP_FAIL);
|
||||||
UART_CHECK((p_intr_conf), "param null\n", ESP_FAIL);
|
UART_CHECK((intr_conf), "param null\n", ESP_FAIL);
|
||||||
UART_ENTER_CRITICAL(&uart_spinlock[uart_num]);
|
UART_ENTER_CRITICAL(&uart_spinlock[uart_num]);
|
||||||
UART[uart_num]->int_clr.val = UART_INTR_MASK;
|
UART[uart_num]->int_clr.val = UART_INTR_MASK;
|
||||||
if(p_intr_conf->intr_enable_mask & UART_RXFIFO_TOUT_INT_ENA_M) {
|
if(intr_conf->intr_enable_mask & UART_RXFIFO_TOUT_INT_ENA_M) {
|
||||||
UART[uart_num]->conf1.rx_tout_thrhd = ((p_intr_conf->rx_timeout_thresh) & UART_RX_TOUT_THRHD_V);
|
UART[uart_num]->conf1.rx_tout_thrhd = ((intr_conf->rx_timeout_thresh) & UART_RX_TOUT_THRHD_V);
|
||||||
UART[uart_num]->conf1.rx_tout_en = 1;
|
UART[uart_num]->conf1.rx_tout_en = 1;
|
||||||
} else {
|
} else {
|
||||||
UART[uart_num]->conf1.rx_tout_en = 0;
|
UART[uart_num]->conf1.rx_tout_en = 0;
|
||||||
}
|
}
|
||||||
if(p_intr_conf->intr_enable_mask & UART_RXFIFO_FULL_INT_ENA_M) {
|
if(intr_conf->intr_enable_mask & UART_RXFIFO_FULL_INT_ENA_M) {
|
||||||
UART[uart_num]->conf1.rxfifo_full_thrhd = p_intr_conf->rxfifo_full_thresh;
|
UART[uart_num]->conf1.rxfifo_full_thrhd = intr_conf->rxfifo_full_thresh;
|
||||||
}
|
}
|
||||||
if(p_intr_conf->intr_enable_mask & UART_TXFIFO_EMPTY_INT_ENA_M) {
|
if(intr_conf->intr_enable_mask & UART_TXFIFO_EMPTY_INT_ENA_M) {
|
||||||
UART[uart_num]->conf1.txfifo_empty_thrhd = p_intr_conf->txfifo_empty_intr_thresh;
|
UART[uart_num]->conf1.txfifo_empty_thrhd = intr_conf->txfifo_empty_intr_thresh;
|
||||||
}
|
}
|
||||||
UART[uart_num]->int_ena.val = p_intr_conf->intr_enable_mask;
|
UART[uart_num]->int_ena.val = intr_conf->intr_enable_mask;
|
||||||
UART_EXIT_CRITICAL(&uart_spinlock[uart_num]);
|
UART_EXIT_CRITICAL(&uart_spinlock[uart_num]);
|
||||||
return ESP_FAIL;
|
return ESP_FAIL;
|
||||||
}
|
}
|
||||||
|
@ -459,8 +450,8 @@ static void IRAM_ATTR uart_rx_intr_handler_default(void *param)
|
||||||
if(p_uart->tx_waiting_brk) {
|
if(p_uart->tx_waiting_brk) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//TX semaphore used in none tx ringbuffer mode.
|
//TX semaphore will only be used when tx_buf_size is zero.
|
||||||
if(p_uart->tx_waiting_fifo == true && p_uart->tx_buf_size > 0) {
|
if(p_uart->tx_waiting_fifo == true && p_uart->tx_buf_size == 0) {
|
||||||
p_uart->tx_waiting_fifo = false;
|
p_uart->tx_waiting_fifo = false;
|
||||||
xSemaphoreGiveFromISR(p_uart->tx_fifo_sem, NULL);
|
xSemaphoreGiveFromISR(p_uart->tx_fifo_sem, NULL);
|
||||||
}
|
}
|
||||||
|
@ -682,7 +673,7 @@ static esp_err_t uart_set_break(uart_port_t uart_num, int break_num)
|
||||||
|
|
||||||
//Fill UART tx_fifo and return a number,
|
//Fill UART tx_fifo and return a number,
|
||||||
//This function by itself is not thread-safe, always call from within a muxed section.
|
//This function by itself is not thread-safe, always call from within a muxed section.
|
||||||
static int uart_fill_fifo(uart_port_t uart_num, char* buffer, uint32_t len)
|
static int uart_fill_fifo(uart_port_t uart_num, const char* buffer, uint32_t len)
|
||||||
{
|
{
|
||||||
uint8_t i = 0;
|
uint8_t i = 0;
|
||||||
uint8_t tx_fifo_cnt = UART[uart_num]->status.txfifo_cnt;
|
uint8_t tx_fifo_cnt = UART[uart_num]->status.txfifo_cnt;
|
||||||
|
@ -694,7 +685,7 @@ static int uart_fill_fifo(uart_port_t uart_num, char* buffer, uint32_t len)
|
||||||
return copy_cnt;
|
return copy_cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
int uart_tx_chars(uart_port_t uart_num, char* buffer, uint32_t len)
|
int uart_tx_chars(uart_port_t uart_num, const char* buffer, uint32_t len)
|
||||||
{
|
{
|
||||||
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", (-1));
|
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", (-1));
|
||||||
UART_CHECK((p_uart_obj[uart_num]), "uart driver error", (-1));
|
UART_CHECK((p_uart_obj[uart_num]), "uart driver error", (-1));
|
||||||
|
@ -703,7 +694,7 @@ int uart_tx_chars(uart_port_t uart_num, char* buffer, uint32_t len)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
xSemaphoreTake(p_uart_obj[uart_num]->tx_mux, (portTickType)portMAX_DELAY);
|
xSemaphoreTake(p_uart_obj[uart_num]->tx_mux, (portTickType)portMAX_DELAY);
|
||||||
int tx_len = uart_fill_fifo(uart_num, buffer, len);
|
int tx_len = uart_fill_fifo(uart_num, (const char*) buffer, len);
|
||||||
xSemaphoreGive(p_uart_obj[uart_num]->tx_mux);
|
xSemaphoreGive(p_uart_obj[uart_num]->tx_mux);
|
||||||
return tx_len;
|
return tx_len;
|
||||||
}
|
}
|
||||||
|
@ -713,9 +704,31 @@ static int uart_tx_all(uart_port_t uart_num, const char* src, size_t size, bool
|
||||||
if(size == 0) {
|
if(size == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
size_t original_size = size;
|
||||||
|
|
||||||
//lock for uart_tx
|
//lock for uart_tx
|
||||||
xSemaphoreTake(p_uart_obj[uart_num]->tx_mux, (portTickType)portMAX_DELAY);
|
xSemaphoreTake(p_uart_obj[uart_num]->tx_mux, (portTickType)portMAX_DELAY);
|
||||||
size_t original_size = size;
|
if(p_uart_obj[uart_num]->tx_buf_size > 0) {
|
||||||
|
int max_size = xRingbufferGetMaxItemSize(p_uart_obj[uart_num]->tx_ring_buf);
|
||||||
|
int offset = 0;
|
||||||
|
uart_event_t evt;
|
||||||
|
evt.data.size = size;
|
||||||
|
evt.data.brk_len = brk_len;
|
||||||
|
if(brk_en) {
|
||||||
|
evt.type = UART_DATA_BREAK;
|
||||||
|
} else {
|
||||||
|
evt.type = UART_DATA;
|
||||||
|
}
|
||||||
|
xRingbufferSend(p_uart_obj[uart_num]->tx_ring_buf, (void*) &evt, sizeof(uart_event_t), portMAX_DELAY);
|
||||||
|
while(size > 0) {
|
||||||
|
int send_size = size > max_size / 2 ? max_size / 2 : size;
|
||||||
|
xRingbufferSend(p_uart_obj[uart_num]->tx_ring_buf, (void*) (src + offset), send_size, portMAX_DELAY);
|
||||||
|
size -= send_size;
|
||||||
|
offset += send_size;
|
||||||
|
}
|
||||||
|
xSemaphoreGive(p_uart_obj[uart_num]->tx_mux);
|
||||||
|
uart_enable_tx_intr(uart_num, 1, UART_EMPTY_THRESH_DEFAULT);
|
||||||
|
} else {
|
||||||
while(size) {
|
while(size) {
|
||||||
//semaphore for tx_fifo available
|
//semaphore for tx_fifo available
|
||||||
if(pdTRUE == xSemaphoreTake(p_uart_obj[uart_num]->tx_fifo_sem, (portTickType)portMAX_DELAY)) {
|
if(pdTRUE == xSemaphoreTake(p_uart_obj[uart_num]->tx_fifo_sem, (portTickType)portMAX_DELAY)) {
|
||||||
|
@ -733,114 +746,28 @@ static int uart_tx_all(uart_port_t uart_num, const char* src, size_t size, bool
|
||||||
xSemaphoreTake(p_uart_obj[uart_num]->tx_brk_sem, (portTickType)portMAX_DELAY);
|
xSemaphoreTake(p_uart_obj[uart_num]->tx_brk_sem, (portTickType)portMAX_DELAY);
|
||||||
}
|
}
|
||||||
xSemaphoreGive(p_uart_obj[uart_num]->tx_fifo_sem);
|
xSemaphoreGive(p_uart_obj[uart_num]->tx_fifo_sem);
|
||||||
|
}
|
||||||
xSemaphoreGive(p_uart_obj[uart_num]->tx_mux);
|
xSemaphoreGive(p_uart_obj[uart_num]->tx_mux);
|
||||||
return original_size;
|
return original_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
int uart_tx_all_chars(uart_port_t uart_num, const char* src, size_t size)
|
int uart_write_bytes(uart_port_t uart_num, const char* src, size_t size)
|
||||||
{
|
{
|
||||||
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", (-1));
|
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", (-1));
|
||||||
UART_CHECK((p_uart_obj[uart_num] != NULL), "uart driver error", (-1));
|
UART_CHECK((p_uart_obj[uart_num] != NULL), "uart driver error", (-1));
|
||||||
UART_CHECK(src, "buffer null", (-1));
|
UART_CHECK(src, "buffer null", (-1));
|
||||||
//Push data to TX ring buffer and return, ISR will send the data.
|
|
||||||
if(p_uart_obj[uart_num]->tx_buf_size > 0) {
|
|
||||||
xSemaphoreTake(p_uart_obj[uart_num]->tx_mux, (portTickType)portMAX_DELAY);
|
|
||||||
int max_size = xRingbufferGetMaxItemSize(p_uart_obj[uart_num]->tx_ring_buf);
|
|
||||||
int ori_size = size;
|
|
||||||
int offset = 0;
|
|
||||||
uart_event_t evt;
|
|
||||||
evt.type = UART_DATA;
|
|
||||||
evt.data.size = size;
|
|
||||||
xRingbufferSend(p_uart_obj[uart_num]->tx_ring_buf, (void*) &evt, sizeof(uart_event_t), portMAX_DELAY);
|
|
||||||
while(size > 0) {
|
|
||||||
int send_size = size > max_size / 2 ? max_size / 2 : size;
|
|
||||||
xRingbufferSend(p_uart_obj[uart_num]->tx_ring_buf, (void*) (src + offset), send_size, portMAX_DELAY);
|
|
||||||
size -= send_size;
|
|
||||||
offset += send_size;
|
|
||||||
}
|
|
||||||
xSemaphoreGive(p_uart_obj[uart_num]->tx_mux);
|
|
||||||
uart_enable_tx_intr(uart_num, 1, UART_EMPTY_THRESH_DEFAULT);
|
|
||||||
return ori_size;
|
|
||||||
} else {
|
|
||||||
//Send data without TX ring buffer, the task will block until all data have been sent out
|
|
||||||
return uart_tx_all(uart_num, src, size, 0, 0);
|
return uart_tx_all(uart_num, src, size, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
int uart_tx_all_chars_with_break(uart_port_t uart_num, const char* src, size_t size, int brk_len)
|
int uart_write_bytes_with_break(uart_port_t uart_num, const char* src, size_t size, int brk_len)
|
||||||
{
|
{
|
||||||
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", (-1));
|
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", (-1));
|
||||||
UART_CHECK((p_uart_obj[uart_num]), "uart driver error", (-1));
|
UART_CHECK((p_uart_obj[uart_num]), "uart driver error", (-1));
|
||||||
UART_CHECK((size > 0), "uart size error", (-1));
|
UART_CHECK((size > 0), "uart size error", (-1));
|
||||||
UART_CHECK((src), "uart data null", (-1));
|
UART_CHECK((src), "uart data null", (-1));
|
||||||
UART_CHECK((brk_len > 0 && brk_len < 256), "break_num error", (-1));
|
UART_CHECK((brk_len > 0 && brk_len < 256), "break_num error", (-1));
|
||||||
//Push data to TX ring buffer and return, ISR will send the data.
|
|
||||||
if(p_uart_obj[uart_num]->tx_buf_size > 0) {
|
|
||||||
xSemaphoreTake(p_uart_obj[uart_num]->tx_mux, (portTickType)portMAX_DELAY);
|
|
||||||
int max_size = xRingbufferGetMaxItemSize(p_uart_obj[uart_num]->tx_ring_buf);
|
|
||||||
int ori_size = size;
|
|
||||||
int offset = 0;
|
|
||||||
uart_event_t evt;
|
|
||||||
evt.type = UART_DATA_BREAK;
|
|
||||||
evt.data.size = size;
|
|
||||||
evt.data.brk_len = brk_len;
|
|
||||||
xRingbufferSend(p_uart_obj[uart_num]->tx_ring_buf, (void*) &evt, sizeof(uart_event_t), portMAX_DELAY);
|
|
||||||
while(size > 0) {
|
|
||||||
int send_size = size > max_size / 2 ? max_size / 2 : size;
|
|
||||||
xRingbufferSend(p_uart_obj[uart_num]->tx_ring_buf, (void*) (src + offset), send_size, portMAX_DELAY);
|
|
||||||
size -= send_size;
|
|
||||||
offset += send_size;
|
|
||||||
}
|
|
||||||
xSemaphoreGive(p_uart_obj[uart_num]->tx_mux);
|
|
||||||
uart_enable_tx_intr(uart_num, 1, UART_EMPTY_THRESH_DEFAULT);
|
|
||||||
return ori_size;
|
|
||||||
} else {
|
|
||||||
//Send data without TX ring buffer, the task will block until all data have been sent out
|
|
||||||
return uart_tx_all(uart_num, src, size, 1, brk_len);
|
return uart_tx_all(uart_num, src, size, 1, brk_len);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
int uart_read_char(uart_port_t uart_num, TickType_t ticks_to_wait)
|
|
||||||
{
|
|
||||||
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", (-1));
|
|
||||||
UART_CHECK((p_uart_obj[uart_num]), "uart driver error", (-1));
|
|
||||||
uint8_t* data;
|
|
||||||
size_t size;
|
|
||||||
int val;
|
|
||||||
portTickType ticks_end = xTaskGetTickCount() + ticks_to_wait;
|
|
||||||
if(xSemaphoreTake(p_uart_obj[uart_num]->rx_mux,(portTickType)ticks_to_wait) != pdTRUE) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if(p_uart_obj[uart_num]->rx_cur_remain == 0) {
|
|
||||||
ticks_to_wait = ticks_end - xTaskGetTickCount();
|
|
||||||
data = (uint8_t*) xRingbufferReceive(p_uart_obj[uart_num]->rx_ring_buf, &size, (portTickType) ticks_to_wait);
|
|
||||||
if(data) {
|
|
||||||
p_uart_obj[uart_num]->rx_head_ptr = data;
|
|
||||||
p_uart_obj[uart_num]->rx_ptr = data;
|
|
||||||
p_uart_obj[uart_num]->rx_cur_remain = size;
|
|
||||||
} else {
|
|
||||||
xSemaphoreGive(p_uart_obj[uart_num]->rx_mux);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val = *(p_uart_obj[uart_num]->rx_ptr);
|
|
||||||
p_uart_obj[uart_num]->rx_ptr++;
|
|
||||||
p_uart_obj[uart_num]->rx_cur_remain--;
|
|
||||||
if(p_uart_obj[uart_num]->rx_cur_remain == 0) {
|
|
||||||
vRingbufferReturnItem(p_uart_obj[uart_num]->rx_ring_buf, p_uart_obj[uart_num]->rx_head_ptr);
|
|
||||||
p_uart_obj[uart_num]->rx_head_ptr = NULL;
|
|
||||||
p_uart_obj[uart_num]->rx_ptr = NULL;
|
|
||||||
if(p_uart_obj[uart_num]->rx_buffer_full_flg) {
|
|
||||||
BaseType_t res = xRingbufferSend(p_uart_obj[uart_num]->rx_ring_buf, p_uart_obj[uart_num]->rx_data_buf, p_uart_obj[uart_num]->rx_stash_len, 1);
|
|
||||||
if(res == pdTRUE) {
|
|
||||||
p_uart_obj[uart_num]->rx_buffer_full_flg = false;
|
|
||||||
uart_enable_rx_intr(p_uart_obj[uart_num]->uart_num);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
xSemaphoreGive(p_uart_obj[uart_num]->rx_mux);
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
int uart_read_bytes(uart_port_t uart_num, uint8_t* buf, uint32_t length, TickType_t ticks_to_wait)
|
int uart_read_bytes(uart_port_t uart_num, uint8_t* buf, uint32_t length, TickType_t ticks_to_wait)
|
||||||
{
|
{
|
||||||
|
@ -952,59 +879,6 @@ esp_err_t uart_flush(uart_port_t uart_num)
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------
|
|
||||||
//Should not enable hw flow control the debug print port.
|
|
||||||
//Use uart_tx_all_chars() as a thread-safe function to send data.
|
|
||||||
static int s_uart_print_nport = UART_NUM_0;
|
|
||||||
static void uart2_write_char(char chr)
|
|
||||||
{
|
|
||||||
uart_tx_all_chars(UART_NUM_2, (const char*)&chr, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void uart1_write_char(char chr)
|
|
||||||
{
|
|
||||||
uart_tx_all_chars(UART_NUM_1, (const char*)&chr, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void uart0_write_char(char chr)
|
|
||||||
{
|
|
||||||
uart_tx_all_chars(UART_NUM_0, (const char*)&chr, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void uart_ignore_char(char chr)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//Only effective to ets_printf function, not ESP_LOGX macro.
|
|
||||||
esp_err_t uart_set_print_port(uart_port_t uart_num)
|
|
||||||
{
|
|
||||||
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", ESP_FAIL);
|
|
||||||
UART_CHECK((p_uart_obj[uart_num]), "UART driver error", ESP_FAIL);
|
|
||||||
s_uart_print_nport = uart_num;
|
|
||||||
switch(s_uart_print_nport) {
|
|
||||||
case UART_NUM_0:
|
|
||||||
ets_install_putc1(uart0_write_char);
|
|
||||||
break;
|
|
||||||
case UART_NUM_1:
|
|
||||||
ets_install_putc1(uart1_write_char);
|
|
||||||
break;
|
|
||||||
case UART_NUM_2:
|
|
||||||
ets_install_putc1(uart2_write_char);
|
|
||||||
break;
|
|
||||||
case UART_NUM_MAX:
|
|
||||||
default:
|
|
||||||
ets_install_putc1(uart_ignore_char);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return ESP_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
int uart_get_print_port()
|
|
||||||
{
|
|
||||||
return s_uart_print_nport;
|
|
||||||
}
|
|
||||||
|
|
||||||
esp_err_t uart_driver_install(uart_port_t uart_num, int rx_buffer_size, int tx_buffer_size, int queue_size, int uart_intr_num, void* uart_queue)
|
esp_err_t uart_driver_install(uart_port_t uart_num, int rx_buffer_size, int tx_buffer_size, int queue_size, int uart_intr_num, void* uart_queue)
|
||||||
{
|
{
|
||||||
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", ESP_FAIL);
|
UART_CHECK((uart_num < UART_NUM_MAX), "uart_num error", ESP_FAIL);
|
||||||
|
|
Loading…
Reference in a new issue