公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

我想将数据从 CANDUMP.log 文件发送到 MCU。 我正在研究CAN接收器。 CAN 有人帮我做以下事情:

1。我必须使用 rxFifo 或 rxbuffer 才能持续接收数据吗?

2。如何分配 rxbuffer 和 rxFifo 的起始地址?

3. 当我收到连续的CAN报文时,如何覆盖内存中的值?

我正在使用KIT_A2G_TC397_5V_TFT

如果您能分享一些环回模式示例以外的CAN编程示例,我将不胜感激。

谢谢,

 

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/Configuring-CAN-rxbuffer-start-address-and-turn-on-overwrite-mode-on-TC397/td-p/615180

0 点赞
6 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager
0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

感谢您的回复。 如何修改代码以接收具有多个 ID 的消息。

g_mcmcan.canfilter.id1 = 0x301;(使用此语句它将只接受带有 0x301 的消息。 我想禁用这个选项,有办法吗?)

谢谢!

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

"ifxcan_Filter 过滤器;filter.number = 1;f

ilter.elementConfiguration
= ifxcan_filterelementConfiguration_storeinrxfifo0;filter.ifxcan_type = ifxcan_type = ifxcan_filterType_Can_type = ifxcan_type = ifxcan_type = ifxcan_type = ifxcan_f
ilterType_Can_type =;filter.




& & "

在上面的代码片段中, CAN 选择 id1 和 id2 来选择要接收的 id 范围。

您 CAN 还检查示例 https://github.com/Infineon/AURIX_code_examples/blob/master/code_examples/MCMCAN_Filtering_1_KIT_TC3...

最诚挚的问候。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

谢谢!

可能是个愚蠢的问题,看你提到的:

filter.elementConfiguration = ifxcan_filterelementConfiguration_storeinrxfifo0;//这里的数据存储在 fifo 中

filter.rxBufferOffset = ifxcan_rxBufferid_1;//你提到 bufferID 为 1,

为什么我们需要 filter.rxBufferOffset = ifxcan_rxBufferid_1;语句?

还有没有资源链接,我可以 CAN 了解FIFO大小需要如何确定以及数据需要不断更新?

当我使用多个 rxbuffer 时,rx 中断是如何工作的?

谢谢,我真的很感谢你的帮助!

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

我已经更新了之前的回复,删除了 Filter .rxBufferOffset。 CAN参考以下链接以获取 MCAN 用户手册以获取更多详细信息。

https://www.bosch-semiconductors.com/media/ip_modules/pdf_2/m_can/mcan_users_manual_v331.pdf

对于中断配置,您 CAN 参考前面评论中提到的旧线程中 MCMCAN_CANFD_TXIsr_RXIsr.c 中的以下部分。

g_mcmcan.cannodeConfig.interrutconfig.messagestoreddicatedrxBufferenabled

=
TRUE;g_mcmcan.cannodeConfig.cannodeConfig.interructConfig.interructConfig.interructConfig.interructConfig.interructConfig.interructConfig.interructConfig.interructConfig.interructConfig.interructcmcmcan.cannodeConfig.interruptconfig.reint.reint.typeofService = ifxsrc_tos_cpu0 ;

最诚挚的问候。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

非常感谢你的更新。 我正在尝试将元素存储到 fifo 中,我正在使用下面的代码。 CAN 告诉我如何阅读先进先出元素? 我的中断正在起作用,但无法显示消息 ID 和收到的消息。

请看下面的代码:

/
* can_rx.c

* 创建于:2023 年 9 月 26 日
* 作者:shivdev1
*/


#include " mcmcan.h "

#define TX_PIN ifxcan_txd00_p20_8_out #define RX_PIN if
xcan_rxd00b_p20_7_in

#define CAN_STB 1
#define NODE0_RAM_OFFSET 0x0


/********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************;
/* 全球 MCMCAN 配置和控制结构 */ ifxport_pin_config g_led1;/* 全球 LED1 配置和控制结构 */ ifxport_pin_config g_



led2; /* 全球 LED2 配置和控制结构 */

 

IFX_INTERRUPT(canisrrxHandler,0,ISR_PRIORITY_CAN_RX);


