mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'bugfix/uart_rmt_fixes' into 'master'
Fixes for UART and RMT drivers - Add const qualifier for config and tx data in RMT (https://github.com/espressif/esp-idf/pull/495) - Fix rmt_set_tx_thr_intr_en(): check evt_thresh only in enable path (https://github.com/espressif/esp-idf/pull/492) - Fix impossible check in uart_set_line_inverse (https://github.com/espressif/esp-idf/pull/489) See merge request !648
This commit is contained in:
commit
935552427c
@ -564,7 +564,7 @@ esp_err_t rmt_set_pin(rmt_channel_t channel, rmt_mode_t mode, gpio_num_t gpio_nu
|
|||||||
* - ESP_ERR_INVALID_ARG Parameter error
|
* - ESP_ERR_INVALID_ARG Parameter error
|
||||||
* - ESP_OK Success
|
* - ESP_OK Success
|
||||||
*/
|
*/
|
||||||
esp_err_t rmt_config(rmt_config_t* rmt_param);
|
esp_err_t rmt_config(const rmt_config_t* rmt_param);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief register RMT interrupt handler, the handler is an ISR.
|
* @brief register RMT interrupt handler, the handler is an ISR.
|
||||||
@ -612,7 +612,7 @@ esp_err_t rmt_isr_deregister(rmt_isr_handle_t handle);
|
|||||||
* - ESP_ERR_INVALID_ARG Parameter error
|
* - ESP_ERR_INVALID_ARG Parameter error
|
||||||
* - ESP_OK Success
|
* - ESP_OK Success
|
||||||
*/
|
*/
|
||||||
esp_err_t rmt_fill_tx_items(rmt_channel_t channel, rmt_item32_t* item, uint16_t item_num, uint16_t mem_offset);
|
esp_err_t rmt_fill_tx_items(rmt_channel_t channel, const rmt_item32_t* item, uint16_t item_num, uint16_t mem_offset);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Initialize RMT driver
|
* @brief Initialize RMT driver
|
||||||
@ -670,7 +670,7 @@ esp_err_t rmt_driver_uninstall(rmt_channel_t channel);
|
|||||||
* - ESP_ERR_INVALID_ARG Parameter error
|
* - ESP_ERR_INVALID_ARG Parameter error
|
||||||
* - ESP_OK Success
|
* - ESP_OK Success
|
||||||
*/
|
*/
|
||||||
esp_err_t rmt_write_items(rmt_channel_t channel, rmt_item32_t* rmt_item, int item_num, bool wait_tx_done);
|
esp_err_t rmt_write_items(rmt_channel_t channel, const rmt_item32_t* rmt_item, int item_num, bool wait_tx_done);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Wait RMT TX finished.
|
* @brief Wait RMT TX finished.
|
||||||
|
@ -61,7 +61,7 @@ typedef struct {
|
|||||||
int tx_len_rem;
|
int tx_len_rem;
|
||||||
int tx_sub_len;
|
int tx_sub_len;
|
||||||
rmt_channel_t channel;
|
rmt_channel_t channel;
|
||||||
rmt_item32_t* tx_data;
|
const rmt_item32_t* tx_data;
|
||||||
xSemaphoreHandle tx_sem;
|
xSemaphoreHandle tx_sem;
|
||||||
RingbufHandle_t tx_buf;
|
RingbufHandle_t tx_buf;
|
||||||
RingbufHandle_t rx_buf;
|
RingbufHandle_t rx_buf;
|
||||||
@ -344,8 +344,8 @@ esp_err_t rmt_set_tx_intr_en(rmt_channel_t channel, bool en)
|
|||||||
esp_err_t rmt_set_tx_thr_intr_en(rmt_channel_t channel, bool en, uint16_t evt_thresh)
|
esp_err_t rmt_set_tx_thr_intr_en(rmt_channel_t channel, bool en, uint16_t evt_thresh)
|
||||||
{
|
{
|
||||||
RMT_CHECK(channel < RMT_CHANNEL_MAX, RMT_CHANNEL_ERROR_STR, ESP_ERR_INVALID_ARG);
|
RMT_CHECK(channel < RMT_CHANNEL_MAX, RMT_CHANNEL_ERROR_STR, ESP_ERR_INVALID_ARG);
|
||||||
RMT_CHECK(evt_thresh < 256, "RMT EVT THRESH ERR", ESP_ERR_INVALID_ARG);
|
|
||||||
if(en) {
|
if(en) {
|
||||||
|
RMT_CHECK(evt_thresh < 256, "RMT EVT THRESH ERR", ESP_ERR_INVALID_ARG);
|
||||||
RMT.tx_lim_ch[channel].limit = evt_thresh;
|
RMT.tx_lim_ch[channel].limit = evt_thresh;
|
||||||
rmt_set_tx_wrap_en(channel, true);
|
rmt_set_tx_wrap_en(channel, true);
|
||||||
rmt_set_intr_enable_mask(BIT(channel + 24));
|
rmt_set_intr_enable_mask(BIT(channel + 24));
|
||||||
@ -373,7 +373,7 @@ esp_err_t rmt_set_pin(rmt_channel_t channel, rmt_mode_t mode, gpio_num_t gpio_nu
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t rmt_config(rmt_config_t* rmt_param)
|
esp_err_t rmt_config(const rmt_config_t* rmt_param)
|
||||||
{
|
{
|
||||||
uint8_t mode = rmt_param->rmt_mode;
|
uint8_t mode = rmt_param->rmt_mode;
|
||||||
uint8_t channel = rmt_param->channel;
|
uint8_t channel = rmt_param->channel;
|
||||||
@ -464,7 +464,7 @@ esp_err_t rmt_config(rmt_config_t* rmt_param)
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void IRAM_ATTR rmt_fill_memory(rmt_channel_t channel, rmt_item32_t* item, uint16_t item_num, uint16_t mem_offset)
|
static void IRAM_ATTR rmt_fill_memory(rmt_channel_t channel, const rmt_item32_t* item, uint16_t item_num, uint16_t mem_offset)
|
||||||
{
|
{
|
||||||
portENTER_CRITICAL(&rmt_spinlock);
|
portENTER_CRITICAL(&rmt_spinlock);
|
||||||
RMT.apb_conf.fifo_mask = RMT_DATA_MODE_MEM;
|
RMT.apb_conf.fifo_mask = RMT_DATA_MODE_MEM;
|
||||||
@ -475,7 +475,7 @@ static void IRAM_ATTR rmt_fill_memory(rmt_channel_t channel, rmt_item32_t* item,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t rmt_fill_tx_items(rmt_channel_t channel, rmt_item32_t* item, uint16_t item_num, uint16_t mem_offset)
|
esp_err_t rmt_fill_tx_items(rmt_channel_t channel, const rmt_item32_t* item, uint16_t item_num, uint16_t mem_offset)
|
||||||
{
|
{
|
||||||
RMT_CHECK(channel < RMT_CHANNEL_MAX, RMT_CHANNEL_ERROR_STR, (0));
|
RMT_CHECK(channel < RMT_CHANNEL_MAX, RMT_CHANNEL_ERROR_STR, (0));
|
||||||
RMT_CHECK((item != NULL), RMT_ADDR_ERROR_STR, ESP_ERR_INVALID_ARG);
|
RMT_CHECK((item != NULL), RMT_ADDR_ERROR_STR, ESP_ERR_INVALID_ARG);
|
||||||
@ -589,7 +589,7 @@ static void IRAM_ATTR rmt_driver_isr_default(void* arg)
|
|||||||
if(p_rmt->tx_data == NULL) {
|
if(p_rmt->tx_data == NULL) {
|
||||||
//skip
|
//skip
|
||||||
} else {
|
} else {
|
||||||
rmt_item32_t* pdata = p_rmt->tx_data;
|
const rmt_item32_t* pdata = p_rmt->tx_data;
|
||||||
int len_rem = p_rmt->tx_len_rem;
|
int len_rem = p_rmt->tx_len_rem;
|
||||||
if(len_rem >= p_rmt->tx_sub_len) {
|
if(len_rem >= p_rmt->tx_sub_len) {
|
||||||
rmt_fill_memory(channel, pdata, p_rmt->tx_sub_len, p_rmt->tx_offset);
|
rmt_fill_memory(channel, pdata, p_rmt->tx_sub_len, p_rmt->tx_offset);
|
||||||
@ -678,7 +678,7 @@ esp_err_t rmt_driver_install(rmt_channel_t channel, size_t rx_buf_size, int intr
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t rmt_write_items(rmt_channel_t channel, rmt_item32_t* rmt_item, int item_num, bool wait_tx_done)
|
esp_err_t rmt_write_items(rmt_channel_t channel, const rmt_item32_t* rmt_item, int item_num, bool wait_tx_done)
|
||||||
{
|
{
|
||||||
RMT_CHECK(channel < RMT_CHANNEL_MAX, RMT_CHANNEL_ERROR_STR, ESP_ERR_INVALID_ARG);
|
RMT_CHECK(channel < RMT_CHANNEL_MAX, RMT_CHANNEL_ERROR_STR, ESP_ERR_INVALID_ARG);
|
||||||
RMT_CHECK(p_rmt_obj[channel] != NULL, RMT_DRIVER_ERROR_STR, ESP_FAIL);
|
RMT_CHECK(p_rmt_obj[channel] != NULL, RMT_DRIVER_ERROR_STR, ESP_FAIL);
|
||||||
|
@ -191,7 +191,7 @@ esp_err_t uart_get_baudrate(uart_port_t uart_num, uint32_t* baudrate)
|
|||||||
esp_err_t uart_set_line_inverse(uart_port_t uart_num, uint32_t inverse_mask)
|
esp_err_t uart_set_line_inverse(uart_port_t uart_num, uint32_t inverse_mask)
|
||||||
{
|
{
|
||||||
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((((inverse_mask & UART_LINE_INV_MASK) == 0) && (inverse_mask != 0)), "inverse_mask error", ESP_FAIL);
|
UART_CHECK((((inverse_mask & ~UART_LINE_INV_MASK) == 0) && (inverse_mask != 0)), "inverse_mask error", ESP_FAIL);
|
||||||
UART_ENTER_CRITICAL(&uart_spinlock[uart_num]);
|
UART_ENTER_CRITICAL(&uart_spinlock[uart_num]);
|
||||||
CLEAR_PERI_REG_MASK(UART_CONF0_REG(uart_num), UART_LINE_INV_MASK);
|
CLEAR_PERI_REG_MASK(UART_CONF0_REG(uart_num), UART_LINE_INV_MASK);
|
||||||
SET_PERI_REG_MASK(UART_CONF0_REG(uart_num), inverse_mask);
|
SET_PERI_REG_MASK(UART_CONF0_REG(uart_num), inverse_mask);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user