📄 dual-ram.txt
字号:
F2812中的文件结构
(1).在DSP的cmd文件中,主要分为MEMORY和SECTION两部分,其中MEMORY用来将寄存器和外设存储器同地址空间相映射;而SECTION部分则将数据段分配到MEMORY中映射好的空间。MEMORY和SECTION中用户都可以自己定义在user ram 和user data部分。例如,在MEMORY中将DUALRAM映射到地址空间0x002000到0x002800,在SECTION中将DaulRamFile数据段对应到DUALRAM空间去。
MEMORY
{
PAGE 0: /* Program Memory */
ZONE0 : origin = 0x002000, length = 0x002000 /* XINTF zone 0 */
ZONE1 : origin = 0x004000, length = 0x002000 /* XINTF zone 1 */
L0SARAM : origin = 0x008000, length = 0x001000 /* 4Kw L0 SARAM */
ZONE2 : origin = 0x080000, length = 0x080000 /* XINTF zone 2 */
ZONE6 : origin = 0x100000, length = 0x080000 /* XINTF zone 6 */
OTP : origin = 0x3D7800, length = 0x000400 /* on-chip OTP */
FLASH_IJ : origin = 0x3D8000, length = 0x004000 /* on-chip FLASH */
FLASH_GH : origin = 0x3DC000, length = 0x008000 /* on-chip FLASH */
FLASH_EF : origin = 0x3E4000, length = 0x008000 /* on-chip FLASH */
FLASH_CD : origin = 0x3EC000, length = 0x008000 /* on-chip FLASH */
FLASH_AB : origin = 0x3F4000, length = 0x003F80 /* on-chip FLASH */
CSM_RSVD : origin = 0x3F7F80, length = 0x000076 /* Part of FLASHA. Reserved when CSM is in use. */
BEGIN_FLASH : origin = 0x3F7FF6, length = 0x000002 /* Part of FLASHA. Used for "boot to flash" bootloader mode. */
PASSWORDS : origin = 0x3F7FF8, length = 0x000008 /* Part of FLASHA. CSM password locations. */
BEGIN_H0 : origin = 0x3F8000, length = 0x000002 /* Part of H0SARAM. Used for "boot to H0" bootloader mode. */
H0SARAM : origin = 0x3F8002, length = 0x001FFE /* 8Kw H0 SARAM */
/* ZONE7 : origin = 0x3FC000, length = 0x003FC0 /* XINTF zone 7 available if MP/MCn=1 */
BOOTROM : origin = 0x3FF000, length = 0x000FC0 /* boot ROM available if MP/MCn=0 */
RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */
VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */
PAGE 1 : /* Data Memory */
M0SARAM : origin = 0x000000, length = 0x000400 /* 1Kw M0 SARAM */
M1SARAM : origin = 0x000400, length = 0x000400 /* 1Kw M1 SARAM */
L1SARAM : origin = 0x009000, length = 0x001000 /* 4Kw L1 SARAM */
/* Peripheral Frame 0: */
DEV_EMU : origin = 0x000880, length = 0x000180
FLASH_REGS : origin = 0x000A80, length = 0x000060
CSM : origin = 0x000AE0, length = 0x000010
XINTF : origin = 0x000B20, length = 0x000020
……
/* Peripheral Frame 1: */
ECAN_A : origin = 0x006000, length = 0x000100
ECAN_AMBOX : origin = 0x006100, length = 0x000100
……
/* Peripheral Frame 2: */
SYSTEM : origin = 0x007010, length = 0x000020
SPI_A : origin = 0x007040, length = 0x000010
SCI_A : origin = 0x007050, length = 0x000010
……
/*user Ram : 6416*/
XRAM1 : origin = 0x080000, length = 0x001000
XRAM2 : origin = 0x081000, length = 0x00F000
/*daul ram addr 7132*/
DAULRAM : origin = 0x002000, length = 0x000800
/* CSM Password Locations */
CSM_PWL : origin = 0x3F7FF8, length = 0x000008
}
SECTIONS
{
/*** Compiler Required Sections ***/
/* Program memory (PAGE 0) sections */
.text : > FLASH_GH, PAGE = 0
.cinit : > FLASH_CD, PAGE = 0
.const : > FLASH_CD, PAGE = 0
.econst : > FLASH_CD, PAGE = 0
.pinit : > FLASH_CD, PAGE = 0
.reset : > RESET, PAGE = 0, TYPE = DSECT
.switch : > FLASH_CD, PAGE = 0
/* Data Memory (PAGE 1) sections */
.bss : > L1SARAM, PAGE = 1
.ebss : > L1SARAM, PAGE = 1
.cio : > M0SARAM, PAGE = 1
.stack : > M1SARAM, PAGE = 1
.sysmem : > L1SARAM, PAGE = 1
.esysmem : > L1SARAM, PAGE = 1
/*** User Defined Sections ***/
codestart : > BEGIN_FLASH, PAGE = 0 /* Used by file CodeStartBranch.asm */
csm_rsvd : > CSM_RSVD, PAGE = 0, TYPE = DSECT /* Not used in RAM example */
passwords : > PASSWORDS, PAGE = 0, TYPE = DSECT /* Not used in RAM example */
/* Used by InitFlash() in SysCtrl.c */
secureRamFuncs : LOAD = FLASH_AB, PAGE = 0
RUN = H0SARAM, PAGE = 0
LOAD_START(_secureRamFuncs_loadstart),
LOAD_END(_secureRamFuncs_loadend),
RUN_START(_secureRamFuncs_runstart)
/* Allocate Peripheral Frame 0 Register Structures: */
DevEmuRegsFile : > DEV_EMU, PAGE = 1
FlashRegsFile : > FLASH_REGS, PAGE = 1
CsmRegsFile : > CSM, PAGE = 1
XintfRegsFile : > XINTF, PAGE = 1
……
/* Allocate Peripheral Frame 2 Register Structures: */
ECanaRegsFile : > ECAN_A, PAGE = 1
ECanaMboxesFile : > ECAN_AMBOX PAGE = 1
……
/* Allocate Peripheral Frame 1 Register Structures: */
SysCtrlRegsFile : > SYSTEM, PAGE = 1
SpiaRegsFile : > SPI_A, PAGE = 1
SciaRegsFile : > SCI_A, PAGE = 1
……
//user data
DaulRamFile : >DAULRAM, PAGE = 1
OriginCodeDataFile : >XRAM1 , PAGE = 1
EditedCodeDataFile : >XRAM2 , PAGE = 1
/* CSM Password Locations */
CsmPwlFile : > CSM_PWL, PAGE = 1
/*==========================================================*/
/* Tables for IQ math functions: */
IQmathTables : load = BOOTROM, type = NOLOAD,PAGE = 0
IQmath : load = FLASH_EF, PAGE = 0
/*==========================================================*/
}
(2).将寄存器或用户自定义的文件结构分配到空间中:首先,在头文件(.h)中定义好自己的结构体或其他变量,例如在某头文件中定义如下结构体:
typedef struct _DAULRAM_DATA
{
unsigned char X_DspData1; //dsp给单片机的命令
unsigned char X_DspData2; //dsp给单片机的命令
unsigned char X_McuActionEn; //0x0001
…… //0x07E0
unsigned char X_CurrentPart; //0x07E1
unsigned char X_CodeReadFlag; //0x07E2
}DAULRAM_DATA; //DaulRam
然后在相应的.c文件中使用如下语句,即定义结构体DAULRAM_DATA类型的数据变量DaulRam,并用#pragma语句将其分配到“DaulRamFile”数据段中。
#ifdef __cplusplus
#pragma DATA_SECTION("DaulRamFile")
#else
#pragma DATA_SECTION(DaulRam ,"DaulRamFile");
#endif
volatile DAULRAM_DATA DaulRam;
然后定义指针,就可以使用DaulRam来使用相应空间的数据或程序了。如下所示:
volatile unsigned char * nf0x;
nf0x= ( unsigned char *)(DaulRam.X_Tine);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -