主题中讨论的其他器件:C2000WARE、 UNIFLASH
工具/软件:Code Composer Studio
您好!
我已经完成了闪存扇区 B 的 EEPROM 仿真。我现在可以写入/读取,但代码在调试模式下运行。 当我复位/关闭 LaunchPad 时、它不起作用。
已执行闪烁代码以确认存储器上的数据保留... 在调试模式下工作正常... 重置,关闭/on 电源,运行->加载方法不起作用...
run-->加载 不起作用。
Debug->Debug As Works
我的调试配置设置
闪存设置
代码:
//######################################################################################################################
//
//包含的文件
//
#include "F28x_Project.h"
#include
#include "flash_programming_c28.h"//闪存 API 示例头文件
#include "F021_F2837xD_C28x.h"
#include"EEPROM.h"
#include"Memcopy.h"
#include"stdio.h"
//
//定义
//
#define words _in_flash_buffer 0xFF //编程数据缓冲区、字
#ifdef __TI_Compiler_version__
#if __TI_Compiler_version__>=15009000
#define ramFunc 部分".TI.ramfunc"
其他
#define ramFunc 段"ramfuncs "
#endif
#endif
//
// Pragma
//
#pragma CODE_SECTION (EEPROM_Erase、"ramfuncs");
#pragma CODE_SECTION (EEPROM_Write、"ramfuncs");
#pragma CODE_SECTION (EEPROM_UpdateBankStatus、"ramfuncs");
#pragma CODE_SECTION (EEPROM_UpdatePageStatus、"ramfuncs");
#pragma CODE_SECTION (EEPROM_ProgramSingleByte、"ramfuncs");
#pragma DATA_SECTION (READ_Buffer、"BufferDataSection");
//
// LED
//
#define Blinky_LED_GPIO 31.
//
//全局
//
uint16_t 数据;
bool 标志;
int read_Buffer[64]={0};
//
//函数原型
//
void Example_Error (Fapi_StatusType 状态);
void example_done (void);
//
//主函
//
void main (void)
{
InitSysCtrl();
InitGpio(); //针对此示例跳过
GPIO_SetupPinMux (Blinky_LED_GPIO、GPIO_MUX_CPU1、0);
GPIO_SetupPinOptions (Blinky_LED_GPIO、GPIO_output、GPIO_PushPull);
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
//memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);
Memcopy (&RamfuncsLoadStart、&RamfuncsLoadEnd、&RamfuncsRunStart);
initeeprom();
// 步骤5. 用户特定代码:
//将闪存 API 函数复制到 SARAM
Memcopy (&Flash28_API_LoadStart、&Flash28_API_LoadEnd、&Flash28_API_RunStart);
SeizeFlashPump();
//
//跳转到 RAM 并调用闪存 API 函数
//
int j=0;
// EEPROM_GetSinglePointer (1);
数据= 1;
RESET_BANK_POINTER; //重置组指针以启用搜索当前组
RESET_PAGE_POINTER; //重置页指针以启用搜索当前页
// EEPROM_ProgramSingleByte (data);
flag=1;
while (1)
{
if (flag=1&&(* Bank_Pointer)=0xFFFF)//加电后 设置 flag=1
{
EEPROM_Write (7);
for (j=0;j<10;j++);
}
if (flag==1)
{
Read_Buffer[0]= EEPROM_Read (); //读取闪存
flag=0;
ReleaseFlashPump();
}
if (Read_Buffer[0]=7)
{
GPIO_WritePin (Blinky_LED_GPIO、0);
DELAY_US (1000*500);
GPIO_WritePin (Blinky_LED_GPIO、1);
DELAY_US (1000*500);
}
}
}
//
// example_done -对于此示例,完成后,只需在此处停止即可
//
#pragma CODE_SECTION (example_done、ramFuncSection);
void example_done (void)(空)
{
_asm (" ESTOP0");
}
//
//文件结束
//
命令文件 将 闪存作为引导模式:
存储器
{
第0页: /*程序内存*/
/*内存(RAM/FLASH/OTP)块可移动到第1页进行数据分配*/
/*本地共享内存--可由本地 CPU 及其 CLA 使用*/
/* begin 用于"引导至 SARAM"引导加载程序模式 */
开始 :origin = 0x080000,length = 0x000002
RAMM0 :origin = 0x000080,length = 0x000380
RAMD0 :origin = 0x00B000、length = 0x000800
RAMLS03 :origin = 0x008000、length = 0x002000
/* RAMLS1 :origin = 0x008800,length = 0x000800
RAMLS2 :origin = 0x009000,length = 0x000800
RAMLS3 :origin = 0x009800、length = 0x000800 *
RAMLS4 :origin = 0x00A000,length = 0x000800
RAMGS14 :origin = 0x01A000,length = 0x001000 //*仅在 F28379D/_、F28377D/F28377S、F28375D/F28375S 器件上可用。 移除其他设备上的线路。 *
RAMGS15 :origin = 0x01B000,length = 0x000FF8 //*仅在 F28379D/_、F28377D/F28377S、F28375D/F28375S 器件上可用。 移除其他设备上的线路。 *
// RAMGS15_RSVD :origin = 0x01BFF8,length = 0x000008 //根据勘误咨询“Memory:Prepetching Beyond valid Memory”(内存:超出有效内存的预取)来保留代码且不用于代码*/
复位 :origin = 0x3FFFC0,length = 0x000002
/*闪存扇区*/
FLASHA :origin = 0x080002,length = 0x001FFE /*片上闪存*/
FLASHB :origin = 0x082000、length = 0x002000 //片上闪存*
FLASHC :origin = 0x084000,length = 0x002000 //片上闪存*/
FLASHD :origin = 0x086000、length = 0x002000 //片上闪存*/
FLASHE :origin = 0x088000、length = 0x008000 //片上闪存*/
FLASHF :origin = 0x090000,length = 0x008000 //片上闪存*
FLASHG :origin = 0x098000、length = 0x008000 //片上闪存*/
FLASHH :origin = 0x0A0000,length = 0x008000 //片上闪存*/
FLASHI :origin = 0x0A8000、length = 0x008000 //片上闪存*/
FLASHJ :origin = 0x0B0000,length = 0x008000 //片上闪存*/
FLASHK :origin = 0x0B8000、length = 0x002000 //片上闪存*/
FLASHL :origin = 0x0BA000、length = 0x002000 //片上闪存*/
FLASHM :origin = 0x0BC000、length = 0x002000 //片上闪存*/
FLASHN :origin = 0x0BE000、length = 0x001FF0 /*片上闪存*/
// FLASHN_RSVD :origin = 0x0BFFF0,length = 0x000010 //根据勘误咨询“Memory:Prepetching Beyond valid Memory”(内存:有效内存之外的预取)来保留代码,不要将其用于代码*/
第1页:
BOOT_RSVD :origin = 0x000002,length = 0x00007E // M0的一部分,引导 ROM 将此用于栈*/
RAMM1 :origin = 0x000400,length = 0x0003F8 //片上 RAM 块 M1 */
// RAMM1_RSVD :origin = 0x0007F8,length = 0x000008 //根据勘误咨询“Memory:Prepetching Beyond valid Memory”(内存:超出有效内存的预取),保留并不用于代码*/
RAMD1 :origin = 0x00B800,length = 0x000800
RAMLS5 :origin = 0x00A800,length = 0x000800
RAMGS0 :origin = 0x00C000、length = 0x001000
RAMGS1 :origin = 0x00D000、length = 0x001000
CPU2TOCPU1RAM :origin = 0x03F800,length = 0x000400
CPU1TOCPU2RAM :origin = 0x03FC00,length = 0x000400
}
部分
{
/*分配计划领域:*/
.cinit :> FLASHD PAGE = 0
.pinit :> FLASHD, page = 0
.text :>> FLASHD | FLASHE PAGE = 0
codestart :> begin page = 0
#ifdef __TI_Compiler_version__
#if __TI_Compiler_version__>=15009000
组
{
.TI.ramfunc
{
l F021_API_F2837xD_FPU32.lib}
}
负载= FLASHD、
运行 = RAMLS03、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0
Flash28_API:
负载= FLASHD、
运行= RAMLS03、
Load_start (_Flash28_API_LoadStart)、
Load_End (_Flash28_API_LoadEnd)、
RUN_START (_Flash28_API_RunStart)、
PAGE = 0
其他
组
{
ramfuncs
{-l F021_API_F2837xD_FPU32.lib}
}负载= FLASHD,
运行 = RAMLS03、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0
Flash28_API:
负载= FLASHD、
运行= RAMLS03、
Load_start (_Flash28_API_LoadStart)、
Load_End (_Flash28_API_LoadEnd)、
RUN_START (_Flash28_API_RunStart)、
PAGE = 0
#endif
#endif
/*分配未初始化的数据段:*/
.stack :>RAMM1 page = 1.
.ebss :> RAMLS5 PAGE = 1.
.esysmem :> RAMLS5 PAGE = 1.
/*初始化段进入闪存*/
econst :>> FLASHF | FLASHG PAGE = 0
.switch :> FLASHD PAGE = 0
.reset :> reset, page = 0,type = DSECT //未使用,*/
SHARERAMGS0 :> RAMGS0, PAGE = 1
SHARERAMGS1 :>RAMGS1, PAGE = 1.
/*闪存编程缓冲器*/
BufferDataSection:>RAMD1,PAGE = 1,ALIG(8)
/*使用 IPC API 驱动程序时需要以下部分定义*/
组:> CPU2TOCPU1RAM,PAGE = 1
{
PUTBUFFER
PUTWRITEIDX
GETREADIDX
}
组:> CPU1TOCPU2RAM,PAGE = 1
{
GETBUFFER: TYPE = DSECT
GETWRITEIDX: TYPE = DSECT
PUTREADIDX: TYPE = DSECT
}
}
/*
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//文件结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*
完成了独立工作的步骤:
在符号管理中添加了 CODE_START 作为入口点
帮助我找到解决方案,为什么代码在复位/断电/运行模式时不起作用,以及所有...
在重置/重启/运行后->加载 Launchpad 上的蓝色 LED 指示灯始终亮起。
此致、(&H)
Rani

































