CCS 6新建TMS320F2812工程

准备材料

  1. CCS6

    下载地址:http://www.ti.com/tool/ccstudio

  2. F2812的C语言头文件

    下载地址:http://www.ti.com/lit/zip/sprc097

    安装后的文件结构样式如下:

新建空的工程

  1. 点击"Project"->"New CCS Project"。

  1. 在New CCS Project窗口中,按需要填写以下内容后按"Finish"完成新建空的工程。

新建完成后的工程,结构如下:

  1. 点击左上方的编译按钮,应该能够顺利的编译通过,但是会出现一个警告。

工程配置

添加系统的头文件

  1. 在工程名上右击,添加两个文件夹,分别名为source和include。

  1. 打开"tidcs\c28\DSP281x\v120"文件夹,将"DSP281x_headers\include"中的所有头文件复制到刚刚新建的include目录。
  2. 打开"tidcs\c28\DSP281x\v120"文件夹,将"DSP281x_common\include"中的所有头文件复制到刚刚新建的include目录(会提示文件已存在,覆盖即可)。

    此时,工程文件夹的结构如图所示:

配置工程

右击工程文件名,选择"Properties"

  • 更改include的选项:

    在新弹出的窗口中选择"Workspace":

    然后选择对应工程的"include"目录:

  • 更改链接选项中的"Base option":

    将Stack中填充合适的数值,默认为空(也就是上文中编译的时候出现的警告):

    完成以上的设置后,编译应该没有任何的错误和警告:

  • 额外的设置——添加C99支持:

可板上执行的工程配置

根据上文的配置过程,虽然代码能够正常的通过编译,但是却没有任何的实际功能。这里,以点亮运行灯(即主循环执行过程中,固定间隔点亮的灯)为例,介绍可用的代码的配置过程。

添加必须的头文件代码

在main函数中,添加以下的头文件:

#include "DSP281x_Device.h"

#include "DSP281x_Examples.h"

其中,DSP281x_Device.h提供了对应的CPU寄存器的结构体信息,DSP281x_Examples.h主要提供了一个纳秒级的延时函数DELAY_US(A)。不过,为了使用此函数,还需要将一个汇编代码文件添加到工程中:

在项目文件名称上右击,选择"Add Files",打开的窗口中选择"DSP281x_common\source"文件夹中的"DSP281x_usDelay.asm"。然后手动将asm文件拖动到source目录下。

此时,项目文件夹的组织结构如图。

添加必要的源文件

????一个能够正常在开发板上运行的工程,应该具备一下的必要的源文件。

  • 添加"DSP281x_headers\source"目录下的"DSP281x_GlobalVariableDefs.c"以指定所有系统结构体的存储位置。
  • 添加"DSP281x_common\source"目录下的"DSP281x_SysCtrl.c"以初始化系统的控制选项,包括PLL,看门狗,预分频。
  • 添加"DSP281x_common\source"目录下的"DSP281x_Gpio.c"以初始化系统的GPIO口。
  • 添加"DSP281x_common\source"目录下的"DSP281x_PieCtrl.c以初始化PIE控制器。
  • 添加"DSP281x_common\source"目录下的 "DSP281x_PieVect.c"以初始化PIE向量表。
  • 添加"DSP281x_common\source"目录下的"DSP281x_InitPeripherals.c"以初始化其他外设。
  • 添加"DSP281x_common\source"目录下的"DSP281x_DefaultIsr.c"以使用默认的中断函数。

添加cmd文件

????本程序非TI的BIOS系统应用,所以需要添加"DSP281x_headers\cmd"目录下的"DSP281x_Headers_nonBIOS.cmd"。

?

到此,可以尝试编译工程,应该能够正常的编译通过,且没有任何的警告。目录结构应该如下所示(分别是头文件,源文件和链接文件):


第一个可执行程序——点亮LED灯

  1. 编辑main函数,将main函数修改成如下的内容:

#include "DSP281x_Device.h"????????// 添加必要的头文件

#include "DSP281x_Examples.h"????// 添加必要的头文件

?

int main(void)
{

????????// 1. 初始化系统控制,PLL,看门狗,预分频

????????InitSysCtrl();

????????// 2. 初始化GPIO

????????InitGpio();

????????// 3. 关闭中断,然后初始化PIE向量表

????????DINT;????????????// INTM 置一,关中断

????????InitPieCtrl();????// 初始化 PIE 控制寄存器到默认状态

//(所有PIE中断禁用,标志清空)

????????????????????????????// 在 DSP281x_PieCtrl.c 中定义

????????IER =
0x0000;????// 禁用 CPU 中断

????????IFR =
0x0000;????// 清空 CPU 中断标志

????????InitPieVectTable();????// 初始化 PIE 向量表

????????????????????????????????// 在 DSP281x_PieVect.c 中定义

?

????????// 4. 初始化所有的外设

????????// InitPeripherals();????// 在 DSP281x_InitPeripherals.c 中定义

????????????????????????????????????// 需要启用哪些硬件,在此函数中设置

?

????????// 5. 用户指定的代码后启用中断

????????// 用户指定的其他函数

????????EINT;

????????ERTM;

????????for(;;)

????????{

????????

????????}

}

