Skip to content

Commit 202adce

Browse files
committed
Also automatically calculate bit-rates for Santiago CAN.
1 parent e3fceb2 commit 202adce

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

libraries/CAN/src/R7FA4M1_CAN.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
#include <IRQManager.h>
2020

21+
#include "CanUtil.h"
22+
2123
/**************************************************************************************
2224
* DEFINE
2325
**************************************************************************************/
@@ -141,7 +143,7 @@ R7FA4M1_CAN::R7FA4M1_CAN(int const can_tx_pin, int const can_rx_pin)
141143
* PUBLIC MEMBER FUNCTIONS
142144
**************************************************************************************/
143145

144-
bool R7FA4M1_CAN::begin(CanBitRate const /* can_bitrate */)
146+
bool R7FA4M1_CAN::begin(CanBitRate const can_bitrate)
145147
{
146148
bool init_ok = true;
147149

@@ -159,6 +161,23 @@ bool R7FA4M1_CAN::begin(CanBitRate const /* can_bitrate */)
159161
};
160162
init_ok &= IRQManager::getInstance().addPeripheral(IRQ_CAN, &irq_req);
161163

164+
/* Calculate the CAN bitrate based on the value of this functions parameter.
165+
*/
166+
static uint32_t const F_CAN_CLK_Hz = 20*1000*1000UL; /* CANMCLK */
167+
static uint32_t const CAN_TIME_QUANTA_per_Bit = 32; /* TQ */
168+
169+
auto [is_valid_baudrate, baud_rate_prescaler, time_segment_1, time_segment_2, synchronization_jump_width] =
170+
util::calc_can_bit_timing(can_bitrate, F_CAN_CLK_Hz, CAN_TIME_QUANTA_per_Bit);
171+
init_ok &= is_valid_baudrate;
172+
173+
if (is_valid_baudrate) {
174+
_can_bit_timing_cfg.baud_rate_prescaler = baud_rate_prescaler;
175+
_can_bit_timing_cfg.time_segment_1 = time_segment_1;
176+
_can_bit_timing_cfg.time_segment_2 = time_segment_2;
177+
_can_bit_timing_cfg.synchronization_jump_width = synchronization_jump_width;
178+
}
179+
180+
/* Initialize the peripheral's FSP driver. */
162181
if (R_CAN_Open(&_can_ctrl, &_can_cfg) != FSP_SUCCESS)
163182
init_ok = false;
164183

libraries/CAN/src/R7FA6M5_CAN.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ bool R7FA6M5_CAN::begin(CanBitRate const can_bitrate)
150150
_canfd_bit_timing_cfg.baud_rate_prescaler = baud_rate_prescaler;
151151
_canfd_bit_timing_cfg.time_segment_1 = time_segment_1;
152152
_canfd_bit_timing_cfg.time_segment_2 = time_segment_2;
153-
_canfd_bit_timing_cfg.synchronization_jump_width = synchronization_jump_width; /* Is always 1. */
153+
_canfd_bit_timing_cfg.synchronization_jump_width = synchronization_jump_width;
154154
}
155155

156156
/* Initialize the peripheral's FSP driver. */

0 commit comments

Comments
 (0)