失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 初学DSP(1)-TMS320F280049C入门

初学DSP(1)-TMS320F280049C入门

时间:2020-07-30 08:10:03

相关推荐

初学DSP(1)-TMS320F280049C入门

目录

前提

知识点

深入了解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™ 开发套件

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

/fanxianyan1993/article/details/89392792

https://whyorwhnt./article/details/104227550

/sphinz1/article/details/78828909

https://whyorwhnt./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.textwd_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.librts2800_fpu32_fast_supplement_eabi.lib其他数学库(正在学习)

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

xml

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

运行无错误

下载,掉电重启正常。

如果觉得《初学DSP(1)-TMS320F280049C入门》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。