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.

[参考译文] TMS320F280021:具有 Code Composer Studio 的 C2000编译器

Guru**** 2535750 points
Other Parts Discussed in Thread: TMS320F280021, C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1124351/tms320f280021-c2000-compiler-with-code-composer-studio

器件型号:TMS320F280021
主题中讨论的其他器件: C2000WARE

帮助我分配 TMS320F280021的内存

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    您能提供更多详细信息吗?  很难用您提供的当前详细信息来回答您的查询。  

    您可以参考数据表来了解存储器映射。

    此致

    Siddharth

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我正在使用 TMS320F280021进行编程。  现在、在刷写代码时遇到一些问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    您能否描述闪烁代码时看到的错误?

    此致

    Siddharth

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    没有错误、但我确实获得了任何输出(如果它与 RAM 一起工作、则会有输出。) 开发的程序用于切换 PIN (GPIO033)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    您可以参阅用于 F28002x 器件的 C2000Ware 中提供的示例,这些示例位于文件夹 C:\ti\c2000Ware_4_01_00_00\driverlib\f28002x\examples\gpio 中

    此致

    Siddharth

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已经检查了内容

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    您能告诉我们您在编译代码后执行的步骤吗? 您是否能够将代码加载到代码中?

    此致

    Siddharth  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    //########################################################################################################################
    //
    //文件:device.c
    //
    //标题:示例的器件设置。
    //
    //########################################################################################################################
    //
    //
    //版权所有:
    //版权所有(C) 2022德州仪器(TI)公司- http://www.ti.com/
    //
    //以源代码和二进制形式重新分发和使用,有无
    //如果满足以下条件,则允许进行修改
    //满足:
    //
    //重新分发源代码必须保留上述版权
    //注意、此条件列表和以下免责声明。
    //
    //二进制形式的重新分发必须复制上述版权
    //注意、中的条件列表和以下免责声明
    //随提供的文档和/或其他材料
    //分布。
    //
    //德州仪器公司的名称和的名称都不是
    //其贡献者可用于认可或推广衍生产品
    //未经特定的事先书面许可,从该软件下载。
    //
    //本软件由版权所有者和作者提供
    //“原样”以及任何明示或暗示的保证,包括但不包括
    //限于对适销性和适用性的暗示保证
    //一个特定的目的是免责的。 在任何情况下、版权均不得
    //所有者或贡献者应对任何直接、间接、偶然、
    //特殊、典型或必然的损害(包括但不包括)
    //仅限于采购替代货物或服务;
    //数据或利润;或业务中断)
    //责任理论,无论是合同责任、严格责任还是侵权行为
    //(包括疏忽或其他)以任何方式因使用而产生
    //此软件,即使已被告知可能会发生此类损坏。
    //$
    //########################################################################################################################

    //
    //包含的文件
    //
    #include "device.h"
    #include "driverlib.h"
    #ifdef __cplusplus
    使用 std::memcpy;
    #endif

    //
    //
    //函数来初始化器件。 主要将系统控制初始化为
    //通过禁用看门狗、设置 SYSCLKOUT 频率、
    和启用外设的时钟。
    //
    //注意:如果 XTAL 用作 PLL 源,建议调用
    //配置 PLL 之前的 Device_verifyXTAL ()
    //
    //
    void Device_init (void)

    //
    //禁用看门狗
    //
    sysctl_disableWatchdog();

    //#ifdef _flash
    //
    //将时间关键代码和闪存设置代码复制到 RAM。 这包括
    //以下函数:InitFlash();
    //InitFlash();
    // RamfuncsLoadStart、RamfuncsLoadSize 和 RamfuncsRunStart 符号
    //由链接器创建。 请参阅器件.cmd 文件。
    //
    memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);

    //
    //调用闪存初始化以设置闪存等待状态。 此函数必须执行的操作
    //驻留在 RAM 中。
    //
    Flash_initModule (FLASH0CTRL_base、FLASH0ECC_BASE、DEVICE_FLASH_WAITSTATES);
    //#endif

    //
    //设置 PLL 控制和时钟分频器
    //
    SYSCTL_setclock (device_setClock_CFG);

    //
    //确保将 LSPCLK 分频器设置为默认值(4分频)
    //
    SYSCTL_setLowSpeedClock (SYSCTL_LSPCLK_PRESALE_4);

    //
    //这些断言将检查中针对时钟速率的#defines
    // device.h 与已配置的实际速率匹配。 如果有的话
    //不匹配,请检查 DEVICE_SYSCLK_FREQ 和的计算结果
    // DEVICE_LSPCLK_FREQ 是精确的。 一些示例不会执行为
    //如果这些不正确则为预期值。
    //
    assert (SYSCTL_getClock (DEVICE_OSCSRC_FREQ)== DEVICE_SYSCLK_FREQ);
    assert (SYSCTL_getLowSpeedClock (DEVICE_OSCSRC_FREQ)== DEVICE_LSPCLK_FREQ);

    //#ifndef _FLASH
    //
    //使用调试器运行时调用 Device_cal 函数
    //此函数作为引导代码的一部分调用。 函数被调用
    //在 Device_init 函数中、由于在调试期间会重置启动代码
    //将不会执行,GEL 脚本将重新初始化所有
    //寄存器和校准值将丢失。
    // SYSCTL_deviceCal 是 Device_Cal 的包装程序函数
    //
    //sysctl_deviceCal ();
    //#endif

    //
    //打开所有外设
    //
    device_enableAllPeripheral();

    //
    //锁定 VREGCTL 寄存器
    //该器件不支持寄存器 VREGCTL。 它锁定到
    //禁止对该寄存器进行任何写操作
    //
    ASysCtl_lockVREG ();

    //
    //
    //函数打开所有外设、支持对进行读取和写入
    //外设的寄存器。
    //
    //请注意,要降低功耗,应禁用未使用的外设。
    //
    //
    void Device_enableAllPeripherals (空)

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_DMA);
    SYSCTL_enablePeripheral (SYSCTL_PERIPH_CLK_TIMER0);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_Timer1);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_TIMER2);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_CPUBGCRC);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_HRCAL);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_ERAD);

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_EPWM1);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_EPWM2);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_EPWM3);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_EPWM4);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_EPWM5);
    SYSCTL_enablePeripheral (SYSCTL_PERIPH_CLK_EPWM6);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_EPWM7);

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_ECAP1);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_ECAP2);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_ECAP3);

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_EQEP1);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_EQEP2);

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_SCIA);

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_SPIA);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_SPIB);

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_I2CA);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_I2CB);

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_CANA);

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_ADCA);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_ADCC);

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_CMPSS1);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_CMPSS2);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_CMPSS3);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_CMPSS4);

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_FSITXA);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_FSIRXA);

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_Lina);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_LINB);

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_PMBUSA);

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_DCC0);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_DCC1);

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_CLB1);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_CLB2);

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_HICA);

    //
    //
    //功能可禁用 GPIO 上的引脚锁定和启用上拉。
    //
    //
    void Device_initGPIO (void)

    //
    //禁用引脚锁定。
    //
    GPIO_unlockPortConfig (GPIO_PORT_A、0xFFFFFFFF);
    GPIO_unlockPortConfig (GPIO_PORT_B、0xFFFFFFFF);
    GPIO_unlockPortConfig (GPIO_PORT_H、0xFFFFFFFF);

    //
    //
    //函数来验证 XTAL 频率
    // freq 是以 MHz 为单位的 XTAL 频率
    //如果实际的 XTAL 频率与匹配,该函数返回 true
    //输入值
    //
    //请注意、此函数假定 PLL 尚未配置和
    //因此使用 SYSCLK freq = 10MHz 来计算 DCC
    //
    //
    bool Device_verifyXTAL (float freq)

    //
    //使用 DCC 以 INTOSC2作为参考时钟来验证 XTAL 频率
    //

    //
    //打开 XTAL 并等待它使用 X1CNT 加电
    //
    SYSCTL_TurnOnOsc (SYSCTL_OSCSRC_XTAL);
    SYSCTL_clearExternalOscCounterValue();
    while (sysctl_getExternalOscCounterValue ()!= sysctl_X1CNT_X1CNT_M);

    //
    //启用 DCC0时钟
    //
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_DCC0);

    //
    //启用外设时钟后插入至少5个周期的延迟
    //
    asm (" RPT #5 || NOP");

    //
    //将 XTAL 配置为 CLKSRC0、将 INTOSC2配置为 CLKSRC1
    // Fclk0 = XTAL 频率(输入参数)
    // Fclk1 = INTOSC2频率= 10MHz
    //
    //将 DCC 误差容差配置为+/-1%
    // INTOSC2的频率变化可以为+/-10%
    //
    //假设 PLL 尚未配置,SYSCLK 频率= 10MHz
    //
    //注意:根据需要更新容差和 INTOSC2频率差异。
    //
    返回(DCC_verifyClockFrequency (DCC0_BASE、
    DCC_COUNT1SRC_INTOSC2、10.0F、
    DCC_COUNT0SRC_XTAL、FREQ、
    1.0F、10.0F、10.0F);

    //
    //
    //违反断言时要调用的错误处理函数
    //
    //
    void __error__(const char *文件名、uint32_t 行)

    //
    //断言条件被计算为 false。 您可以使用文件名和
    //行参数来确定出现了什么问题。
    //
    ESTOP0;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    看起来您使用的链接器命令文件不正确。 您是否正在尝试从 RAM 或闪存运行代码?

    如果是 RAM、则使用"28002x_general_ram_lnk"链接器命令文件。

    如果是闪存、则使用"28002x_general_flash_lnk"链接器命令文件。

    此致

    Siddharth