LPC546 MCAN Buadrate update

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

LPC546 MCAN Buadrate update

496 Views
emb02
Contributor IV

I am working on LPC546 for CAN Protocol

I am setting baudrate using config tools but I want to update required baudrate without using config tools but using setbaudratefunction.. 

When I am trying to use setbaudratefunction and updating baudrate communication happen only on baudrate which was previously set in config tools.

Please guide me.

Thank you.

Labels (1)
Tags (3)
0 Kudos
Reply
1 Reply

453 Views
xiangjun_rong
NXP TechSupport
NXP TechSupport

Hi,

In the SDK example, there is _mcan_interrupt_transfer example, I copy the code here. As you know that the LPC54628 support CAN-FD feature, the baudrate for the control bits transfer and data bits transfer in the same CAN packet is different. The following code initialize baud rate for both the control bits and data bits in MCAN_Init().

MCAN_GetDefaultConfig(&mcanConfig);
#if (defined(USE_CANFD) && USE_CANFD)
/* Enable Bit Rate Switch to make baudRateD make sense.*/
mcanConfig.enableCanfdSwitch = true;
#endif

#if (defined(USE_IMPROVED_TIMING_CONFIG) && USE_IMPROVED_TIMING_CONFIG)
mcan_timing_config_t timing_config;
memset(&timing_config, 0, sizeof(timing_config));
#if (defined(USE_CANFD) && USE_CANFD)
if (MCAN_FDCalculateImprovedTimingValues(mcanConfig.baudRateA, mcanConfig.baudRateD, MCAN_CLK_FREQ, &timing_config))
{
/* Update the improved timing configuration*/
memcpy(&(mcanConfig.timingConfig), &timing_config, sizeof(mcan_timing_config_t));
}
else
{
PRINTF("No found Improved Timing Configuration. Just used default configuration\r\n\r\n");
}
#else
if (MCAN_CalculateImprovedTimingValues(mcanConfig.baudRateA, MCAN_CLK_FREQ, &timing_config))
{
/* Update the improved timing configuration*/
memcpy(&(mcanConfig.timingConfig), &timing_config, sizeof(mcan_timing_config_t));
}
else
{
PRINTF("No found Improved Timing Configuration. Just used default configuration\r\n\r\n");
}
#endif
#endif

MCAN_Init(EXAMPLE_MCAN, &mcanConfig, MCAN_CLK_FREQ);

 

After above initialization, you can use the function to set up the baudrate for the control bits, but you have to know the seg1, seg2, pls refer to section 35.8.4 Nominal bit timing and prescaler register in UM10912.pdf.

static void MCAN_SetBaudRate(CAN_Type *base,
uint32_t sourceClock_Hz,
uint32_t baudRateA_Bps,
mcan_timing_config_t timingConfig)

 

you can use the function to set up the baudrate for the data bits transfer, but you have to know the seg1, seg2, pls refer to section 35.8.1 Data bit timing and prescaler register in UM10912.pdf.

static void MCAN_SetBaudRateFD(CAN_Type *base,
uint32_t sourceClock_Hz,
uint32_t baudRateD_Bps,
mcan_timing_config_t timingConfig)

 

Hope it can help you

BR

XiangJun Rong

 

0 Kudos
Reply