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。

时间: 2025-01-02 17:23:19

DSP2812  启动详解的相关文章

centos启动详解

centos启动的过程是怎样的呢? 1:加载BIOS信息(计算机的硬件信息在BIOS中有保存的)找到第一个引导设备(硬盘在bios里我们可以设置boot引导) 2:根据第一个引导设备找到它的MBR  的boot Loader(mbr是硬盘的第一个扇区 boot Loader可以认为是grub spfdisk等程序 ) 3:boot Loader 找kernel(内核),kernel会加载硬件信息和加载驱动程序(这里由硬件转到软件了) 4:之后会调用init进程 init会让各相关服务启动起来 c

PC104上配置VxWorks硬盘启动详解

DEVPC104-SYS是一款在 PC104 尺寸上开发出来的嵌入式工业主板.以其小巧的体积﹑超强的功能和稳定性,可广泛应用于自动查询系统﹑POS 机﹑网络终端﹑仪器仪表﹑信息家电.工业控制等各种嵌入式领域. VxWorks 是美国 Wind River System 公司推出的一个实时操作系统.通常所指的VxWorks操作系统对应软件包括三个部分:引导程序bootrom.主操作系统vxWorks.以及用户开发程序.Tornado提供一个集成的编译bootrom.vxWorks以及用户程序的工程

Android之Zygote启动详解

我们知道Android系统是基于Linux内核的,在Linux系统中所有的进程都是init进程的子进程.Zygote也一样它是在系统启动的过程中由init进程创建的,在系统启动脚本init.rc中: <span style="font-size:14px;">@init.rc service zygote /syste/bin/app_process -Xzygote /system/bin -zygote --start-system-server class main

深入浅出mybatis之启动详解

深入浅出mybatis之启动详解 MyBatis功能丰富,但使用起来非常简单明了,今天我们来追踪一下它的启动过程. 目录 如何启动MyBatis 如何使用MyBatis MyBatis启动过程 如何启动MyBatis 我们知道,SqlSessionFactory是MyBatis中最为核心的组件,每个基于MyBatis的应用都是以一个SqlSessionFactory实例为中心的.SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得,而SqlSess

Linux 启动详解之init

1.init初探 init是Linux系统操作中不可缺少的程序之一.init进程,它是一个由内核启动的用户级进程,然后由它来启动后面的任务,包括多用户环境,网络等. 内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init.如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败. 根据实际看一下,我们来到/boot下, 可以看见,Grub就在这里,vmlinuz-2.6.32-358.el6.i686这个文件很重要,

CentOS 7 Vsftpd无法启动详解

不小心安装了CentOS 7(说多了都是泪呀,各种不适应),不过随遇而安吧(PS:不要用既来之则安之,不懂的可以百度.),装完系统后想跑个Vsftpd, yum -y install vsftpd 坐等安装完毕(用的手机2G流量那个心塞). 启动vstfpd: service start vsftpd (这条命令现在已经不管用了,) /etc/init.d/vsftd start (想都不用想,就没有这个脚本) 这可怎么办?当然是systemctl了,这个命令在今后的版本里非常有用需要熟练掌握.

centos7开机启动详解

Centos 系统服务脚本目录: /usr/lib/systemd/ 有系统(system)和用户(user)之分, 如需要开机没有登陆情况下就能运行的程序,存在系统服务(system)里,即: /lib/systemd/system/ 反之,用户登录后才能运行的程序,存在用户(user)里 服务以.service结尾. 这边以nginx开机运行为例 1.建立服务文件 vim /lib/systemd/system/nginx.service [Unit]   Description=nginx

centos 7 上配置mysql 开机启动详解

之前多次在centos7环境下配置mysql开机自启动出现了错误.现留下篇文章已做记录 一.centos7与centos6相比有什么不同: 1 在centos7中服务不在是用service这个命令来启动与停止,也不再用chkconfig来设置开机启动与否! 在centos7中所有对服务的管理都集中到了systemctl当中:systemctl不再是合之前一样依赖/etc/init.d/下 的脚本,它是通过配置文件来完成对服务的管理的: 二.创建systemctl管理mysql的配置文件: 1 创

Centos iptables防火墙关闭启动详解

CentOS 7.0默认使用的是firewall作为防火墙,使用iptables必须重新设置一下 1.直接关闭防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 2.设置 iptables service yum -y install iptables-services 如果要修改防火墙配置,如增加防火墙端口3306 vi /etc/sysconf