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.

如何添加eCan模块的库函数文件到TMS320F28069F的电机控制程序中。

Other Parts Discussed in Thread: CONTROLSUITE, MOTORWARE

想在FAST例程中添加can通讯。。找不到eCan模块的库函数文件。只能找到controlsuite中的寄存器文件。

  • 在motorware的以下目录有ECAN的寄存器定义和一些内联库函数C:\TI\motorware\motorware_1_01_00_16\sw\drivers\can\src\32b\f28x\f2806x

  • 该目录下只有can.h头文件,假如使用controlsuit中的历程,不同的编程风格是否支持。

  • 如果你看一下ControlSuit和Motorware里的can.h,会发现两边是一样的,Motorware只是照抄了ControlSuit而已,你直接参照ControlSuit的例程写一个can.c就好了。

  • 我使用controlduite中的can历程,

    C:\ti\controlSUITE\device_support\f2806x\v150\F2806x_examples_ccsv5\ecan_back2back

    在f2806x_ECan.c作如下修改:满足 90 MHz SYSCLKOUT,45 MHz CAN module clock Bit rate = 500 kbps

    /* The following block is for 90 MHz SYSCLKOUT. (45 MHz CAN module clock Bit rate = 500 kbps
    See Note at end of file. */

    ECanaShadow.CANBTC.bit.BRPREG = 4;//45M/5/(13+2+3)=500k
    ECanaShadow.CANBTC.bit.TSEG2REG = 2;
    ECanaShadow.CANBTC.bit.TSEG1REG = 13;

    运行程序,死在

    for(;;)
    {

    ECanaRegs.CANTRS.all = 0x0000FFFF; // Set TRS for all transmit mailboxes
    while(ECanaRegs.CANTA.all != 0x0000FFFF ) {} // Wait for all TAn bits to be set..//程序死在这里
    ECanaRegs.CANTA.all = 0x0000FFFF; // Clear all TAn
    MessageReceivedCount++;

    这是什么原因,历程有问题吗?谢谢~

  • 你把CANBTC改到适应90Mhz,那实际上你的SYSCLK那一段代码也改了么? 你动过这个函数了么 InitSysCtrl();

  • 谢谢你的回答。是的,我在改了。10M*18/2 = 90M.

    只改了这两个位置。

    打开USB转CAN,程序运行没有数据刷新。

    不知道问题出在哪里

  • 您好,不好意思打扰了。最近我也在做往motorware的程序中添加CAN通信的内容,也遇到了相同的问题,不知道您当时是怎么解决的?

    我将controlsuite中CAN通信例程中关于ECan模块的寄存器初始化、设置、位域结构定义文件(F2806x_GlobalVariableDefs.c,只保留CAN的部分), 寄存器内存分配的cmd文件(F2806x_Headers_nonBIOS.cmd,只保留Can的部分)都添加到lab20中,GIPO设置使用的是原来motorware中的hal.c文件。测试通信时也程序也是卡在确认发送成功这一部分。改成自测试模式后也是卡在发送确认部分。感觉是设置的寄存器值并没有生效。但又不知道是什么原因。

    请问您当时是怎么解决的呢?谢谢了!

  • 我想用28027 外加一个can模块,有参考吗?