请问各位老师,
下面的mutican中断接收,单独运行可以,加到总体的程序里发一帧数据就卡住了,请问是什么原因呢?
总体数据中,can是发送是定时发送,还有一些PWM的中断,是中断冲突呢还是需要清除中断标志位呢?还是其他什么原因?找了一天也没发现。郁闷中。。。。
/*
* DemoApp.c
*/
//#include "PortIoIfxPort_Io.h"
#include "StmStdIfxStm.h"
#include "MulticanCanIfxMultican_Can.h"
//#include "_RegIfxQspi_reg.h"
#include "_PinMapIfxMultican_PinMap.h"
#define IFX_INTPRIO_CAN0_RX 2
// CAN handle
IfxMultican_Can can;
// Two Nodes (for external loopback demo)
IfxMultican_Can_Node canSrcNode;
IfxMultican_Can_Node canDstNode;
// Two Message objects (for external loopback demo)
IfxMultican_Can_MsgObj canSrcMsgObj;
IfxMultican_Can_MsgObj canDstMsgObj;
// Configure message object
IfxMultican_Can_MsgObjConfig canMsgObjConfig;
// Define a CAN message
IfxMultican_Message msg;
const unsigned Transimit_id = 0x100 ;
const unsigned Receive_id = 0x91 ;
IFX_INTERRUPT(Can0RxISR, 0, IFX_INTPRIO_CAN0_RX )
{
// read message
IfxMultican_Can_MsgObj_readMessage(&canDstMsgObj, &msg);
IfxPort_togglePin(&MODULE_P10, 1);
}
void MultiCAN_Demo_init(void)
{
// create configuration
IfxMultican_Can_Config canConfig;
IfxMultican_Can_initModuleConfig(&canConfig, &MODULE_CAN);
// initialize module
//IfxMultican_Can can; // defined globally
canConfig.nodePointer[0].priority = IFX_INTPRIO_CAN0_RX;
canConfig.nodePointer[0].typeOfService = IfxSrc_Tos_cpu0;
IfxMultican_Can_initModule(&can, &canConfig);
// create CAN node config
IfxMultican_Can_NodeConfig canNodeConfig;
IfxMultican_Can_Node_initConfig(&canNodeConfig, &can);
canNodeConfig.baudrate = 500000; // 500 kBaud
// Source Node
// IfxMultican_Can_Node canSrcNode; // defined globally
{
canNodeConfig.nodeId = IfxMultican_NodeId_2;//IfxMultican_NodeId_0;
canNodeConfig.rxPin = &IfxMultican_RXD2B_P02_3_IN;//IfxMultican_RXD0A_P02_1_IN;
canNodeConfig.rxPinMode = IfxPort_InputMode_pullUp;
canNodeConfig.txPin = &IfxMultican_TXD2_P02_2_OUT;//IfxMultican_TXD0_P02_0_OUT;
canNodeConfig.txPinMode = IfxPort_OutputMode_pushPull;
// initialise the node
IfxMultican_Can_Node_init(&canSrcNode, &canNodeConfig);
}
#if 0
// Destination Node
// IfxMultican_Can_Node canDstNode; // defined globally
{
canNodeConfig.nodeId = IfxMultican_NodeId_1;
canNodeConfig.rxPin = &IfxMultican_RXD1B_P14_1_IN;
canNodeConfig.rxPinMode = IfxPort_InputMode_pullUp;
canNodeConfig.txPin = &IfxMultican_TXD1_P14_0_OUT;
canNodeConfig.txPinMode = IfxPort_OutputMode_pushPull;
// initialise the node
IfxMultican_Can_Node_init(&canDstNode, &canNodeConfig);
}
#endif
// IfxMultican_Can_MsgObj canSrcMsgObj; // defined globally
{
// create message object config
//IfxMultican_Can_MsgObjConfig canMsgObjConfig;
IfxMultican_Can_MsgObj_initConfig(&canMsgObjConfig, &canSrcNode);
// assigned message object:
canMsgObjConfig.msgObjId = 0;
canMsgObjConfig.messageId = Transimit_id;
canMsgObjConfig.acceptanceMask = 0x7FFFFFFFUL;
canMsgObjConfig.frame = IfxMultican_Frame_transmit;
canMsgObjConfig.control.messageLen = IfxMultican_DataLengthCode_8;
canMsgObjConfig.control.extendedFrame = FALSE;
canMsgObjConfig.control.matchingId = TRUE;
// initialize message object
IfxMultican_Can_MsgObj_init(&canSrcMsgObj, &canMsgObjConfig);
}
// IfxMultican_Can_MsgObj canDstMsgObj; // defined globally
{
// create message object config
//IfxMultican_Can_MsgObjConfig canMsgObjConfig;
IfxMultican_Can_MsgObj_initConfig(&canMsgObjConfig, &canSrcNode);
// assigned message object:
canMsgObjConfig.msgObjId = 1;
canMsgObjConfig.messageId = Receive_id;
canMsgObjConfig.acceptanceMask = 0x7FFFFFFFUL;
canMsgObjConfig.frame = IfxMultican_Frame_receive;
canMsgObjConfig.control.messageLen = IfxMultican_DataLengthCode_8;
canMsgObjConfig.control.extendedFrame = FALSE;
canMsgObjConfig.control.matchingId = TRUE;
canMsgObjConfig.rxInterrupt.enabled = TRUE;
canMsgObjConfig.rxInterrupt.srcId = IfxMultican_SrcId_0;
// initialize message object
IfxMultican_Can_MsgObj_init(&canDstMsgObj, &canMsgObjConfig);
}
}
void MultiCAN_Demo(void)
{
const unsigned dataLow = 0x12345678;
const unsigned dataHigh = 0x9abcdef0;
// Initialise the message strcture
IfxMultican_Message msg;
IfxMultican_Message_init(&msg, Transimit_id, dataLow, dataHigh, IfxMultican_DataLengthCode_8);
// Transmit Data
while( IfxMultican_Can_MsgObj_sendMessage(&canSrcMsgObj, &msg) == IfxMultican_Status_notSentBusy );
IfxStm_waitTicks(&MODULE_STM0, 10000000);
}
只有注册用户才能在此添加评论。 如果您已经注册,请登录。 如果您还没有注册,请注册并登录。