main函数虽然是int类型的,但是这里不需要结尾的"return 0;",否则在编译时会提示一个警告。

  1. 编辑"DSP281x_Gpio.c",修改InitGpio()函数:

void InitGpio(void)

{

????????// GpioMuxRegs 受到保护,需要EALLOW后才能配置

????????EALLOW;

????????// 设置为GPIO口

????????GpioMuxRegs.GPAMUX.bit.T1PWM_GPIOA6 =
0;

????????// 配置为输出引脚

????????GpioMuxRegs.GPADIR.bit.GPIOA6 =
1;

????????EDIS;

}

  1. 在main函数中定义一个变量(Uint32)main_counter,然后修改for循环,添加如下语句:

????for(;;)

????{

????????main_counter++;

????????if(main_counter >
5000000)

????????{

????????????main_counter =
0;

????????????GpioDataRegs.GPATOGGLE.bit.GPIOA6 =
1;

????????}

????}

????

????到此,编译后点击Debug,可以观察到开发板上对应于102引脚上的LED灯能够规律性的闪烁。

将程序固化到Flash中

将程序固化到flash中非常的"简单"。

  1. 添加"DSP281x_common\cmd"目录下的"F2812.cmd"。
  2. 添加"DSP281x_common\source"目录下的"DSP281x_CodeStartBranch.asm"。
  3. 禁用"2812_RAM_lnk.cmd"。

    重新编译工程后点击Debug,程序就会自动下载到Flash中,下载完成后,将开发板重新上电,就能够看到对应的LED灯离线运行。

    但是,你也许会奇怪,为什么灯运行的明显比仿真的时候要慢。那是因为,Flash实在是太慢了。为了能够让程序跑的快些,那只有让系统上电时,让程序跑在RAM中。

让程序跑在RAM中

Ti官方提供了2种让程序固化在Flash中而能够运行于RAM中的方法。

  1. 将需要高效执行的函数加载到RAM中运行;

    spra958l - Running an Application from Internal Flash Memory on the TMS320F28xxx DSP

  2. 将整个代码本身加载到RAM中运行。

    spraau8 - Copying Compiler Sections From Flash to RAM on the TMS320F28xxx DSCs

????第一种方案,需要设置cmd文件的同时,还需要兼顾代码本身,稍显麻烦。

方法一:部分代码加载到RAM

????再议……

方法二:所有代码加载到RAM

  1. 下载spraau8代码示例:

    http://www-s.ti.com/sc/techlit/spraau8.zip

  2. 将上面工程中的"DSP281x_CodeStartBranch.asm"替换为代码示例中的"DSP281x_CodeStartBranch"。
  3. 将代码示例中的"DSP28xxx_SectionCopy_nonBIOS.asm"添加到source中。
  4. 使用代码示例中的cmd文件替换示例代码中的cmd文件。

不过,示例代码中的cmd文件对内存结构相比于ti提供的默认头文件,有较大的更改,假如不想使用示例代码中的cmd,那就看看都做了哪些更改吧。

spraau8的cmd文件中的主要变化

????对比spraau8提供的cmd文件,可以看到,最大的变化是,诸如下图所示的初始化方法:

????其中标注1的地方,表示将".text"存储在"FLASH_AB"区;标注2的地方,表示此存储区的代码将会在"RAM_L0L1"中运行;标注3的地方,表示此部分代码的起始位置为"_text_loadstart";标注4的地方,表示此部分代码的结束位置为"_text_runstart";最后一行也即第5行,表示此部分代码的长度为"_text_size"。那么,值得好奇的是,这些最前面是下划线的字段都是哪里来的呢。其实,它们都在文件"DSP28xxx_SectionCopy_BIOS.asm"中定义了。

????其次,就是初始化的段中多了一个".cinit"。这个东西又是哪里来的呢。它的定义,在"DSP28xxx_SectionCopy_nonBIOS.asm"中,具体的含义,可以看spraau8的pdf文档。

????最后,示例代码中,将需要移动的段都放在了FLASHAB中,而启动后复制到的位置,都在"RAM_H0"和"RAML0L1"中。

到这里我们差不多就可以自己修改cmd文件了。

  1. 将上面工程中的"DSP281x_CodeStartBranch.asm"替换为代码示例中的"DSP281x_CodeStartBranch"。
  2. 将代码示例中的"DSP28xxx_SectionCopy_nonBIOS.asm"添加到source中。
  3. 修改"DSP281x_Headers_nonBIOS.cmd"

    ?

  4. 修改"F2812.cmd"

    1. 将RAML1从PAGE1中移动到PAGE0,且和RAML0合并

      RAML0L1 : origin = 0x008000, length = 0x002000 /* on-chip RAM block L0 L1 */

    2. 将RAMH0从PAGE1中移动到PAGE0。
    3. 原始的FLASH是严格A、B……分段的,这里可以直接复制cmd文件中的内容,将其合并为AB、CD……。
    4. SECTIONS部分,直接复制示例代码中的".cinit"、".const"、".econst"、".pinit"、".switch????"和".text"。
    5. 为了防止在代码中,可能存在将某些函数放在"ramfuncs"部分,这一部分予以保留(示例代码中,没有这一部分)。但是要稍作修改:

    6. IQmath部分,也要将其存储段修改,比如改成FLASH_CD

