TI DSP TMS320F280025 Note1:工程模板Template创建

ops/2024/9/25 8:33:51/

TMS320F280025工程模板Template创建


文章目录

  • TMS320F280025工程模板Template创建
  • 新建一个ccs工程
  • 为需要添加的一些文件新建文件夹
  • 从c2000中拷贝官方基础文件到工程中
    • cmd链接文件
    • common头文件和源文件
    • headers头文件和源文件
    • 库函数文件
    • 添加driverlib.lib文件
  • 添加文件的路径
  • 文件移动、删除、屏蔽
    • 把创建工程生成的main.c文件移动到User目录下
    • 删除新建工程自动生成的RAM_lnk.cmd文件
    • 屏蔽掉bios.cmd和ram.cmd文件,bios和nobios、ram和flash都只能存在一个,屏蔽掉不需要的
    • 删除、屏蔽后即可编译成功了
  • 添加_FLASH宏定义符号
  • 例子:点个灯
    • SystemDriver.c
    • SystemDriver.h
    • GpioDriver.c
    • GpioDriver.h
    • main.c
    • main.h
    • 现象


软件版本:CCS12.0.0.00009
官方C200开发工具:C2000Ware_5_02_00_00
硬件平台:LAUNCHXL-F280025C开发板

该方法新建的工程支持寄存器开发,同时也支持库函数开发,新建后移动该工程也不需要重新修改路径,路径使用变量定义,使用方便、移植性能高

新建一个ccs工程

在这里插入图片描述
选择自己的芯片型号280025C,仿真器型号XDS110 USB,并给工程命名,命名只能是英文
在这里插入图片描述

编译一下新建的工程:
在这里插入图片描述

新建CCS工程后工程已经包含一些文件:
在这里插入图片描述

includes:工程包含的一些路径,如工程路径、头文件路径等
DEBUG:包含编译过程中生成的一些文件和结果文件
targetConfigs:调试器配置文件
280025_RAM_lnk.cmd:链接命令文件(.cmd文件)。它定义了内存布局和部分配置,来指导编译器和链接器如何在微控制器上安排代码和数据。文件分为两个主要部分:MEMORY和SECTIONS。一般不使用这个连接文件,后面会删除这个文件,使用官方提供的其他链接文件
main.c:主文件,主函数文件

为需要添加的一些文件新建文件夹

创建方法1:
点中工程->右键->新建->文件夹
在这里插入图片描述

选择路径(建在那个文件夹层级下)-> 填写文件名 ->完成
在这里插入图片描述

创建方法2:
直接找到工作目录下的这个工程文件,之间新建文件夹即可
在这里插入图片描述

创建后的文件层次:
在这里插入图片描述

ChipDevice:包含TI官方提供的的一些文件
ChipDevice/cmd:存放链接命令文件(.cmd文件)。它定义了内存布局和部分配置,来指导编译器和链接器如何在微控制器上安排代码和数据。
ChipDevice/common:存放官方common源文件和头文件
ChipDevice/driverlib:存放官方库函数相关的源文件和头文件
ChipDevice/headers:存放官方headers源文件和头文件
ChipDevice/lib:存放官方或第三方的库文件,比如:库函数库
Public:公共文件夹
User:存放用户自己编写的驱动代码

从c2000中拷贝官方基础文件到工程中

cmd链接文件

工程路径,cmd文件,按照自己工作目录修改

E:\ti\workspace\Template_demo\ChipDevice\cmd

C2000存放路径,按照存放目录修改

E:\ti\c2000\C2000Ware_5_02_00_00\device_support\f28002x\common\cmd
E:\ti\c2000\C2000Ware_5_02_00_00\device_support\f28002x\headers\cmd

common/cmd文件为FLASH/RAM相关的链接文件,flash表示下载代码到flash的链接文件、,ram表示下载代码到ram的链接文件
headers/cmd文件为是否带操作系统相关的链接文件,bois表示带操作系统、nobois表示不带操作系统
可以根据自己的需要拷贝相关链接文件
在这里插入图片描述

