加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

tms320f2812启动流程

发布时间:2020-12-15 06:11:04 所属栏目:百科 来源:网络整理
导读:???? 1),首先f2812上电之后,cpu处理boot ROM中的内容(地址是:0x3F F000,大小4k*16)。头3k*16是存放数学函数表,不需要处理。接下来存放的是bootloader函数和一些芯片版本的校对信息。最后是cpu 向量表,cpu只处理第一条:复位向量。复位后(上电,手

???? 1),首先f2812上电之后,cpu处理boot ROM中的内容(地址是:0x3F F000,大小4k*16)。头3k*16是存放数学函数表,不需要处理。接下来存放的是bootloader函数和一些芯片版本的校对信息。最后是cpu 向量表,cpu只处理第一条:复位向量。复位后(上电,手动等),程序先从复位向量执行(0x3F FFC0)

??? 2),执行完复位向量后执行initBoot函数,这个函数文档中没有找到具体干些什么。

??? 3),接着call select bootmode function.这一步主要是根据外部引脚(gpiof4,f12,f3,f2)来确定程序接下来执行的位置。具体如下图:


???

如果是跳到flash执行代码,由于制定的跳转位置是0x3F 7FF6,这正是csm密码代码的前一个位置,所以不能从这里开始程序,必须在这个地址安排一条跳转指令,跳到flash别的地方执行,当然代码是存在哪个地方的了。跳到H0就没什么问题了。这里不研究bootloader了,没看懂。

???

??? 好了,这样,处理器顺利的跑到了我们想要的地方(sram或者flash),接下来就是我们要做在这里安排一个代码了。也就是把代码放在sram或者flash中。怎么来安排代码呢?当然是cmd文件了,通过cmd文件你可以随便把你的代码安排在哪个地方(当然,随便放是运行不了的),所以把代码安排在H0中或者flash中。下面贴个cmd文件的例子。

?

/*------------------------------------------*/
/*描述:设置堆栈值????????? */
/*------------------------------------------*/
-stack 400

/*------------------------------------------*/
/*描述:通过MEMORY伪指令来指示存储空间?????? */
/*------------------------------------------*/
MEMORY
{
?PAGE 0:
?? RAMM0????? : origin = 0x000000,length = 0x000400
?? BEGIN????? : origin = 0x3F8000,length = 0x000002????????????
?? PRAMH0???? : origin = 0x3F8002,length = 0x000FFE
?? RESET????? : origin = 0x3FFFC0,length = 0x000002???

?PAGE 1:
?? RAMM1??? : origin = 0x000400,length = 0x000400
?? DRAMH0?? : origin = 0x3F9000,length = 0x001000??
?
?? DEV_EMU???? : origin = 0x000880,length = 0x000180???? /* device emulation registers */
?? PIE_VECT??? : origin = 0x000D00,length = 0x000100???? /* PIE Vector Table */
?? 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? : origin = 0x000C08,length = 0x000008???? /* CPU Timer1 registers */
?? CPU_TIMER2? : origin = 0x000C10,length = 0x000008???? /* CPU Timer2 registers */
?? PIE_CTRL??? : origin = 0x000CE0,length = 0x000020???? /* PIE control registers */
?? ECANA?????? : origin = 0x006000,length = 0x000040???? /* eCAN control and status registers */
?? ECANA_LAM?? : origin = 0x006040,length = 0x000040???? /* eCAN local acceptance masks */
?? ECANA_MOTS? : origin = 0x006080,length = 0x000040???? /* eCAN message object time stamps */
?? ECANA_MOTO? : origin = 0x0060C0,length = 0x000040???? /* eCAN object time-out registers */
?? ECANA_MBOX? : origin = 0x006100,length = 0x000100???? /* eCAN mailboxes */
?? SYSTEM????? : origin = 0x007010,length = 0x000020???? /* System control registers */
?? SPIA??????? : origin = 0x007040,length = 0x000010???? /* SPI registers */
?? SCIA??????? : 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 */
?? EVA???????? : origin = 0x007400,length = 0x000040???? /* Event Manager A registers */
?? EVB???????? : origin = 0x007500,length = 0x000040???? /* Event Manager B registers */
?? SCIB??????? : origin = 0x007750,length = 0x000010???? /* SCI-B registers */
?? MCBSPA????? : origin = 0x007800,length = 0x000040???? /* McBSP registers */
?? CSM_PWL???? : origin = 0x3F7FF8,length = 0x000008???? /* Part of FLASHA.? CSM password locations. */
}

