Question regarding FlexCAN -- S32K344 mcu -- FlexCAN_Ip_ConfigRxMb()

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

Question regarding FlexCAN -- S32K344 mcu -- FlexCAN_Ip_ConfigRxMb()

跳至解决方案
1,612 次查看
kyf
Contributor V

Hello NXP team !

I'm working on devBoard S32K3x4EVB-Q172 and I'm trying to figure out how FlexCAN does work.

I have a question regarding FlexCAN_Ip_ConfigRxMb() function.

Of what I've read so far and of what I've tested so far I understand that FlexCAN_Ip_ConfigRxMb() function does set-up the receive message buffer.

But I can not find what role does the uint32 msg_id parameter have.As far I can understand that it is used to filter the ID of a frame in order to read or not a frame.

1. Is there any option to disable this feature ?

2. Is there any way to read all incoming CAN frames without filtering by their CAN-ID ?

3. Is there any documentation or training matterial regarding the FlexCAN ?

 

My configuration setup is as simple as it can get. I'm attaching the code that I'm using in order to test and validate CAN functionality.

#include "Mcal.h"
#include "Clock_Ip.h"
#include "FlexCAN_Ip.h"
#include "IntCtrl_Ip.h"
#include "Siul2_Dio_Ip.h"
#include "Siul2_Port_Ip.h"

#define MSG_ID 0x601//20u
#define RX_MB_IDX 1U
#define TX_MB_IDX 0U
volatile int exit_code = 0;

uint8 dummyData[8] = {1,2,3,4,5,6,7};
volatile uint8_t i = 0;

extern void CAN0_ORED_0_31_MB_IRQHandler(void);

int main(void)
{
    /* Write your code here */
    Clock_Ip_Init(&Clock_Ip_aClockConfig[0]);

    Siul2_Port_Ip_Init(NUM_OF_CONFIGURED_PINS0, g_pin_mux_InitConfigArr0);

    //Put the transeiver to Normal Mode
    Siul2_Dio_Ip_WritePin(CAN_EN_PORT  , CAN_EN_PIN  , 1);
    Siul2_Dio_Ip_WritePin(CAN_nSTB_PORT, CAN_nSTB_PIN, 1);

    IntCtrl_Ip_EnableIrq(FlexCAN0_1_IRQn);
    IntCtrl_Ip_InstallHandler(FlexCAN0_1_IRQn, CAN0_ORED_0_31_MB_IRQHandler, NULL_PTR);

    Flexcan_Ip_DataInfoType rx_info = {
            .msg_id_type = FLEXCAN_MSG_ID_STD,
            .data_length = 8u,
            .is_polling = TRUE,
            .is_remote = FALSE
    };
    Flexcan_Ip_MsgBuffType rxData;
    FlexCAN_Ip_Init(INST_FLEXCAN_0, &FlexCAN_State0, &FlexCAN_Config0);
    FlexCAN_Ip_SetStartMode(INST_FLEXCAN_0);
    FlexCAN_Ip_ConfigRxMb(INST_FLEXCAN_0, RX_MB_IDX, &rx_info, 0);
    rx_info.is_polling = FALSE;
    while(1)
    {
//		FlexCAN_Ip_Send(INST_FLEXCAN_0, TX_MB_IDX, &rx_info, MSG_ID, (uint8 *)&dummyData);
    	FlexCAN_Ip_Receive(INST_FLEXCAN_0, RX_MB_IDX, &rxData, TRUE);
		if(FlexCAN_Ip_GetTransferStatus(INST_FLEXCAN_0, RX_MB_IDX) != FLEXCAN_STATUS_SUCCESS)
		{
			__asm__ ("nop");
			FlexCAN_Ip_MainFunctionRead(INST_FLEXCAN_0, RX_MB_IDX);
		}
//		for (i= 0; i < 7; i++)
//		{
//			dummyData[i]+= 1;
//		}
    }
	FlexCAN_Ip_SetStopMode(INST_FLEXCAN_0);
    FlexCAN_Ip_Deinit(INST_FLEXCAN_0);
    return 0;
}

My peripheral configurations are located in the image bellow:

kyf_0-1666279294514.png

 

Kind regards,

kyf

0 项奖励
回复
1 解答
1,603 次查看
PetrS
NXP TechSupport
NXP TechSupport

Hi,

msg_id specifies a std/ext ID to be received into used message buffer. A configured ID is compared with received one and if match is found a receive message is stored into the MB. Mask register can be used to define which ID bit will be don't care.
1. no
2. you can use mask acceptance register
3. I can recommend to read chapter Receive and Matching of the RM. Moreover you can refer to below trainings and guide
https://www.nxp.com/webapp/Download?colCode=17_S32K3XX_COMMUNICATION_MODULES_FLEXCAN_TRAINING
https://www.nxp.com/webapp/Download?colCode=18_S32K3XX_COMMUNICATION_MODULES_FLEXCAN_WITH_RTD 
https://community.nxp.com/t5/S32K-Knowledge-Base/S32K1xx-FlexCAN-Mask-Setting-Demo/ta-p/1519753

Finally I posted simple demo for TX/RX/RXFIFO usage at https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K344-FlexCAN-Ip-TX-RX-EnhanceRXFIFO-test...

BR, Petr
 

在原帖中查看解决方案

0 项奖励
回复
2 回复数
1,604 次查看
PetrS
NXP TechSupport
NXP TechSupport

Hi,

msg_id specifies a std/ext ID to be received into used message buffer. A configured ID is compared with received one and if match is found a receive message is stored into the MB. Mask register can be used to define which ID bit will be don't care.
1. no
2. you can use mask acceptance register
3. I can recommend to read chapter Receive and Matching of the RM. Moreover you can refer to below trainings and guide
https://www.nxp.com/webapp/Download?colCode=17_S32K3XX_COMMUNICATION_MODULES_FLEXCAN_TRAINING
https://www.nxp.com/webapp/Download?colCode=18_S32K3XX_COMMUNICATION_MODULES_FLEXCAN_WITH_RTD 
https://community.nxp.com/t5/S32K-Knowledge-Base/S32K1xx-FlexCAN-Mask-Setting-Demo/ta-p/1519753

Finally I posted simple demo for TX/RX/RXFIFO usage at https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K344-FlexCAN-Ip-TX-RX-EnhanceRXFIFO-test...

BR, Petr
 

0 项奖励
回复
1,601 次查看
kyf
Contributor V

Hello @PetrS .

 

I've seen the example that you've posted like an hour ago.

Finally I posted simple demo for TX/RX/RXFIFO usage at https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K344-FlexCAN-Ip-TX-RX-EnhanceRXFIFO-test...

Thank you for your answer to my query. I will go test and do some more study regarding this matter.

 

Kind regards,

kyf

0 项奖励
回复