DSP2812 启动详解
百度文库转载
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.
5.调用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指向低64K地址
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 启动详解的更多相关文章
- 深入浅出mybatis之启动详解
深入浅出mybatis之启动详解 MyBatis功能丰富,但使用起来非常简单明了,今天我们来追踪一下它的启动过程. 目录 如何启动MyBatis 如何使用MyBatis MyBatis启动过程 如何启 ...
- Linux 启动详解之init
1.init初探 init是Linux系统操作中不可缺少的程序之一.init进程,它是一个由内核启动的用户级进程,然后由它来启动后面的任务,包括多用户环境,网络等. 内核会在过去曾使用过init的几个 ...
- Linux启动详解
<概述> Linux启动大致分为一下几个步骤,详细的启动步骤在<启动分析>中详解. 1:首先bios加电自检,初始化(这个过程会检测相关硬件(cpu,内存,显卡,硬盘等)) 2 ...
- Linux开机启动详解
Linux开机启动程序详解 我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤 ...
- Hadoop- 集群启动详解
NameNode启动过程详解 第一次启动:HDFS格式化后,生成fsimage文件 hdf
- Mongodb安装启动详解
最近在倒腾node+mongodb,安装mongodb的时候开始遇到很多问题,然后折腾了好几次,直到可以很顺利完成安装 ,所以把安装的过程记录下来. 线上系统基本上都是linux的,所以只安装了lin ...
- laravel5.1启动详解
laravel的启动过程 如果没有使用过类似Yii之类的框架,直接去看laravel,会有点一脸迷糊的感觉,起码我是这样的.laravel的启动过程,也是laravel的核心,对这个过程有一个了解,有 ...
- spring boot容器启动详解
目录 一.前言 二.容器启动 三.总结 =======正文分割线====== 一.前言 spring cloud大行其道的当下,如果不了解基本原理那么是很纠结的(看见的都是约定大于配置,但是原理呢?为 ...
- Springboot 启动详解
1.前言 最近一直在看Springboot和springcloud代码,看了将近20多天,对这两个系统的认知总算是入了门.后续应该会有一个系列的文章,本文就先从Springboot的启动入手. 2.容 ...
随机推荐
- 7.6 GRASP原则六: 多态 Polymorphism
GRASP原则六: 多态 Polymorphism How to handle alternative behaviors based on type 如何处理依据类型不同而有 不同行为的一类需求 ...
- PAT 1092 To Buy or Not to Buy
1092 To Buy or Not to Buy (20 分) Eva would like to make a string of beads with her favorite colors ...
- spring boot多模块项目找不到类
项目结构 mapper依赖pojo, service依赖mapper和pojo portal依赖pojo和service. 全都是maven模块 <groupId>com.haitian& ...
- Django框架(五)
九.Django与Ajax 一.Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语 ...
- 用Apache Ant在Weka中嵌入新算法
本文将介绍一种新的添加新的算法到Weka中的方法,国内的论坛基本都是通过IDE(Eclipse或NetBeans)编译,详细教程请见上一篇博客.经研究,发现国外的网站很流行用Ant这个方法,教程奉上. ...
- C# 自定义配置文件
配置文件有两种设置方式,第一种是直接在网站根目录下的web.config中设置:第二种方式是自定义配置文件,在web.config中指定其他配置文件的路径. 第一种:除了在常用的appSettings ...
- 搜狗浏览器或者360浏览器安装chrome 浏览器插件
https://www.cnblogs.com/ingvar/p/6403777.html#undefined
- 3D打印GCODE文件学习(一)
我家有一个天威的入门级的3D打印机.它有一个配套的软件叫“Rrint-RiteCoLiDo Repetier-Host V1.5.5”,用来连接.控制打印机.同时它可以加载各种切片软件,对各种3D模型 ...
- nopcommerce 4.1 学习2 -插件之挂件
先了解下nop4.1的一些插件有哪些类型: 1.支付插件 Nop.Plugin.Payments.PayPalStandard Nop.Plugin.Payments.CheckMoneyOrd ...
- 深入path类
Path类放在System.IO命名空间里.Path是一个只包含有静态方法的实例类,所以它不需要在使用之前实例化.它有各种方法用于处理文件的扩展名.文件名.根路径,以及和更多和路径相关的方面.下面就是 ...