初学DSP(1)-TMS320F280049C入门

article/2025/11/9 1:35:54

目录

前提

知识点

深入了解DSP和ARM的关系(相同与区别)

DSP CMD学习笔记(连接物理存储和逻辑存储)

CMD文件详解与DSP存储空间

DSP 程序远程升级 / Bootloader设计指南(一)—— 初识Bootloader/DSP引导流程

编译(Compile)(处理.C\.H文件)

链接(Link)(.lib文件)

仿真器(ccxml文件)

RAM运行与 FLASH运行

建立RAM工程

遇到错误

 

RAM变FLASH


前提

软件环境

Code Composer Studio 10.1.1

c2000_20.2.1.LTS

C2000Ware_3_03_00_00

硬件

C2000 Piccolo MCU F280049C LaunchPad™ 开发套件 

建立工程相关参考博客链接

https://blog.csdn.net/fanxianyan1993/article/details/89392792

https://whyorwhnt.blog.csdn.net/article/details/104227550

https://blog.csdn.net/sphinz1/article/details/78828909

https://whyorwhnt.blog.csdn.net/article/details/104227550

 

知识点

深入了解DSP和ARM的关系(相同与区别)

DSP采用的是哈佛设计,即数据总线和地址总线分开,使程序和数据分别存储在两个分开的空间,允许取指令和执行指令完全重叠。也就是说在执行上一条指令的同时就可取出下一条指令,并进行译码,这大大的提高了微处理器的速度。

    (1)在一个指令周期内可完成一次乘法和一次加法;

    (2)程序和数据空间分开,可以同时访问指令和数据;

    (3)片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问;

    (4)具有低开销或无开销循环及跳转的硬件支持;

    (5)快速的中断处理和硬件I/O支持;

    (6)具有在单周期内操作的多个硬件地址产生器;

    (7)可以并行执行多个操作;

    (8)支持流水线操作,使取指、译码和执行等操作可以重叠执行

 

CCS 这个平台以前基本没用过,很不熟悉,只能找找资料参考。可以参考同类型的板子的资料博客。

下载安装包后,打开目录E:\ti\c2000\C2000Ware_3_03_00_00\device_support\f28004x\docs

里面的文档可以指导建立工程和使用软件包。每个TI的板子都可以参考使用。

下载了C2000软件包,里面内容如下,资料很全

打开目录

C:\ti\c2000\C2000Ware_3_01_00_00\device_support\f28004x\docs

建立工程参考文档

F28004x_FRM_EX_UG.pdf

实例工程参考

Example_Projects_Quickstart_Guide.pdf

我打开了一个实例 adc

 

基本文件:cmd、src、cmd、asm、lib

cmd文件

在C文件链接时用到

DSP CMD学习笔记(连接物理存储和逻辑存储)

为指令和数据分配空间的文件就是CMD文件

1.通过伪指令定义段 

2.给段分配存储空间

CMD文件详解与DSP存储空间

CMD文件包括两方面的内容: 
1)用户声明系统的存储器资源。包括DSP芯片自带、外扩的存储器和空间,都要一一声明:有哪些存储器、位置和大小。 
2)用户声明资源分配情况。这是编写CMD文件的重点。

device_support\f28004x\common\cmd

28004x_generic_ram_lnk.cmd文件

