在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 6275|回复: 3

[原创] 2812的内部flash启动过程

[复制链接]
发表于 2006-12-17 15:30:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 cjsb37 于 2013-4-29 09:12 编辑

2812的内部flash启动过程
[url=]  [/url]2812从内部flash启动的详细流程说明:
a)         程序硬件复位或者软件复位
b)        判断mp/mc是否为0
c)         0则从boot rom启动,否则从外部启动
d)        boot rom0x3F FFC0处取出复位向量,跳到boot函数
e)         采集io管脚状态,
f)         根据io状态选择boot方式
g)        如果是flash,程序退出boot函数,跳转到0x3F 7FF6
h)        取出跳转指令,跳转到自己的指定地址或者C初始化的入口_C_INT00
i)          C初始化的入口_C_INT00对一些变量,堆栈和寄存器进行必要的设置,该函数在c的库函数内
j)          进入main函数



我烧写2812之后,脱离仿真器不运行,但是烧写完成之后,发现在0x3F FFC0是ADRK ,0x3F 7FF6位置全是0xFFFF,并没有跳转指令.
下面是我的CMD文件,高手指点一下

MEMORY
{
PAGE 0:    /* Program Memory */
/* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */
RAML0       : origin = 0x008000, length = 0x001000     /* on-chip RAM block L0 */
OTP         : origin = 0x3D7800, length = 0x000800     /* on-chip OTP */
FLASHJ      : origin = 0x3D8000, length = 0x002000     /* on-chip FLASH */
FLASHI      : origin = 0x3DA000, length = 0x002000     /* on-chip FLASH */
FLASHH      : origin = 0x3DC000, length = 0x004000     /* on-chip FLASH */
FLASHG      : origin = 0x3E0000, length = 0x004000     /* on-chip FLASH */
FLASHF      : origin = 0x3E4000, length = 0x004000     /* on-chip FLASH */
FLASHE      : origin = 0x3E8000, length = 0x004000     /* on-chip FLASH */
FLASHD      : origin = 0x3EC000, length = 0x004000     /* on-chip FLASH */
FLASHC      : origin = 0x3F0000, length = 0x004000     /* on-chip FLASH */
FLASHA      : origin = 0x3F6000, length = 0x001FF6     /* on-chip FLASH */
BEGIN       : origin = 0x3F7FF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */
ROM         : 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 */
/* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */
/* Registers remain on PAGE1 */

RAMM01       : origin = 0x000000, length = 0x000800     /* on-chip RAM block M0 */
/*   RAMM1       : origin = 0x000400, length = 0x000400 */     /* on-chip RAM block M1 */
DEV_EMU     : origin = 0x000880, length = 0x000180     /* Device emulation registers */
FLASH_REGS  : origin = 0x000A80, length = 0x000060     /* FLASH registers */
CSM         : origin = 0x000AE0, length = 0x000010     /* Code security module registers */
XINTF       : origin = 0x000B20, length = 0x000020     /* External interface registers */
CPU_TIMER0  : origin = 0x000C00, length = 0x000008     /* CPU Timer0 registers (CPU Timer1 and Timer2 are reserved for BIOS)*/
PIE_CTRL    : origin = 0x000CE0, length = 0x000020     /* PIE control registers */
PIE_VECT    : origin = 0x000D00, length = 0x000100     /* PIE vector table */

/* XINTF ZONE0  */
XINTF_DURAM: origin = 0x002000, length = 0x001000      /* Dualram address space*/

ECAN_A      : origin = 0x006000, length = 0x000100     /* eCAN registers */
ECAN_AMBOX  : origin = 0x006100, length = 0x000100     /* eCAN mailboxes */
SYSTEM      : origin = 0x007010, length = 0x000020     /* System control registers */
SPI_A       : origin = 0x007040, length = 0x000010     /* SPI registers */
SCI_A       : origin = 0x007050, length = 0x000010     /* SCI-A registers */
XINTRUPT    : origin = 0x007070, length = 0x000010     /* External interrupt registers */
GPIOMUX     : origin = 0x0070C0, length = 0x000020     /* GPIO mux registers */
GPIODAT     : origin = 0x0070E0, length = 0x000020     /* GPIO data registers */
ADC         : origin = 0x007100, length = 0x000020     /* ADC registers */
EV_A        : origin = 0x007400, length = 0x000040     /* Event Manager A registers */
EV_B        : origin = 0x007500, length = 0x000040     /* Event Manager B registers */
SCI_B       : origin = 0x007750, length = 0x000010     /* SCI-B registers */
MCBSP_A     : origin = 0x007800, length = 0x000040     /* McBSP registers */
RAML1       : origin = 0x009000, length = 0x001000     /* on-chip RAM block L1 */
FLASHB      : origin = 0x3F4000, length = 0x002000     /* on-chip FLASH */
CSM_PWL     : origin = 0x3F7FF8, length = 0x000008     /* CSM password locations in FLASHA */
RAMH0       : origin = 0x3F8000, length = 0x002000     /* on-chip RAM block H0 */
}

