最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

DSP2812 启动详解

来源:动视网 责编:小OO 时间:2025-09-26 20:06:07
文档

DSP2812 启动详解

DSP2812启动详解2009-01-3118:441.从0X3FFFC0处复位→执行0X3FFC00地址处的初始化引导函数(Initboot)→根据GPIO选择引导模式→确定用户程序入口地址→从入口处开始执行用户程序。     输入外部引脚为/XRS,当/XRS为低电平时,DSP终止执行,PC指向地址:0x3FFFC0,当/xRS变成高电平时,DSP开始执行0x3FFFC0中存放的指令。这条指令是条跳转指令或者说是复位中断向量,这个中断向量指向地址0X3FFC00处的初始化引导函数(Init
推荐度:
导读DSP2812启动详解2009-01-3118:441.从0X3FFFC0处复位→执行0X3FFC00地址处的初始化引导函数(Initboot)→根据GPIO选择引导模式→确定用户程序入口地址→从入口处开始执行用户程序。     输入外部引脚为/XRS,当/XRS为低电平时,DSP终止执行,PC指向地址:0x3FFFC0,当/xRS变成高电平时,DSP开始执行0x3FFFC0中存放的指令。这条指令是条跳转指令或者说是复位中断向量,这个中断向量指向地址0X3FFC00处的初始化引导函数(Init
DSP2812 启动详解

2009-01-31 18:44

1. 从0X3F FFC0处复位→执行0X3F FC00地址处的初始化引导函数(Initboot) →根据GPIO选择引导模式→确定用户程序入口地址→从入口处开始执行用户程序。

      输入外部引脚为/XRS, 当/XRS为低电平时,DSP终止执行,PC指向地址:0x3FFFC0,当/xRS变成高电平时,DSP开始执行0x3FFFC0中存放的指令。这条指令是条跳转指令或者说是复位中断向量,这个中断向量指向地址0X3F FC00处的初始化引导函数(Initboot),即将地址0x3FFC00(函数initboot的首地址)发给PC,值得注意的是:地址0X3F FFC0也有片内、片外两种,具体的选择情况是:当系统上电运行时,根据XMP/MC引脚的状态决定是从片外的3fffc0处读取复位向量或者时从片内的rom的3fffc0处读取复位向量。低电平方式下从片内读取,高电平方式下从片外读取。InitBoot 函数所做工作有:1.初始化状态寄存器;2.将堆栈指针设为0x400(0x400 - 0x44F作为启动过程中的堆栈);3.读CSM密码保护部分;如果是从片内读取的,则以上程序都是被固化在rom中的,无法更改,4.调用SelectBootMode;模式的选择是由四个引脚GPIOF4(SCITXDA), GPIOF12(MDXA), GPIOF3 (SPISTEA), GPIOF2(SPICLK5).的状态决定的,若为1xxx则跳转到FLASH地址0x3F7FF6, 0010为H0 SARAM地址为0x3F8000.

调用ExitBoot

以上是BootROM完成的工作。从entrypoint开始,就进入用户程序区了。对于汇编程序,可以在程序起点处写一条跳转到Start(如果 程序起点是Start)的指令。汇编情况比较简单,跳转到Start后,各项初始化代码工作都由自己完成。对于C语言程序,通常的做法是在程序起点处放置 一条跳转指令,转到_c_init0。

这个程序可在 DSP281x_CodeStartBranch.asm中找到,然后程序的执行分为使用或不使用BIOS两种情况。 

  从rts.src中提取boot28.inc文件,其中包括对于不使用BIOS的情况下,启动后从_c_init0到main函数中间所做的工 作。因为这段代码是由C编译器自动运行的,因而常被初学者忽视,以致对其后自己编写的C代码的运行环境不清楚。这一段程序主要完成以下工作:

  ◇ 分配C堆栈;

◇ 建立C运行环境(CPU寄存器和模式寄存器的配置);

◇ 复制cinit、pinit表、.const、.econst常量到工作区;

◇ 跳转到main函数。

  这段代码声明了2个全局变量:__stack,系统堆栈栈底;_c_int00,启动函数。下面列出了C运行环境的初始化程序部分代码:

  C28OBJ;选择C28x对象模式

C28ADDR;清除地址模式位

C28MAP;设置M0M1模式

CLRCPAGE0;使用堆栈寻址模式

MOVWDP,#0;初始化DP指向低K地址

CLRCOVM;关闭溢出模式

ASP;确保SP对齐

  这些代码设置了C语言的运行环境。在用户程序中编写的汇编代码不应该破坏这个环境,否则C语言将无法正常运行。

boot rom中存放的bootloader源文件可在文件TMS320x281x DSP Boot ROM Reference Guide的附件中找到,可从TI网站上搜索该文件

PC的作用:为了保证程序(在操作系统中理解为进程)能够连续地执行下去,CPU必须具有某些手段来确定下一条指令的地址。而程序计数器正是起到这种作用,所以通常又 称为指令计数器。在程序开始执行前,必须将它的起始地址,即程序的一条指令所在的内存单元地址送入PC,因此程序计数器(PC)的内容即是从内存提取的第 一条指令的地址。当执行指令时,CPU将自动修改PC的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数,以便使其保持的总是将要执行 的下一条指令的地址。由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对PC加1。

文档

DSP2812 启动详解

DSP2812启动详解2009-01-3118:441.从0X3FFFC0处复位→执行0X3FFC00地址处的初始化引导函数(Initboot)→根据GPIO选择引导模式→确定用户程序入口地址→从入口处开始执行用户程序。     输入外部引脚为/XRS,当/XRS为低电平时,DSP终止执行,PC指向地址:0x3FFFC0,当/xRS变成高电平时,DSP开始执行0x3FFFC0中存放的指令。这条指令是条跳转指令或者说是复位中断向量,这个中断向量指向地址0X3FFC00处的初始化引导函数(Init
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top