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 INTM
ERTM; // 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复位类型的引脚 复用选择:SYSRSn
GpioCtrlRegs.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复位类型的引脚 复用选择:SYSRSn
GpioCtrlRegs.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反转