目录
前提
知识点
深入了解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入门》对你有帮助,请点赞、收藏,并留下你的观点哦!