This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F280049C: 程序移植

Part Number: TMS320F280049C
Other Parts Discussed in Thread: LAUNCHXL-F280049C

您好想问一下:28377S中的发送程序移植到280049C中都需要底层修改什么?

为什么我移植到280049不能用呢?

希望您测试一下然后给出您都修改了哪些参数?

  • 28377S中的发送程序移植到280049C中都需要底层修改什么?

    理论上两者的CAN是相同的,您可以直接将例程在280049上使用。但是您需要根据板子原理图来修改CAN引脚

    为什么我移植到280049不能用呢?

    具体表现是什么呢?能否详细说一下?

  • 我的can引脚修改了,在28377S上收发都正常。当然是采用了收发2个程序和USBCAN ,但是现在移植到到280049上和USBCAN就连接不通了,具体表现就是停留在 while(((HWREGH(CANA_BASE + CAN_O_ES) & CAN_ES_TXOK)) !=  CAN_ES_TXOK)不动作了。难道是我的个屁噢修改的不对?

  • 这个是280049的硬件贴图,我的gpio是按照硬件上修改的啊?

  • 但是现在移植到到280049上和USBCAN就连接不通了

    280049的CAN引脚是否有修改?您使用的是开发板?哪个版本?

    测试例程是哪一个呢?

  • 这个是280049的硬件贴图,我的gpio是按照硬件上修改的啊?

    是的,您需要按照原理图来修改

  • 您是否有进行如下设置

  • 你好:

    1、开发板是LAUNCHXL-F280049C,程序是由28377S中移植到280049中的。

    2、280049的CAN引脚是已经修改,并按照开发板硬件原理图修改的。

    3、程序是由28377S的can_ex4_simple_transmit移植到280049的。现在的状态是停在了while(((HWREGH(CANA_BASE + CAN_O_ES) & CAN_ES_TXOK)) !=  CAN_ES_TXOK)这一句。

  • 这个也设置了,但是没有用。

  • 谢谢反馈,那请您附上您的工程,我们测试一下

    另外请确认下您的USB-CAN连接是正确的

  • #include "Main_Control.h"
    #include "TI_CLA_TASK.h"
    #include "device.h"
    #include "can.h"
    #include "sysctl.h"
    #include "gpio.h"
    //#include "f28004x_gpio.h"s

    //CAN变量移植

    #define MSG_DATA_LENGTH 4
    volatile unsigned long msgCount = 0;
    // Main

    uint16_t temp_txMsgData[2],temp_rxMsgData[2];
    uint16_t txMsgData[4], rxMsgData[4];

    //void initCLA( void );
    //变量定义

    Uint32 Task_Mode = 0;
    Uint32 Load_Dram_Num=0;
    Uint32 Fram_Check_Cnt=0;
    Uint32 Fram_Check_Result=0;

    //从28037xd复制的宏定义
    #define TXCOUNT 100000
    #define MSG_DATA_LENGTH 8
    #define TX_MSG_OBJ_ID 1


    //50hz-60hz 程序兼容添加 / 数据中转 /修改 hz 后断电生效
    float DETECT_N_ADD =0;
    float DETECT_N_INV_ADD =0;

    float DETECT_N2_ADD =0;
    float DETECT_N2_INV_ADD =0;

    float DETECT_N4_ADD =0;
    float DETECT_N4_INV_ADD =0;

    float DETECT_N8_ADD =0;
    float DETECT_N8_INV_ADD =0;

    //函数部分
    //Uint16 buffer[500]={0};
    float buffer_f[624]={0};
    Uint16 num=0,num1=0;

    void main(void)
    {

    static int16 Temp1= 0,Temp2=0;

    InitSysCtrl(); //初始化系统时钟
    InitPieCtrl(); //初始化PIE,clear PIE
    InitGpio(); //初始化GPIO

    GPIO_SetupPinMux(DEVICE_GPIO_PIN_LED1, GPIO_MUX_CPU1, 0);
    GPIO_SetupPinOptions(DEVICE_GPIO_PIN_LED1, GPIO_OUTPUT, GPIO_PUSHPULL);

    SCI_INIT(); //SCI 初始化配置
    //initCLA();
    IER = 0x0000; //CPU级中断失能
    IFR = 0x0000; //清除CPU级中断标志
    InitPieVectTable(); //初始化向量表

    DINT; //关闭中断
    PieCtrlRegs.PIECTRL.bit.ENPIE = 1; //Enable the PIE
    PieCtrlRegs.PIEACK.all = 0xFFFF;
    EALLOW;
    PieVectTable.EPWM1_INT = &EPWM1_ISR; //Write the ISR vector
    EDIS;
    PieCtrlRegs.PIEIER3.bit.INTx1 = 1; //PIEIERx bit
    IER |= M_INT3; //Set the CPU IER @group 3

    GPIO_setPinConfig(DEVICE_GPIO_CFG_CANRXA);
    GPIO_setPinConfig(DEVICE_GPIO_CFG_CANTXA);
    //GPIO_setPinConfig(DEVICE_GPIO_CFG_CANRXB);
    //GPIO_setPinConfig(DEVICE_GPIO_CFG_CANTXB);

    CAN_initModule(CANA_BASE);
    CAN_setBitRate(CANA_BASE, DEVICE_SYSCLK_FREQ, 500000, 16);
    /*
    InitCpuTimers();
    // 15.6K → 64
    ConfigCpuTimer(&CpuTimer1, 100, 150);
    CpuTimer1Regs.TCR.all = 0x4000;
    */
    EPWM_INIT_GPIO();
    EPWM_INIT_func();
    PwmEnable();
    //InitSPI(); //需要确认
    //InitSPIB(); //需要确认

    Control_Init(); //控制参数初始化

    EINT; //Enable interrupts globally
    ERTM;
    //CAN_enableTestMode(CANA_BASE, CAN_TEST_EXL);

    //20210730从28037xd移植过来的发送程序

    CAN_setupMessageObject(CANA_BASE, TX_MSG_OBJ_ID, 0x18102701,
    CAN_MSG_FRAME_EXT, CAN_MSG_OBJ_TYPE_TX, 0,
    CAN_MSG_OBJ_NO_FLAGS, MSG_DATA_LENGTH);

    //
    // Initialize the transmit message object data buffer to be sent
    //
    txMsgData[0] = 0x01;
    txMsgData[1] = 0x23;
    txMsgData[2] = 0x45;
    txMsgData[3] = 0x67;
    //txMsgData[4] = 0x89;
    //txMsgData[5] = 0xAB;
    //txMsgData[6] = 0xCD;
    //txMsgData[7] = 0xEF;

    //
    // Start CAN module A operations
    //
    CAN_startModule(CANA_BASE);

    //
    // Transmit messages from CAN-A
    //
    while(1)
    {
    CAN_sendMessage(CANA_BASE, TX_MSG_OBJ_ID, MSG_DATA_LENGTH, txMsgData);

    //
    // Poll TxOk bit in CAN_ES register to check completion of transmission
    //
    txMsgData[0] += 0x01;
    txMsgData[1] += 0x01;
    if(txMsgData[0] > 0xFF)
    {
    txMsgData[0] = 0;
    }
    if(txMsgData[1] > 0xFF)
    {
    txMsgData[1] = 0;
    }

    while(((HWREGH(CANA_BASE + CAN_O_ES) & CAN_ES_TXOK)) != CAN_ES_TXOK)
    {

    }
    }
    //
    // Stop application
    //
    asm(" ESTOP0");
    }

    GPIO我修改了成32、33,然后我自己也看一下是什么问题。非常感谢您的帮助!

  • 你好不知道您的程序测试的怎么样了?

  • 我手边的USB-CAN不太好用,我还在继续测试

  • 建议您将CAN功能单独拿出来进行测试

  • 你好我是单独测试can功能的其他的只是存放在里面,

    现在找到的问题就是卡在这里 while(((HWREGH(CANA_BASE + CAN_O_ES) & CAN_ES_TXOK)) != CAN_ES_TXOK)
    {
    }

    can_ctl 的SIE没有使能,不知道28377S是怎么弄的是不是也没有使能。

  • 现在找到的问题就是卡在这里 while(((HWREGH(CANA_BASE + CAN_O_ES) & CAN_ES_TXOK)) != CAN_ES_TXOK)

    就是说明发送没有成功,CAN_ES_TXOK不置位

  • 您好:你这个有什么用呢?现在是程序跑不通不是接口跑不通。能说一下程序的原因么,不知道您测试了没?测试结果怎么样?

  • 这个问题已经卡了1周左右的时间了,这样也不是办法。麻烦您能不能想办法帮忙就解决掉。

  • 能不能麻烦您如果您没有USBCAN ,您可以用2块卡发版测试一下么?我只是想知道您的280049是不是好用的?