/* Allocate sections to memory blocks.
Note:
codestart user defined section in DSP28_CodeStartBranch.asm used
to redirect code
execution when booting to flash
ramfuncs  user defined section to store functions that will be
copied from Flash into RAM
*/

SECTIONS
{
/* Allocate program areas: */
.cinit              : > FLASHJ,      PAGE = 0
.text               : > FLASHJ,      PAGE = 0   
codestart           : > BEGIN,       PAGE = 0      
ramfuncs            : LOAD = FLASHJ, RUN = RAML0, PAGE = 0 /**/


/* Allocate uninitalized data sections: */
.stack              : > RAMM01,      PAGE = 1
.bss                : > RAML1,       PAGE = 1
.ebss               : > RAML1,       PAGE = 1
.sysmem             : > RAMH0,       PAGE = 1
.esysmem            : > RAMH0,       PAGE = 1
/* Initalized sections go in Flash */
.const              : > FLASHB,      PAGE = 1
.econst             : > FLASHB,      PAGE = 1      
.switch             : > FLASHB,      PAGE = 1
/*xzb add 2005.02.19 */
/* Allocate IQ math areas: */
IQmath              : > FLASHC,      PAGE = 0                  /* Math Code */
IQmathTables        : > ROM,         PAGE = 0, TYPE = NOLOAD   /* Math Tables In ROM */
/* .reset indicates the start of _c_int00 for C Code.  
/* When using the boot ROM this section and the CPU vector
/* table is not needed.  Thus the default type is set to
/* DESECT */
.reset              : > RESET,      PAGE = 0, TYPE = DSECT/**/
vectors             : > VECTORS,     PAGE = 0, TYPE = DSECT
/* ------------------------------------------------------------- */
/* The following allocations are required for the DSP28 Header file
examples.  Each allocation maps a structure defined in the DSP28
header files to the memory location of those registers.  
*/
/* Allocate Peripheral Frame 0 Register Structures:   */
DevEmuRegsFile      : > DEV_EMU,     PAGE = 1
FlashRegsFile       : > FLASH_REGS,  PAGE = 1
CsmRegsFile         : > CSM,         PAGE = 1
XintfRegsFile       : > XINTF,       PAGE = 1
CpuTimer0RegsFile   : > CPU_TIMER0,  PAGE = 1      
PieCtrlRegsFile     : > PIE_CTRL,    PAGE = 1      
PieVectTable        : > PIE_VECT,    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
SpiRegsFile         : > SPI_A,       PAGE = 1
SciaRegsFile        : > SCI_A,       PAGE = 1
XIntruptRegsFile    : > XINTRUPT,    PAGE = 1
GpioMuxRegsFile     : > GPIOMUX,     PAGE = 1
GpioDataRegsFile    : > GPIODAT,     PAGE = 1
AdcRegsFile         : > ADC,         PAGE = 1
EvaRegsFile         : > EV_A,        PAGE = 1
EvbRegsFile         : > EV_B,        PAGE = 1
ScibRegsFile        : > SCI_B,       PAGE = 1
McbspaRegsFile      : > MCBSP_A,     PAGE = 1
/* CSM Password Locations */
CsmPwlFile          : > CSM_PWL,     PAGE = 1
/*Allocate Dual Port Ram Structure */
Dual_Port_SpaceFile  :> XINTF_DURAM, PAGE = 1  
}

/*  .reset        : > BEGIN       PAGE = 0
   vectors      : > VECTORS  PAGE = 0
   .cinit          : > FLASHJ      PAGE = 0
   .text          : > FLASHA     PAGE = 0
   .stack       : > RAMM0M1    PAGE = 1
   .bss          : > RAML0L1     PAGE = 1
   .ebss        : > RAML0L1     PAGE = 1
   .const       :   load =FLASHB PAGE 0, run = RAML0L1 PAGE 1
        {__const_run = .;
         *(.c_mark)
         *(.const)
         __const_length = .-__const_run;
        }  
   
   .econst     :   load =FLASHB PAGE 0, run = RAML0L1 PAGE 1
        {__econst_run = .;
         *(.ec_mark)
         *(.econst)
         __econst_length = .-__econst_run;
        }   
*/






发表于 2006-12-18 17:58:44 | 显示全部楼层
可能是 .reset定义的问题

[ 本帖最后由 shichenghua 于 2006-12-18 17:59 编辑 ]
发表于 2006-12-26 20:54:01 | 显示全部楼层
谢谢!!!
发表于 2006-12-31 09:56:45 | 显示全部楼层
强人,解决不了你的问题。
建议使用烧写插件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-22 19:55 , Processed in 0.031485 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表