?

作者:东风唯笑

联系方式:[email protected]

关于版权:


CCS 6新建TMS320F2812工程 由 东风唯笑 创作,采用 知识共享 署名-非商业性使用 4.0 国际 许可协议进行许可。
基于http://www.cnblogs.com/dongfengweixiao/上的作品创作。
本许可协议授权之外的使用权限可以从 http://www.cnblogs.com/dongfengweixiao/ 处获得。

时间: 2024-10-03 13:44:32

CCS 6新建TMS320F2812工程的相关文章

运用Keil uVision新建一个工程

关于单片机程序来说,每一个功用程序,都必需要有一个配套的工程(Project),即便是点亮 LED 如许复杂的功用程序也不破例,因而我们起首要新建一个工程,翻开我们的 Keil 软件后,点击:Project-->New uVision Project...然后会呈现一个新建工程的界面,如图 2-8 所示. 图 2-8  新建一个工程 由于如今讲到了第二章,所以我们在硬盘上树立了一个 lesson2 的目次,然后把 LED 这个工程的途径指定到这里,如许便利往后治理程序,分歧的功用程序放到分歧的文

新建Android工程遇到几个问题

室友都睡了,还在苦逼的搞电脑...脖子疼还没好.. 今晚在新建Android工程时遇到几个问题在网上找了有一会,总结一下: 1.新建Android工程时发现finish不能点击或者点击后没有反应. 问题原因:新建的工程名和之前存在过的某个工程名重复了. 解决方法:为新工程换个名字. 2.新建工程后出现appcompat_v7这样一个东西而且会报错,新建的工程则是红色警告. 问题原因:appcompat_v7是Google自己的一个兼容包或者说支持库,能够使得2.1版本以上全使用4.0的界面内容.

新建Jni工程

2.2版本的Android Studio支持新建Jni工程,不用再像以前自己构建工程目录,首先把自己的升级自己的AS, 然后打开Tools->Andorid->SDK manager 搜索"Android SDK" 找到SDK选择SDK Tools安装如下工具: 1.NDK:ndk是谷歌让android开发c/c++的工具套件. 安装完毕之后可以查看一下NDK在sdk中的位置与文件结构 这里要配置环境变量ndk-build 配置完是这个效果 2.LLDB:是调试本地代码的工

如何在Flash Builder里新建ActionScript工程

新建ActionScript工程 1. File > New > ActionScript Project 2. 按照提示完成工程的创建 使程序直接在Flash Player中运行 1. 在工程上点右键,选Properties > ActionScript Compiler 2. 去掉Generate HTML wrapper file前面的勾 如何Rebuild工程 1. 在菜单条上选择,Project > Clean...

解决cocos2d-x-3.1.1新建android工程

下了个cocos2d-x-3.1.1,按照官方文档一步步配置win7下cocos2d-x-3.1.1的android开发环境,结果没有找到create_project.py这个文件.. 现将详细配置步骤称述如下; 1.下载cocos2d-x-3.1.1,解压 2.下载android ndk 3下载Apache ant 4下载python (最好不要下载3以上的,否则会出现编译错误print之类的,我下载的是2.7) 5.打开cmd  进入          cocos2d-x-3.1.1根目录,

] 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题

] 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题 标签: myeclipsejavawebWeb App Libraries 2013-10-16 10:54 5032人阅读 评论(0) 收藏 举报  分类: 开发环境 版权声明:本文为博主原创文章,未经博主允许不得转载. 在myeclipse中新建的Javaweb工程,lib中的jar包无法自动加载工程,不能像eclipse那样使用Web App Libraries. 即使添加了Web App

MDK524a新建STM32工程--标准外设库V3.5

MDK524a最新版本的KEil软件. 首先浏览一下标准外设库有哪些东西 然后我们用MDK524a 来新建一个工程,步骤如图 由于MDK524a版本非常方便,只需要在创建工程文件夹下添加User和Lib两个文件夹就可以了,其他的OutPut  Listings之类的文件夹会自动添加的. 完成!

新建maven工程时pom.xml报错

新建maven工程时,pom.xml报错:第一行报如下错误:multiple annotations found at this line后添加org.eclipse.m2e相关的plugin配置后,错误消失,完整pom.xml如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schem

正确新建maven工程2

网上看到许多新建maven工程的文章,都比较老了,而且没讲清楚. 尤其是Cannot change version of project facet Dynamic web module to 3.0 这个问题,有些解决办法不是很好. 下面给大家讲讲如何正确地新建maven工程,以及为什么不能转成Dynamic web module3.0. 假设大家对eclipse都比较熟悉了,话不多说,请看图: 过滤器里输入web.我们要新建一个web工程. 新生成的工程默认的jdk和compiler是1.5