MEMORY
{
PAGE 0 :/* BEGIN is used for the "boot to SARAM" bootloader mode   */BEGIN           	: origin = 0x000000, length = 0x000002RAMM0           	: origin = 0x0000F4, length = 0x00030CRAMLS0          	: origin = 0x008000, length = 0x000800RAMLS1          	: origin = 0x008800, length = 0x000800RAMLS2      		: origin = 0x009000, length = 0x000800RAMLS3      		: origin = 0x009800, length = 0x000800RAMLS4      		: origin = 0x00A000, length = 0x000800RESET           	: origin = 0x3FFFC0, length = 0x000002/* Flash sectors: you can use FLASH for program memory when the RAM is filled up*//* BANK 0 */FLASH_BANK0_SEC0  : origin = 0x080000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC1  : origin = 0x081000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC2  : origin = 0x082000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC3  : origin = 0x083000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC4  : origin = 0x084000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC5  : origin = 0x085000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC6  : origin = 0x086000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC7  : origin = 0x087000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC8  : origin = 0x088000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC9  : origin = 0x089000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC10 : origin = 0x08A000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC11 : origin = 0x08B000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC12 : origin = 0x08C000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC13 : origin = 0x08D000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC14 : origin = 0x08E000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC15 : origin = 0x08F000, length = 0x001000	/* on-chip Flash *//* BANK 1 */FLASH_BANK1_SEC0  : origin = 0x090000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC1  : origin = 0x091000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC2  : origin = 0x092000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC3  : origin = 0x093000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC4  : origin = 0x094000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC5  : origin = 0x095000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC6  : origin = 0x096000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC7  : origin = 0x097000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC8  : origin = 0x098000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC9  : origin = 0x099000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC10 : origin = 0x09A000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC11 : origin = 0x09B000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC12 : origin = 0x09C000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC13 : origin = 0x09D000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC14 : origin = 0x09E000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC15 : origin = 0x09F000, length = 0x001000	/* on-chip Flash */PAGE 1 :BOOT_RSVD       : origin = 0x000002, length = 0x0000F1     /* Part of M0, BOOT rom will use this for stack */RAMM1           : origin = 0x000400, length = 0x0003F8     /* on-chip RAM block M1 */
//   RAMM1_RSVD      : origin = 0x0007F8, length = 0x000008     /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */RAMLS5      : origin = 0x00A800, length = 0x000800RAMLS6      : origin = 0x00B000, length = 0x000800RAMLS7      : origin = 0x00B800, length = 0x000800RAMGS0      : origin = 0x00C000, length = 0x002000RAMGS1      : origin = 0x00E000, length = 0x002000RAMGS2      : origin = 0x010000, length = 0x002000RAMGS3      : origin = 0x012000, length = 0x001FF8
//   RAMGS3_RSVD : origin = 0x013FF8, length = 0x000008     /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
}/*You can arrange the .text, .cinit, .const, .pinit, .switch and .econst to FLASH when RAM is filled up.*/
SECTIONS
{codestart        : > BEGIN,     PAGE = 0.TI.ramfunc      : > RAMM0,      PAGE = 0.text            : >> RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4,   PAGE = 0.cinit           : > RAMM0,     PAGE = 0.switch          : > RAMM0,     PAGE = 0.reset           : > RESET,     PAGE = 0, TYPE = DSECT /* not used, */.stack           : > RAMM1,     PAGE = 1#if defined(__TI_EABI__).bss             : > RAMLS5,     PAGE = 1.bss:output      : > RAMLS5,     PAGE = 1.init_array      : > RAMM0,      PAGE = 0.const           : > RAMLS5,     PAGE = 1.data            : > RAMLS5,     PAGE = 1.sysmem          : > RAMLS5,     PAGE = 1.bss:cio         : > RAMLS0,     PAGE = 0
#else.pinit           : > RAMM0,      PAGE = 0.ebss            : > RAMLS5,     PAGE = 1 .econst          : > RAMLS5,     PAGE = 1.esysmem         : > RAMLS5,     PAGE = 1.cio             : > RAMLS0,     PAGE = 0 
#endiframgs0           : > RAMGS0,    PAGE = 1ramgs1           : > RAMGS1,    PAGE = 1  
}/*
//===========================================================================
// End of file.
//===========================================================================
*/

    28004x_generic_flash_lnk.cmd

