TMS320F280039系列文章目录

第一章 新建工程



前言

本文章采用CCS12.1.0(CCS软件版本)及C2000Ware_4_01(SDK-设计资源)进行TMS320F280039(DSP芯片)系列学习

  • 萌新入坑,如有不对的地方请大佬多多指教,谢谢!->欢迎评论区留言
  • 对于萌新来说,学习无非就是多看博文,但是…0.0大佬们的思维大多都有些跳跃,真的很难理解(当然大佬们估计都是为了记录或者提醒自己的工作及学习例程),所以想通过慢慢学习,把每一步都解释出来(保姆版)

第一章 新建工程

1.工程准备及设置

1.1 准备环境(下载CCS软件及相关SDK)

1.2 打开CCS软件:选择工作空间

DSP新建工程:选择工作空间

  • 选择工作空间后打开相关文件,如图 DSP新建工程:选择工作空间后打开相关文件

1.3 新建工程文件(空文件)

  • 第一步:选择新建CCS项目
    DSP新建工程:第一步选择新建CCS项目
  • 第二步:配置相关设置
    DSP新建工程:第二步配置相关设置
  • 第三步:确认ProjectName_Demo(空文件夹)新建完成,文件目录在(1.1中打开CCS工程时选择的那个路径,因为1.2中选择的是默认路径)
    DSP新建工程:第三步确认ProjectName_Demo(空文件夹)新建完成1
    DSP新建工程:第三步确认ProjectName_Demo(空文件夹)新建完成2

2.工程所需文件移植(从SDK文件向工程文件移植)

  • 第一步:移植driverlib文件(DSK文件中)C:\ti\c2000\C2000Ware_MotorControl_SDK_4_01_00_00\c2000ware\driverlib\f28003x\driverlib
    DSP新建工程:第一步移植driverlib文件
  • 第一步移植结果确认(工程文件中)
    DSP新建工程:第一步移植driverlib文件确认
  • 第二步:移植common和headers文件(DSK文件中)
    DSP新建工程:第二步移植common和headers文件
  • 第二步移植结果确认(工程文件中)
    DSP新建工程:第二步移植common和headers文件确认
  • 第三步:工程文件中新建library文件,并从SDK文件中选择需要移植的lib文件
根据自己的需要从DSK安装目录下的c2000ware\libraries中选择
C:\ti\c2000\C2000Ware_MotorControl_SDK_4_01_00_00\c2000ware\libraries

DSP新建工程:第三步:从SDK文件中选择需要移植的lib文件1

我后续需要用到IQmath,所以我是从
C:\ti\c2000\C2000Ware_MotorControl_SDK_4_01_00_00\c2000ware\libraries\math\IQmath\c28\lib中选择

DSP新建工程:第三步:从SDK文件中选择需要移植的lib文件2

  • 第三步移植结果确认(工程文件中)
    DSP新建工程:第三步:从SDK文件中选择需要移植的lib文件确认
  • 第四步:编译一下工程,准备删除部分文件(工程文件中)
在工程文件目录中删除以下文件(我这里是觉得用CCS中的工程展示比较方便)
删除common文件中cmd文件下除了红圈的cmd文件
删除common文件中的targetConfigs文件

DSP新建工程:第四步编译一下工程,准备删除/屏蔽部分文件

  • 第四步删除结果确认(工程文件中)
    DSP新建工程:第四步编译一下工程,准备删除/屏蔽部分文件确认

3.工程设置及部分文件屏蔽

3.1 工程设置

  • 依次添加路径索引(采用工作空间(相对)路径,也可Browse设置绝对路径)
E:\ProjectName_TMS320F280039_Demo\ProjectName_Demo\common\include
E:\ProjectName_TMS320F280039_Demo\ProjectName_Demo\headers\include
E:\ProjectName_TMS320F280039_Demo\ProjectName_Demo\driverlib

DSP新建工程:依次添加路径索引

  • 路径索引确认
    DSP新建工程:依次添加路径索引确认

3.2 文件屏蔽

  • 第一步:屏蔽重复的cmd及lib文件
屏蔽ram_Ink.cmd文件:正常项目都需要板子重新上电仍可以运行程序,所以需要将程序保存到ROM中,故使用flash_Ink.cmd
屏蔽eabi.lib文件:新建工程时采用的是COFF格式,故使用coff.lib,屏蔽eabi.lib(ELF输出格式时才采用这个lib)

DSP新建工程:第一步屏蔽重复的cmd及lib文件

  • 第二步:屏蔽输出格式为ELF(包含driverlib.lib)的文件
E:\ProjectName_TMS320F280039_Demo\ProjectName_Demo\driverlib\ccs

DSP新建工程:第二步屏蔽输出格式为ELF(包含driverlib.lib)的文件

4.工程编译及仿真运行测试(新建工程完成,但是达不到应用要求)

4.1 工程编译正确

DSP新建工程:工程编译正确

4.2 工程仿真运行正常

DSP新建工程:工程仿真正确

5.main函数修改及工程设置

5.1 main函数修改

  • main函数中的App_xxx只是举个例子,替换成自己的相关初始化函数及逻辑函数即可