/*------------------------------------------*/
/*描述:通过SECTION伪指令来分配段到存储空间? */
/*------------------------------------------*/?
SECTIONS
{
?? PieVectTableFile : > PIE_VECT,?? PAGE = 1

/*** 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
?? CpuTimer1RegsFile : > CPU_TIMER1,? PAGE = 1
?? CpuTimer2RegsFile : > CPU_TIMER2,? PAGE = 1?
?? PieCtrlRegsFile?? : > PIE_CTRL,??? PAGE = 1?????

/*** Peripheral Frame 1 Register Structures ***/
?? ECanaRegsFile???? : > ECANA,?????? PAGE = 1
?? ECanaLAMRegsFile? : > ECANA_LAM??? PAGE = 1??
?? ECanaMboxesFile?? : > ECANA_MBOX?? PAGE = 1
?? ECanaMOTSRegsFile : > ECANA_MOTS?? PAGE = 1
?? ECanaMOTORegsFile : > ECANA_MOTO?? PAGE = 1

/*** Peripheral Frame 2 Register Structures ***/
?? SysCtrlRegsFile?? : > SYSTEM,????? PAGE = 1
?? SpiaRegsFile????? : > SPIA,??????? PAGE = 1
?? SciaRegsFile????? : > SCIA,??????? PAGE = 1
?? XIntruptRegsFile? : > XINTRUPT,??? PAGE = 1
?? GpioMuxRegsFile?? : > GPIOMUX,???? PAGE = 1
?? GpioDataRegsFile? : > GPIODAT????? PAGE = 1
?? AdcRegsFile?????? : > ADC,???????? PAGE = 1
?? EvaRegsFile?????? : > EVA,???????? PAGE = 1
?? EvbRegsFile?????? : > EVB,???????? PAGE = 1
?? ScibRegsFile????? : > SCIB,??????? PAGE = 1
?? McbspaRegsFile??? : > MCBSPA,????? PAGE = 1
??
/*** Code Security Module Register Structures ***/
?? CsmPwlFile??????? : > CSM_PWL,???? PAGE = 1

?? codestart??????? : > BEGIN,?????? PAGE = 0
?? ramfuncs???????? : > PRAMH0?????? PAGE = 0?
?? .text??????????? : > PRAMH0,????? PAGE = 0
?? .cinit?????????? : > PRAMH0,????? PAGE = 0
?? .pinit?????????? : > PRAMH0,????? PAGE = 0
?? .switch????????? : > RAMM0,?????? PAGE = 0
?? .reset?????????? : > RESET,?????? PAGE = 0,TYPE = DSECT /* not used,*/
??
?? .stack?????????? : > RAMM1,?????? PAGE = 1
?? .ebss??????????? : > DRAMH0,????? PAGE = 1
?? .econst????????? : > DRAMH0,????? PAGE = 1?????
?? .esysmem???????? : > DRAMH0,????? PAGE = 1

这是在ram中运行的cmd文件。在flash中也差不多了。

?

现在来分析下程序运行的顺序。

1),安排在H0首地址的是一个codestart文件,我查了下,主要是选择禁止看门狗,然后跳到_c_int00函数

2),执行_c_int00函数,主要是执行一些初始化操作,然后跳到main()函数。

?

程序顺利执行到了main()中,接下来就是我们编写的运用程序了。

第一次写技术博客,一方面是想理理自己的思维,理一下学的东西,另一方面也是想和csdn上的一些技术达人们探讨技术,互相学习,共同进步。希望xdjm没不要留情面,尽情拍砖!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读