common头文件和源文件

直接把C2000中evice_support目录下该芯片的common目录下的include和source文件夹拷贝到该工程的common目录下
在这里插入图片描述

headers头文件和源文件

直接把C2000中device_support目录下该芯片的headers目录下的include和source文件夹拷贝到该工程的headers目录下
在这里插入图片描述

库函数文件

直接把C2000中的driverlib目录下该芯片的driverlib文件夹拷贝到该工程的headers目录下
在这里插入图片描述

把拷贝的driverlib文件夹下的css文件夹删掉
在这里插入图片描述

添加driverlib.lib文件

把\driverlib\f28002x\driverlib\ccs\Debug下的driverlib.lib文件拷贝到工程lib目录下
在这里插入图片描述

添加文件的路径

在这里插入图片描述

在这里插入图片描述

添加刚才拷贝的文件的路径

${PROJECT_ROOT}/ChipDevice/lib

在这里插入图片描述

${PROJECT_ROOT}/ChipDevice/headers

${PROJECT_ROOT}/ChipDevice/headers/source

${PROJECT_ROOT}/ChipDevice/headers/include

${PROJECT_ROOT}/ChipDevice/driverlib

${PROJECT_ROOT}/ChipDevice/driverlib/inc

${PROJECT_ROOT}/ChipDevice/cmd

${PROJECT_ROOT}/ChipDevice/common

${PROJECT_ROOT}/ChipDevice/common/source

${PROJECT_ROOT}/ChipDevice/common/include

${PROJECT_ROOT}/ChipDevice

${PROJECT_ROOT}/User

${PROJECT_ROOT}/Public
在这里插入图片描述

添加后一定要记得应用到工程

文件移动、删除、屏蔽

把创建工程生成的main.c文件移动到User目录下

点中文件,右键

在这里插入图片描述
在这里插入图片描述

删除新建工程自动生成的RAM_lnk.cmd文件

在这里插入图片描述

屏蔽掉bios.cmd和ram.cmd文件,bios和nobios、ram和flash都只能存在一个,屏蔽掉不需要的

在这里插入图片描述

删除、屏蔽后即可编译成功了

在这里插入图片描述

如果不屏蔽尽、删除生成的cmd文件,编译会因为有多个链接文件,重叠而报错
如下
在这里插入图片描述

添加_FLASH宏定义符号

把代码下载到FLASH才需要添加,如果下载到RAM可以不用添加,但前面屏蔽的cmd文件要改为屏蔽flash相关的cmd文件
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

至此,工程模板建立完成

例子:点个灯

按我的习惯,把头文件放到main.h中,不同类型的驱动都新建一个文件夹保存
新建main.h文件,系统初始化驱动文件夹和文件、gpio驱动文件夹和文件
在这里插入图片描述

记得添加路径

在这里插入图片描述

SystemDriver.c

#include "SystemDriver.h"void Init_SysInit(void)
{////Step 1. Initialize System Control:                                第一步。初始化系统控制://PLL, WatchDog,enabe Peripheral Clocks                             锁相环,WatchDog,启用外围时钟//This example function is found in the f28004x_sysctrl.c file.     这个示例函数可以在f28004x_sysctrl.c文件中找到。//InitSysCtrl();////Step 2. Initialize GPIO       步骤2。初始化GPIO//InitGpio();////Step 3. Clear all __interrupts and initialize PIE vector table:   第三步。清除所有__interrupts并初始化PIE向量表://Disable CPU __interrupts                                          禁用CPU __interrupts//DINT;////Initialize the PIE control registers to their default state.  将PIE控制寄存器初始化为其默认状态。//The default state is all PIE interrupts disabled and flags    默认状态是禁用所有PIE中断和标志//are cleared.                                                  清除//InitPieCtrl();////Disable CPU interrupts and clear all CPU interrupt flags://禁用CPU中断并清除所有CPU中断标志:IER = 0x0000;IFR = 0x0000;////Initialize the PIE vector table with pointers to the shell Interrupt//Service Routines (ISR).//用指向shell中断服务例程(ISR)的指针初始化PIE向量表。InitPieVectTable();EINT;           // Enable Global interrupt INTMERTM;           // Enable Global realtime interrupt DBGM
}

SystemDriver.h

#ifndef SYSTEM_DRIVER_H_
#define SYSTEM_DRIVER_H_#include "f28x_project.h"
#include "driverlib.h"
#include "device.h"void Init_SysInit(void);
#endif /* SYSTEM_DRIVER_H_ */

GpioDriver.c

#include "GpioDriver.h"
#include "main.h"void GpioDriver_Init(void)
{EALLOW;/** 设置GPIO31、34为输出模式,正常输出,禁止上拉*///GpioCtrlRegs.GPAGMUX2.bit.GPIO31 = 0;           //默认为0  定义GPIO复位类型的引脚 复用选择:SYSRSnGpioCtrlRegs.GPAMUX2.bit.GPIO31 = 0;            // 默认为0   定义GPIO的引脚Mux复用选择//GpioCtrlRegs.GPAPUD.bit.GPIO31 = 1;             // 0:开启上拉功能    1:表示禁止上拉。//GpioCtrlRegs.GPAODR.bit.GPIO31 = 0;             // 0:正常输出       1:开漏输出GpioCtrlRegs.GPADIR.bit.GPIO31 = 1;             // 0:配置引脚为输入。 1:配置输出引脚。//GpioCtrlRegs.GPAQSEL2.bit.GPIO31 = 0;           // 0,0 Sync ;     0,1 qualification(3个采样);   1,0 qualification(6个采样);    1,1 Async(没有Sync或qualification);GpioDataRegs.GPASET.bit.GPIO31 = 1;             // 1将强制GPIO输出数据锁存为1//GpioDataRegs.GPACLEAR.bit.GPIO31 = 1;//GpioCtrlRegs.GPBGMUX1.bit.GPIO34 = 0;           //默认为0  定义GPIO复位类型的引脚 复用选择:SYSRSnGpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;            // GPIO的引脚Mux复用选择//GpioCtrlRegs.GPBPUD.bit.GPIO34 = 1;             // 0:开启上拉功能    默认1:表示禁止上拉//GpioCtrlRegs.GPBODR.bit.GPIO34 = 0;             // 默认0:正常输出       1:开漏输出GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;             // 0:配置引脚为输入。 1:配置输出引脚。//GpioCtrlRegs.GPBQSEL1.bit.GPIO34 = 0;         // 0,0 Sync ;     0,1 qualification(3个采样);   1,0 qualification(6个采样);    1,1 Async(没有Sync或qualification);//GpioDataRegs.GPBSET.bit.GPIO34 = 1;           // 写1将强制GPIO输出数据锁存为GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;           //写1将强制GPIO0输出数据锁存为0。EDIS;
}

GpioDriver.h

#ifndef _GPIO_DRIVER_H
#define _GPIO_DRIVER_H#include "f28x_project.h"
#include "driverlib.h"
#include "device.h"#define LED1_ON()          (GpioDataRegs.GPACLEAR.bit.GPIO31 = 1)
#define LED1_OFF()         (GpioDataRegs.GPASET.bit.GPIO31 = 1)
#define LED1_TOGGLE()        (GpioDataRegs.GPATOGGLE.bit.GPIO31 = 1)
#define LED1_STATUS         (GpioDataRegs.GPADAT.bit.GPIO31)#define LED2_ON()          (GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1)
#define LED2_OFF()         (GpioDataRegs.GPBSET.bit.GPIO34 = 1)
#define LED2_TOGGLE()        (GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1)
#define LED2_STATUS         (GpioDataRegs.GPBDAT.bit.GPIO34)#endif 

