公告

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

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

cross mob

TC275 can中断程序

TC275 can中断程序

好先生
Level 1
Level 1
10 replies posted 5 replies posted 5 questions asked

请问各位老师,
下面的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);

}


0 点赞
2316 次查看
2 评论