MEMORY
{
PAGE 0 :/* BEGIN is used for the "boot to Flash" bootloader mode   */BEGIN           	: origin = 0x080000, length = 0x000002RAMM0           	: origin = 0x0000F4, length = 0x00030CRAMLS0          	: origin = 0x008000, length = 0x000800RAMLS1          	: origin = 0x008800, length = 0x000800RAMLS2      		: origin = 0x009000, length = 0x000800RAMLS3      		: origin = 0x009800, length = 0x000800RAMLS4      		: origin = 0x00A000, length = 0x000800RESET           	: origin = 0x3FFFC0, length = 0x000002/* Flash sectors *//* BANK 0 */FLASH_BANK0_SEC0  : origin = 0x080002, length = 0x000FFE	/* on-chip Flash */FLASH_BANK0_SEC1  : origin = 0x081000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC2  : origin = 0x082000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC3  : origin = 0x083000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC4  : origin = 0x084000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC5  : origin = 0x085000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC6  : origin = 0x086000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC7  : origin = 0x087000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC8  : origin = 0x088000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC9  : origin = 0x089000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC10 : origin = 0x08A000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC11 : origin = 0x08B000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC12 : origin = 0x08C000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC13 : origin = 0x08D000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC14 : origin = 0x08E000, length = 0x001000	/* on-chip Flash */FLASH_BANK0_SEC15 : origin = 0x08F000, length = 0x001000	/* on-chip Flash *//* BANK 1 */FLASH_BANK1_SEC0  : origin = 0x090000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC1  : origin = 0x091000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC2  : origin = 0x092000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC3  : origin = 0x093000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC4  : origin = 0x094000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC5  : origin = 0x095000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC6  : origin = 0x096000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC7  : origin = 0x097000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC8  : origin = 0x098000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC9  : origin = 0x099000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC10 : origin = 0x09A000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC11 : origin = 0x09B000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC12 : origin = 0x09C000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC13 : origin = 0x09D000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC14 : origin = 0x09E000, length = 0x001000	/* on-chip Flash */FLASH_BANK1_SEC15 : origin = 0x09F000, length = 0x000FF0	/* on-chip Flash *///   FLASH_BANK1_SEC15_RSVD : origin = 0x09FFF0, length = 0x000010  /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */PAGE 1 :BOOT_RSVD       : origin = 0x000002, length = 0x0000F1     /* Part of M0, BOOT rom will use this for stack */RAMM1           : origin = 0x000400, length = 0x0003F8     /* on-chip RAM block M1 */
//   RAMM1_RSVD      : origin = 0x0007F8, length = 0x000008     /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */RAMLS5      : origin = 0x00A800, length = 0x000800RAMLS6      : origin = 0x00B000, length = 0x000800RAMLS7      : origin = 0x00B800, length = 0x000800RAMGS0      : origin = 0x00C000, length = 0x002000RAMGS1      : origin = 0x00E000, length = 0x002000RAMGS2      : origin = 0x010000, length = 0x002000RAMGS3      : origin = 0x012000, length = 0x001FF8
//   RAMGS3_RSVD : origin = 0x013FF8, length = 0x000008     /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
}SECTIONS
{codestart        : > BEGIN,     PAGE = 0, ALIGN(4).text            : >> FLASH_BANK0_SEC2 | FLASH_BANK0_SEC3 | FLASH_BANK0_SEC5,   PAGE = 0, ALIGN(4).cinit           : > FLASH_BANK0_SEC1,     PAGE = 0, ALIGN(4).switch          : > FLASH_BANK0_SEC1,     PAGE = 0, ALIGN(4).reset           : > RESET,     PAGE = 0, TYPE = DSECT /* not used, */.stack           : > RAMM1,     PAGE = 1#if defined(__TI_EABI__).init_array      : > FLASH_BANK0_SEC1,       PAGE = 0,       ALIGN(4).bss             : > RAMLS5,       PAGE = 1.bss:output      : > RAMLS3,       PAGE = 0.bss:cio         : > RAMLS0,       PAGE = 0.data            : > RAMLS5,       PAGE = 1.sysmem          : > RAMLS5,       PAGE = 1/* Initalized sections go in Flash */.const           : > FLASH_BANK0_SEC4,       PAGE = 0,       ALIGN(4)
#else.pinit           : > FLASH_BANK0_SEC1,       PAGE = 0,       ALIGN(4).ebss            : > RAMLS5,       PAGE = 1.esysmem         : > RAMLS5,       PAGE = 1.cio             : > RAMLS0,       PAGE = 0.econst          : > FLASH_BANK0_SEC4,    PAGE = 0, ALIGN(4)
#endiframgs0           : > RAMGS0,    PAGE = 1ramgs1           : > RAMGS1,    PAGE = 1#if defined(__TI_EABI__) .TI.ramfunc      : LOAD = FLASH_BANK0_SEC1,RUN = RAMLS0,LOAD_START(RamfuncsLoadStart),LOAD_SIZE(RamfuncsLoadSize),LOAD_END(RamfuncsLoadEnd),RUN_START(RamfuncsRunStart),RUN_SIZE(RamfuncsRunSize),RUN_END(RamfuncsRunEnd),PAGE = 0, ALIGN(4)
#else					  .TI.ramfunc      : LOAD = FLASH_BANK0_SEC1,RUN = RAMLS0,LOAD_START(_RamfuncsLoadStart),LOAD_SIZE(_RamfuncsLoadSize),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),RUN_SIZE(_RamfuncsRunSize),RUN_END(_RamfuncsRunEnd),PAGE = 0, ALIGN(4)
#endif}/*
//===========================================================================
// End of file.
//===========================================================================
*/

 MEMORY命令:描述系统实际的硬件资源
 SECTION命令:描述“段”如何定位

.text  汇编指令代码

.cinit  存放对全局和静态变量初始化

.const  const声明字符串常量,全局,静态变量

.econst  由far const声明字符串常量,全局,静态变量

常见的未初始化段:

.bss  为全局和局部变量保存的空间。就是.cinit中的数据复制到.bss中

.ebss 为使用大寄存器模式时预留的空间,在程序上电的时候,也是cinit中的数据复制到.bss

中,库文件选择.ml后缀的。largememory。库文件在CCS安装目录的C2000 cgtools  lib

.stack  堆栈函数的传递变量和局部变量,每个段就是一个空间,不同的段里存放的是不同的数据。

用伪指令来定义段:

#pragma CODE_SECTION(symbol,"section name").为代码定义段

#pragma DATA_SECTION(symbol,"section name").为数据定义段

symbol可以是函数名,也可以是全局变量名,不能在函数体内用上面两条语句定义段。在symbol定义和使用之前一定要为其定义段。

28004x_generic_ram_lnk.cmd文件中,在SECTION里面有一个定义  codestart,在建立工程时候会有定义 code_start

 

源文件

device_support\f28004x\common\source

device_support\f28004x\headers\source

driverlib\f28004x\driverlib\ccs\Debug

rts2800_fpu32_fast_supplement.lib与rts2800_fpu32.lib的添加

里面的文件都来自于:E:\ti\c2000\C2000Ware_3_03_00_00\device_support\f28004x\common 目录下

 

 

asm文件

 

asm文件与cmd文件的关系

DSP 程序远程升级 / Bootloader设计指南(一)—— 初识Bootloader/DSP引导流程

 

f28004x_codestartbranch.asm


***********************************************************************WD_DISABLE  .set  1    ;set to 1 to disable WD, else set to 0.ref _c_int00.global code_start***********************************************************************
* Function: codestart section
*
* Description: Branch to code starting point
***********************************************************************.sect "codestart".retaincode_start:.if WD_DISABLE == 1LB wd_disable       ;Branch to watchdog disable code.elseLB _c_int00         ;Branch to start of boot._asm in RTS library.endif;end codestart section***********************************************************************
* Function: wd_disable
*
* Description: Disables the watchdog timer
***********************************************************************.if WD_DISABLE == 1.text
wd_disable:SETC OBJMODE        ;Set OBJMODE for 28x object codeEALLOW              ;Enable EALLOW protected register accessMOVZ DP, #7029h>>6  ;Set data page for WDCR registerMOV @7029h, #0068h  ;Set WDDIS bit in WDCR to disable WDEDIS                ;Disable EALLOW protected register accessLB _c_int00         ;Branch to start of boot._asm in RTS library.endif;end wd_disable.end;//
;// End of file.
;//

c_int00是C/C++程序的入口地址,用于完成C运行环境的初始化,最终跳转到main函数,开始运行应用程序。

 

 

改变配置

 

 

CCS软件自动读取工程文件夹的文件,很方便

还有一个路径缩写定义,方便

${PROJECT_ROOT}/include

头文件索引位置

折叠不用的文件

 

 

C语言的

编译(Compile)(处理.C\.H文件)

C语言代码由固定的词汇按照固定的格式组织起来,简单直观,程序员容易识别和理解,但是对于CPU,C语言代码就是天书,根本不认识,CPU只认识几百个二进制形式的指令。这就需要一个工具,将C语言代码转换成CPU能够识别的二进制指令,也就是将代码加工成 .exe 程序的格式;这个工具是一个特殊的软件,叫做编译器(Compiler)

编译器能够识别代码中的词汇、句子以及各种特定的格式,并将他们转换成计算机能够识别的二进制形式,这个过程称为编译(Compile)

链接(Link)(.lib文件)

C语言代码经过编译以后,并没有生成最终的可执行文件(.exe 文件),而是生成了一种叫做目标文件(Object File)的中间文件(或者说临时文件)。目标文件也是二进制形式的,它和可执行文件的格式是一样的。对于 Visual C++,目标文件的后缀是.obj;对于 GCC,目标文件的后缀是.o

目标文件经过链接(Link)以后才能变成可执行文件。既然目标文件和可执行文件的格式是一样的,为什么还要再链接一次呢,直接作为可执行文件不行吗?

不行的!因为编译只是将我们自己写的代码变成了二进制形式,它还需要和系统组件(比如标准库、动态链接库等)结合起来,这些组件都是程序运行所必须的。

链接(Link)其实就是一个“打包”的过程,它将所有二进制形式的目标文件和系统组件组合成一个可执行文件。完成链接的过程也需要一个特殊的软件,叫做链接器(Linker)

 

仿真器(ccxml文件)

XDS仿真器

对于280049C,其官方的LaunchPad开发板使用了XDS110仿真器的两线调试模式,而官方的ControlCard使用的是XDS100V2仿真器,开发时需要注意区分,并分别设置。本文以采用两线制调试的XDS110仿真器为例进行设置。

 


 

建立工程参考

补充

1、coff的lib文件要删除,多余cmd,lib文件折叠不然报错

2、多余的文件太多,第一次编译时间很久。

2、如果debug遇到下面错误,是因为ccxml文件设置active不对

 Unable to access device register. Reset the device, and retry the operation. If error persists, confirm configuration, power-cycle the board, and/or try more reliable JTAG settings (e.g. lower TCLK). (Emulation package 9.2.0.00002) 

 

RAM运行与 FLASH运行

一般情况下DSP编程有两种:一是在线仿真,直接把程序下载到片内RAM里,在不掉电的情况下运行和调试,保证下载和运行的速度,方便调试工作;二是脱离仿真后应用,如果还像在线仿真一样将程序下载到片内的RAM区, RAM是一个易失的存储器,当掉电后RAM内部的程序和数据全部丢失,没办法运行。所以此时应当把程序下载到ROM、FLASH、OTP等里,掉电也不丢失。 
对于程序在FLASH中运行时,需要注意的: DSP在150M时钟频率下,FLASH中只能提供大约120M的时钟频率,所以有时候我们希望在RAM中运行时间敏感或计算量很大的子程序(比如AD采样)。但是我们所有代码都放在FLASH中,这就必须在上电后将FLASH中的这段敏感程序复制到RAM中运行,加快速度。要在CMD文件中进行配置。

在ram运行调试可以,一掉电就丢失数据了,得移植到flash,掉电也可以恢复数据继续运行

 

 

 

建立RAM工程

1、添加文件

1、.c、.h、.asm、文件(编译,配置include头文件路径)

分底层驱动和板级应用

2、.cmd文件(分配空间,配置从flash/ram运行)

  • 28004x_generic_flash_lnk.cmd 或 28004x_generic_ram_lnk.cmd(选一个,ram掉电丢失,flash不会)
  •  f28004x_headers_nonbios.cmd

3、lib文件(链接,加速运算,配置运算数学库)

  • rts2800_fpu32_eabi.lib
  • rts2800_fpu32_fast_supplement_eabi.lib
  • 其他数学库(正在学习)

4、ccxml文件(仿真器配置文件)

TMS320F280049C_LaunchPad.ccxml

2、折叠flash的cmd文件

选择为默认和激活

 

二、配置

1、c、.h、.asm、文件索引位置

2、lib文件添加和索引

3、配置cmd文件,使用ram

添加预定义

_LAUNCHXL_F280049C 

测试代码

#include "F28x_Project.h"
#include "device.h"
#include "math.h"void main(void)
{// 初始化时钟和外设 Initialize device clock and peripheralsDevice_init();// InitSysCtrl();  //本工程不能使用寄存器的InitSysCtrl();函数初始化。/*//库函数版配置// 初始化GPIO并设置为推挽输出 Initialize GPIO and configure the GPIO pin as a push-pull outputDevice_initGPIO();GPIO_setPadConfig(DEVICE_GPIO_PIN_LED1, GPIO_PIN_TYPE_STD);  // Push-pull output or floating inputGPIO_setDirectionMode(DEVICE_GPIO_PIN_LED1, GPIO_DIR_MODE_OUT);*/InitGpio();  //寄存器指令配置GPIO_SetupPinMux(DEVICE_GPIO_PIN_LED1, GPIO_MUX_CPU1, 0);GPIO_SetupPinOptions(DEVICE_GPIO_PIN_LED1, GPIO_OUTPUT, GPIO_PUSHPULL);// 初始化PIE并清空PIE寄存器,关闭CPU中断// Initialize PIE and clear PIE registers. Disables CPU interrupts.Interrupt_initModule();// 初始化PIE向量表// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).Interrupt_initVectorTable();// Enable Global Interrupt (INTM) and realtime interrupt (DBGM)EINT;ERTM;float a=cos((float)3.1415926/4);  // FPU32float b=__sin((float)(3.14/4));   // TMUfor(;;){// Turn on LED// 硬件电路设计是GPIO输出低电平时LED亮GPIO_writePin(DEVICE_GPIO_PIN_LED1, 0);// 延迟0.5s Delay for a bit.DEVICE_DELAY_US(500000);// Turn off LEDGPIO_writePin(DEVICE_GPIO_PIN_LED1, 1);// Delay for a bit.DEVICE_DELAY_US(500000);}
}

 

遇到错误

1、ccxml文件不对

 

 

2、工程无错误,但烧写后不运行,没有效果

定义有问题

 

添加预宏定义

 

RAM变FLASH

掉电不丢失

1、变cmd文件

2、配置debug变release

 

3、检查头文件和lib文件索引位置,并添加

4、添加声明

_FLASH

运行无错误

下载,掉电重启正常。 


http://chatgpt.dhexx.cn/article/9wmgaSlo.shtml

相关文章

【FPGA-DSP】第一期:DSP基础

目录 1. DSP基础 1.1 DSP基本概念 1.2 FPGA实现DSP的特点 2. DSP硬核的结构与使用 3. FPGA设计DSP技术 3.1. 浮点数与定点数的表示与转换 3.1.1. 双精度浮点数表示 3.1.2. 双精度浮点数与定点数的转换 本章作为FPGA数字信号处理的入门介绍课程,将介绍DSP的…

DSP基础知识

1.定义 数字信号处理器(英文:Digital Signal Processor)是集成电路芯片组成的用来完成数字信号处理任务的处理器。 2.功能 2.1ANR/ANC 其原理是降噪系统电路产生降噪MIC接收的外界环境噪音相等的反相信号,将噪声抵消。实现50-2K…

DSP的入门学习(一)

#硬件讲解与分类 1.DSP DSP(digital signal processor)是一种独特的微处理器,是以数字信号来处理大量信息的器件。其内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊…

DSP-BIOS使用入门

从环境说到搭建第一个工程 请注意,此文默认读者已经对DSP及CCS V3.3环境有一定的了解了,知道cmd文件的配置,知道新建工程,编译并连接仿真器下载!如果你对这些还都不熟悉,请先熟悉这些!当然&…

【DSP】【第一篇】开始DSP学习

2022年6月14日 1. 部署开发环境 略。工作需要,TMS320C6678。 从今天开始学习DSP的知识。 后面会补充如何安装部署环境。 1.1 组件 1.1.1 SDK MCSDK(CCSv5,CCSv6)Path(全英文路径,无中文,无空格) 安装完之后&#xf…

DSP的入门学习(二)

DSP的入门学习(二) 1.了解所用的设备资源 图为 Code Composer Studio 6.0.0.00190 C/C开发环境 1.1 简单介绍建立一个CCS项目工程 上图所用到的是:硬件平台基于TMS320F28335芯片,软件平台基于TI的Code Composer Studio 6.0.0.…

[培训-DSP快速入门-1]:DSP概述(基本框架、CPU, GPU, FPGA比较,常见型号)

作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing 本文网址:https://blog.csdn.net/HiWangWenBing/article/details/118885060 目录 引言: 第1部分 什么是DSP 第2部分 为什么需要DSP 第3部分 DSP的基本框架 第4部分 C…

DSP,从入门到入土

文章目录 前言一、DSP架构二、内存管理三、 多核并行处理1.1、主从模式1.2、数据流模式 四、多核同步4.1、共享存储区变量4.2、硬件信号量 五、Cache的使用六、DMA的使用七、一些编程tips7.1 关键字7.2 struct定义7.3 存储7.4 动态内存7.5 编译器选项 八、八核固化附录 前言 下…

用电器分析识别装置(H 题)--2021 年全国大学生电子设计竞赛

用电器分析识别装置(H 题)--2021 年全国大学生电子设计竞赛 一 任务二 要求1. 基本要求2.发挥部分 三 说明四 评分标准优秀作品开源参考(来源立创开源平台)文件 一 任务 设计并制作一个根据电源线电流的电参量信息分析…

2022年全国大学生电子设计竞赛—TI杯模拟电子系统设计专题邀请赛X题

一、简介 全国大学生电子设计竞赛“TI杯”模拟电子系统设计专题邀请赛,是全国大学生电子设计竞赛的一项专题邀请赛(以下简称邀请赛)。竞赛自2010年起每逢双年举办,并设TI杯。邀请赛贯彻全国大学生电子设计竞赛的宗旨,…

「2020年大学生电子设计竞赛分享」电源题,省一等奖!

点击上方“大鱼机器人”,选择“置顶/星标公众号” 福利干货,第一时间送达! 01 到底参不参赛? 嗡嗡嗡,随着手机的一声振动,锁屏弹出了消息提醒,没看全文,依稀瞄到2020……TI杯……几…

智能送药小车(F 题)--2021 年全国大学生电子设计竞赛

智能送药小车(F 题)--2021 年全国大学生电子设计竞赛 一 任务二 要求1.基本要求2.发挥部分 三 说明四 评分标准优秀作品开源参考(来源立创开源平台)文件 一 任务 设计并制作智能送药小车,模拟完…

电子设计竞赛设计总结报告写作

文末免费下载资料 内容提要 设计总结报告是电子设计竞赛作品的一个重要组成部分,占50分。本章介绍了设计总结报告的评分标准分析,设计总结报告的内容、要求与应注意的一些问题,给出了3个设计与总结报告示例。 知识要点: 设计总结…

2017年全国大学生电子设计竞赛综合测评题

2017年全国大学生电子设计竞赛综合测评题 题目如下: 题目要求电源只能使用5V单电源、给运放使用5V单电源供电。 方波发生电路 有点像梯形是因为multisim上的LM324跟不上变化的速度,使用题目中的AD2302即可。 输出为接近5V的方波,使用滑动变…

2022年全国大学生电子设计大赛省赛A题

2022年全国大学生电子设计大赛省赛A题 (交流电子负载) 文章目录 2022年全国大学生电子设计大赛省赛A题 (交流电子负载)前言一、总体思路二、模块设计1.半桥模块2.测量模块3.辅助电源模块 三、主电路搭建总结 前言 2022年全国大学生电子设计大赛省一第一名(受学校省…

2022暑期学校——简单实现2021年电子设计竞赛国赛题目

目录 设计目标: 设计思路: 设计方案: 电机驱动 1)时钟配置 2)SYS配置 3)PWM信号输出 4)电机控制思路 5)电机驱动代码 电脑通讯 1)CubeMx配置 2)电脑通讯代码 HC05蓝牙通讯 1)HC05原理讲解 2&am…

电子设计大赛-放大器类题目分析

关注v-x-公-众-号:【嵌入式基地】 后-台-回-复:【电赛】 即可获资料 回复【编程】即可获取 包括有:C、C、C#、JAVA、Python、JavaScript、PHP、数据库、微信小程序、人工智能、嵌入式、Linux、Unix、QT、物联网、算法导论、大数据等资料 电子…

电子设计大赛-信号源类题目分析

文末下载完整资料 实用信号源的设计和制作[2] (第2届,1995年) (1)设计任务 在给定15V电源电压条件下,设计并制作一个正弦波和脉冲波信号源。 (2)设计要求 ①基本要求 第1部分&…

电子设计大赛-仪器仪表类题目分析

文末下载完整资料 简易电阻、电容和电感测试仪[2](第二届,1995年) (1)设计任务   设计并制作一台数字显示的电阻、电容和电感参数测试仪,示意框图如图1.3.23所示。 (2)设计要求 ①基本要求…