main.c

#include"main.h"
/*** main.c*/
void main()
{Init_SysInit();GpioDriver_Init();while(1){LED1_ON() ;LED2_TOGGLE();DELAY_US(1000000);}}

main.h

#ifndef _MAIN_H__
#define _MAIN_H__#include "f28x_project.h"//#include <math.h>
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <stdint.h>#include "driverlib.h"
#include "device.h"
#include "SystemDriver.h"
#include "GpioDriver.h"#endif

现象

LED1常亮,2每隔1s反转
在这里插入图片描述


http://www.ppmy.cn/ops/95896.html

相关文章

【牡牛和牝牛】

题目 代码 #include <bits/stdc.h> using namespace std; typedef long long LL; const int N 1e510; const int mod 5000011; int fac[N], infac[N]; int qmi(int base, int expo, int p) {int retval 1;while(expo){if(expo & 1) retval (LL)retval * base % …

一分钟掌握java9新特性

try-with-resources语句 /** * 在处理必须关闭的资源时&#xff0c;使用try-with-resources语句替代try-finally语句。 生成的代码更简洁&#xff0c;更清晰&#xff0c;并且生成的异常更有用 * java9 之前写法 */ public static String readFile1(String fileName){ tr…

网络协议栈应用层的意义(内含思维导图和解析图通俗易懂超易理解)

绪论​&#xff1a; “节省时间的方法就是全力以赴的将所要做的事情完美快速的做完&#xff0c;不留返工重新学习的时间&#xff0c;才能省下时间给其他你认为重要的东西。” 本章主要讲到OSI网络协议栈中的应用层的作用和再次在应用层的角度理解协议的具体意义&#xff0c;以及…

[SWPUCTF 2021 新生赛]babyrce

我们传cookie admin1 访问http://node5.anna.nssctf.cn:29911/rasalghul.php 在PHP中&#xff0c;preg_match函数是一个用于进行正则表达式匹配的内置函数。它可以通过正则表达式对一个字符串进行匹配&#xff0c;判断该字符串是否满足正则表达式的规则。 发现过滤空格&#x…

SQLALchemy ORM 的关联关系之 ORM 中的多对多

SQLALchemy ORM 的关联关系之 ORM 中的多对多 场景示例实现多对多关系定义模型插入和查询数据总结在 SQLAlchemy ORM 中,多对多(Many-to-Many)关联关系是一种常见的关系类型,它表示两个表中的行可以相互关联,即一个表中的多行可以与另一个表中的多行相关联。为了实现这种关…

Jmeter+Influxdb+Grafana平台监控性能测试过程(三种方式)

一、Jmeter自带插件监控 下载地址&#xff1a;Install :: JMeter-Plugins.org 安装&#xff1a;下载后文件为jmeter-plugins-manager-1.3.jar&#xff0c;将其放入jmeter安装目录下的lib/ext目录&#xff0c;然后重启jmeter&#xff0c;即可。 启动Jmeter&#xff0c;测试计…

无限金币版《废土世界》安卓手机游戏下载,游戏分享

《废土世界》&#xff08;JunkWorld&#xff09;是由IRONHIDE游戏工作室开发的一款塔防游戏&#xff0c;它将玩家带入一个荒凉、贫瘠的后末日世界&#xff0c;玩家需要带领一队拾荒者穿越沙漠和放射性沼泽&#xff0c;进行生存战斗。游戏以其战略深度和丰富的塔防元素为特色&am…

【自用】Python爬虫学习(六):通过m3u8文件下载ts文件并合并为.mp4文件

Python爬虫学习&#xff08;六&#xff09; 下载视频&#xff08;简单版&#xff09;的步骤介绍第一步&#xff1a;在网页上找到.m3u8文件第二步&#xff1a;通过.m3u8文件下载对应的.ts视频文件第三步&#xff1a;依据.m3u8文件合并.ts文件为一个.mp4文件 下载视频&#xff08…