//#############################################################################
//
// FILE:   main.c
//
// TITLE:  ProjectName Demo Example
//
//! \addtogroup bitfield_example_list
//! <h1> ProjectName Demo </h1>
//!
//! This example configures Temple Demo for other Project.
//!
//! \b External \b Connections \n
//!  - None.
//!
//! \b Watch \b Variables \n
//!  - None.
//!
//
//#############################################################################
//
// $Copyright:
// Copyright (C) 2022 Texas Instruments Incorporated - http://www.ti.com/
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
//   Redistributions of source code must retain the above copyright
//   notice, this list of conditions and the following disclaimer.
//
//   Redistributions in binary form must reproduce the above copyright
//   notice, this list of conditions and the following disclaimer in the
//   documentation and/or other materials provided with the
//   distribution.
//
//   Neither the name of Texas Instruments Incorporated nor the names of
//   its contributors may be used to endorse or promote products derived
//   from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// $
//#############################################################################



//
// Included Files
//
#include "F28x_project.h"
#include "device.h"

//
// Function
//
void AppGpioInit(void);
void AppInit(void);
void AppDeal(void);

/**
 * main.c
 */
int main(void)
{
    //
    // Initialize device clock and peripherals.
    //
    InitSysCtrl();

    //
    // Initialize GPIO and configure the GPIO pin as a Output or Input mode.
    //
    InitGpio();

    AppGpioInit(); // AppGpioInit

    //
    // Disable CPU interrupts.
    //
    DINT;

    //
    // Initialize the PIE control registers to their default state.
    // The default state is all PIE interrupts disabled and flags are cleared.
    //
    InitPieCtrl();

    //
    // Disable CPU interrupts and clear all CPU interrupt flags.
    //
    IER = 0x0000;
    IFR = 0x0000;

    //
    // Initialize the PIE vector table with pointers to the shell Interrupt Service Routines (ISR).
    //
    InitPieVectTable();

    AppInit(); // AppInit
    
    //
    // Enable global Interrupts (INTM) and higher priority real-time debug events (DBGM).
    //
    EINT;
    ERTM;

    //
    // IDLE loop. Just sit and loop forever (optional).
    //
    while(1)
    {
        AppDeal();
    }
}

void AppGpioInit(void)
{
	// AppGpioInit
}

void AppInit(void)
{
	// AppInit
}

void AppDeal(void)
{
	// AppDeal
}

//
// End of File
//

5.2 工程设置(修改main函数后编译正确,但是仿真运行时会异常,需要进行以下修改)

  • 第一步:增加_FLASH宏定义
    DSP新建工程:增加_FLASH宏定义
  • 第二步:修改cmd文件
    DSP新建工程:修改cmd文件
  • 第三步:修改main函数中的InitSysCtrl函数(初始化设备时钟和外围设备)
    DSP新建工程:第三步修改main函数中的InitSysCtrl函数(初始化设备时钟和外围设备)
// 我这里采用的是30M的外部晶振,因为280039的时钟需要配置为120MHz,故进行如下设置
// PLLSYSCLK = (30MHz) * (IMULT_32) /(REFDIV_2) * (ODIV_4) * (PLLCLK_BY_1) = 120MHz
InitSysPll(XTAL_OSC_SE, IMULT_32, REFDIV_2, ODIV_4, PLLCLK_BY_1, SYSCTL_DCC_BASE0);

5.3 修改main函数后仿真正常运行(已经具备基本工程应用水准,将App_xxx改为自己的初始化及逻辑程序即可)

DSP新建工程:修改main函数后仿真正常运行

6.关于工程设置优化

6.1 堆栈设置为0x300(仅针对TMS320F280039)

  • 280049及其他芯片貌似还是0x200,具体不明,忘记在哪个大佬的博文中看到过(280049移植到280039程序?)
    DSP新建工程:堆栈设置为0x300(仅针对TMS320F280039)

6.2 打开生成Hex文件设置

  • 第一步:打开生成Hex的设置
    DSP新建工程:打开生成Hex文件的设置
  • 第二步:修改相关设置
    DSP新建工程:修改相关设置1
    DSP新建工程:修改相关设置2
  • 生成的Hex文件确认
    DSP新建工程:生成的Hex文件确认1
    DSP新建工程:生成的Hex文件确认2

6.3 生成Bin文件设置

DSP新建工程:生成Bin文件设置

在工程设置Build->Steps->Post-build steps中添加以下代码
"${CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin" "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" "${CG_TOOL_ROOT}/bin/ofd2000" "${CG_TOOL_ROOT}/bin/hex2000" "${CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin" & "${CG_TOOL_HEX}" -i "${BuildArtifactFileName}" -o "${BuildArtifactFileBaseName}.hex" -order MS -romwidth 32 & "${CG_TOOL_HEX}" --ti_txt "${BuildArtifactFileName}" -o "${BuildArtifactFileBaseName}.txt" -order MS -romwidth 32
  • 生成的Bin文件确认
    DSP新建工程:生成的Hex文件确认1
    DSP新建工程:生成的Hex文件确认2

7.新建工程展示

  • 下载后直接从CCS找到相关目录打开即可(比如我的目录是E:\ProjectName_TMS320F280039_Demo):TMS320F280039新建工程

总结

本章为TMS320F280039学习系列文章 第一章:新建工程

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