mirror of
https://github.com/espressif/esp-idf.git
synced 2025-09-30 19:19:21 +00:00
Merge branch 'fix/twai_fix_clock_sel_and_c5_errata' into 'master'
fix(driver_twai): fixed clock sel and c5 listen only mode errata Closes IDF-13144 and IDF-13059 See merge request espressif/esp-idf!40057
This commit is contained in:
@@ -165,7 +165,7 @@ static inline void twaifd_ll_set_mode(twaifd_dev_t *hw, bool listen_only, bool s
|
||||
|
||||
twaifd_mode_settings_reg_t opmode = {.val = hw->mode_settings.val};
|
||||
opmode.stm = self_test;
|
||||
opmode.bmm = listen_only;
|
||||
(void)listen_only; // listen only is not available in this chip, see "CTU FD 2v5 errata 0v2 issue 5"
|
||||
opmode.ilbp = loopback;
|
||||
|
||||
hw->mode_settings.val = opmode.val;
|
||||
|
@@ -4,6 +4,7 @@
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
#include "hal/twai_hal.h"
|
||||
#include "hal/twaifd_ll.h"
|
||||
|
||||
@@ -118,17 +119,24 @@ void twai_hal_format_frame(const twai_hal_trans_desc_t *trans_desc, twai_hal_fra
|
||||
{
|
||||
const twai_frame_header_t *header = trans_desc->frame.header;
|
||||
int final_dlc = (header->dlc) ? header->dlc : twaifd_len2dlc(trans_desc->frame.buffer_len);
|
||||
int data_len = (header->dlc) ? twaifd_dlc2len(header->dlc) : trans_desc->frame.buffer_len;
|
||||
twaifd_ll_format_frame_header(header, final_dlc, frame);
|
||||
twaifd_ll_format_frame_data(trans_desc->frame.buffer, data_len, frame);
|
||||
if (!header->rtr) {
|
||||
int data_len = (header->dlc) ? twaifd_dlc2len(header->dlc) : trans_desc->frame.buffer_len;
|
||||
data_len = (header->fdf) ? MIN(data_len, TWAIFD_FRAME_MAX_LEN) : MIN(data_len, TWAI_FRAME_MAX_LEN);
|
||||
twaifd_ll_format_frame_data(trans_desc->frame.buffer, data_len, frame);
|
||||
}
|
||||
}
|
||||
|
||||
void twai_hal_parse_frame(const twai_hal_frame_t *frame, twai_frame_header_t *header, uint8_t *buffer, uint8_t buffer_len)
|
||||
{
|
||||
twaifd_ll_parse_frame_header(frame, header);
|
||||
int frame_data_len = twaifd_dlc2len(header->dlc);
|
||||
uint8_t final_len = (frame_data_len < buffer_len) ? frame_data_len : buffer_len;
|
||||
twaifd_ll_parse_frame_data(frame, buffer, final_len);
|
||||
if (!header->rtr) {
|
||||
int frame_data_len = twaifd_dlc2len(header->dlc);
|
||||
// limit data_len for twai classic non-iso mode.
|
||||
frame_data_len = (header->fdf) ? MIN(frame_data_len, TWAIFD_FRAME_MAX_LEN) : MIN(frame_data_len, TWAI_FRAME_MAX_LEN);
|
||||
uint8_t final_len = MIN(frame_data_len, buffer_len);
|
||||
twaifd_ll_parse_frame_data(frame, buffer, final_len);
|
||||
}
|
||||
}
|
||||
|
||||
void twai_hal_set_tx_buffer_and_transmit(twai_hal_context_t *hal_ctx, twai_hal_frame_t *tx_frame, uint8_t buffer_idx)
|
||||
|
Reference in New Issue
Block a user