void canisrrxHandler (void)
{pr
intf("已到达步骤 1\ n);"

ifxcan_node_clearInterruptFlag (g_mcmcan.candstnode.node, ifxcan_interrupt_rxfifo0NewMessage)

//ifxcan_node_clearInterruptFlag (g_mcmcan.candstnode.node, ifxcan_interrupt_messagestoredtedicatedrxBuffer);g_mcmcan.rxmsg.readfromrxfifo0
= 真的;


ifxcan_can_readMessage (g_mcmcan.candstNode,g_mcmcan.rxmsg,&& &g_mcmcan.rxdata [0]);
printf (r " xmsg.msgid:\ n,g_mcmcan.rxmsg.msageID);"
printf (r " xmsg.data:\ n,g_mcmcan.rxData " [0]);

}

/* 用于初始化 MCMCAN 模块和与此应用程序用例相关的节点的函数 */
void initmcmCan (void)
{boolean iState = ifxCPU_disableInterrupts ();

ifxcan_can_initModuleConfig(g_mcmcan.canconfig,MODULE_CAN0);&&

ifxcan_can_initModule(g_mcmcan.canModule,g_mcmcan.canconfig);&&

ifxcan_can_initnodeConfig(g_mcmcan.cannodeConfig,g_mcmcan.canModule);&&

g_mcmcan.cannodeConfig.nodeID = ifxcan_nodeid_0;

g_mcmcan.cannodeConfig.frame.type = ifxcan_frameType_Receive;


//g_mcmcan.cannodeConfig.txconfig.decidatedtxBuffersNumber = 2;

g_mcmcan.cannodeConfig.messageram.txBuffersStartAddress = 0x400;g_mcmcan.cannodeConfig.messageram.standardfilterlistStartAddress
= 0x100 + NODE0_RAM_OFFSET; //g_mcmcan.cannodeConfig.msageram.rxBuffersStartAddress; //g_mcm
= 0x200 + NODE0_RAM_OFFSET;g_mcmcan.cannodeConfig.messageram.rxfifo0StartAddress
= 0x200 + NODE0_RAM_OFFSET;g_mcmcan.cannodeConfig.cannodeConfig.messageram.baseAddress = (uint32) MODULE_CAN0;
g_mcmcan.cannodeConfig.filterconfig.standardlistSize &
= 1;
//g_mcmcan.cannodeConfig.interructconfig.messagestoredtodecatedrxBufferenabled = TRUE;
g_mcmcan.cannodeConfig.interruptConfig.rxfifo0newMessageenable = TRUE;
g_mcmcan.cannodeConfig.interruptConfig.rxf0n.Priority = ISR_PRIORITY_CAN_RX;g_mcmcan.cannodeConfig.interructConfig.ructconfig.rxf0n.priority = ISR_P
= ifxcan_interruptline_1;g_mcmcan.cannodeConfig.interruptconfig.rxf0n.typeofService
= ifxsrc_tos_cpu0; //g_mcmcan.cannodeConfig.cannodeConfig.interruptconfig.traco.priority = ISR_PRIORITY_CAN_RX;//g_mcmcan.cannodeConfig.interruptConfig.traco.traco.priority =

= ifxcan_interruptline_1; //g_mcmcan.cannodeConfig.interruptconfig.traco.traco.traco.te
= ifxsrc_tos_cpu0;g_mcmcan.cannodeConfig.rxconfig.rxconfig.rxmode=ifxcan_rxmode_fifo0;

g_mcmcan.cannodeConfig.rxconfig.rxfifo0operatingmode=ifxcan_rxfifomode_Overwrite ;
g_mcmcan.cannodeConfig.rxconfig.rxfifo0size=60;
ifxcan_can_pins 引脚;pins.rxpin =
RX_PIN;pins.rxpinmode = ifxpinmode_pullup;pins.txpinmode = ifxport_outputm
ode_pushPull;pins.paddriver = if & xport_paddriver_cmosautiveSpeed2;g_mcmcan.candeConfigSpeed2;g_mcmcan.candeConfigSpeed2;pins.paddriver = ifxport_pad. 别针 = 别针;
&


&

ifxcan_can_initNode(g_mcmcan.candstNode,g_mcmcan.cannodeConfig);&&

g_mcmcan.canfilter.Number = 0; //g_mcmcan.canfilter.elementConfigurater
= ifxcan_filterelementConfiguration_storeinrxBuffer;g_mcmcan.canfilter.elementConfiguration
= ifxcan_filterelementConfiguration_storeinrxfifo0;g_mcmcan.canfilter.type=ifxcan_filterType_range;

g_mcmcan.canfilter.id1 = 0x100;g_mcmcan.canfilter.id2 = 0x116;g_mcmcan.canfilter.canfilter.rxBufferOffset

= ifxcan_rxBufferid_0;

ifxcan_can_setStandardFilter(g_mcmcan.candstNode,g_mcmcan.canfilter);&&


ifxcpu_restoreIntertrupts (iState);}

//投票方法
void readcanMessage (void) {


g_mcmcan.rxmsg.readfromrxfifo0 = 真的;


ifxcan_can_readMessage (g_mcmcan.candstNode,g_mcmcan.rxmsg,&& &g_mcmcan.rxdata [0]);
printf (r " xmsg.msgid:\ n,g_mcmcan.rxmsg.msageID);"
printf (r " xmsg.data:\ n,g_mcmcan.rxData " [0]);

}

在此先谢谢!

 

 

0 点赞