打印

DSP启动详解(以2812为例)

[复制链接]
3010|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 zhangmangui 于 2013-10-21 23:44 编辑

从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指向低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。




来自网络收集  供大家学习使用

相关帖子

沙发
zhangmangui|  楼主 | 2013-10-16 17:01 | 只看该作者
本帖最后由 zhangmangui 于 2013-10-16 17:04 编辑

DSP/BIOS的启动顺序

当DSP/BIOS的应用程序启动时,一般遵循下面的步骤:

1)  初始化DSP:DSP/BIOS程序从C/C++环境入口c_int00开始运行。对于C6000平台,在c_int00开始处,系统栈指针(B15)和全局页指针(B14)被分别设置在堆栈断的末尾和.bss断的开始。控制寄存器AMR、IER、CSR等被初始化;

2)  初始化.bss段:当堆栈被设置完成后,初始化任务被调用,利用.cinit的记录对.bss断的变量进行初始化;

3)  调用BIOS_init初始化用到的各个模块:BIOS_init调用MOD_init对配置用到的各个模块进行初始化,包括HWI_init、HST_init、IDL_init等;

4)  处理.pinit表:.pinit表包含一些指向初始化函数的指针,对C++程序,全局对象类的创建也在此时完成;

5)  调用用户程序的main函数:用户main函数可以是C/C++函数或者汇编语言函数,对于汇编函数,使用_main的函数名。由于此时的硬件、软件中断还没有被使能,所以在用户主函数的初始化中需要注意,可以使能单独的中断屏蔽位,但是不能调用类似HWI_enable的接口来使能全局中断;

6)  调用BIOS_start启动DSP/BIOS:BIOS_start在用户main函数退出后被调用,它负责使能使用的各个模块并调用MOD_startup启动每个模块。包括CLK_startup、PIP_startup、SWI_startup、HWI_startup等。当TSK管理模块在配置中被使用时,TSK_startup被执行,并且BIOS_start将不会结束返回;

7)  执行idle循环:有两种方式进入idle循环。当TSK管理模块使能时,任务调度器运行的TSK_idle任务调用IDL_loop在其它任务空闲时进入idle循环;当TSK模块未被使用时,BIOS_start调用将返回,并执行IDL_loop进入永久的idle循环,此时硬件和软件中断可以抢占idle循环得到执行。由于idle循环中管理和主机的通信,因此主机和目标机之间的数据交互可以进行了。

编译选项设置

CCS环境下,可以为工程文件(.pjt)指定编译选项,也可以为具体的每一个文件指定编译选项。

编译选项可以通过工程文件或者某个具体的.c文件单击鼠标右键,然后在弹出窗口中选这“Build Options”,或者点击菜单栏ProjectàBuild Options,弹出如下图窗口:

                                


编译选项分为:Basic,Advanced,Feedback,Files,Assembly,Parser,Preprocessor,,Diagnositcs共八类。每一类又细分为若干选项设置。

单击右下角的Help,可以获得每个具体选项的含义。下表中列出与编译调试密切相关的编译选项。表中未说明的选项使用默认选项即可。




在链接选项页中,可设置输出文件和内存映射文件的路径以及需要包含的库文件,如下图所示:

在Serach Path和Libraries中,可将芯片支持库(CSL)的路径和使用的库文件设置好,这样就不需要在工程中添加库文件了。由于CCS v3.2默认没有带支持TCI6482的CSL v3.x的库,可将最新的CSL拷贝到CCS目录下,建议统一路径名称,以免不同机器建立的工程不能兼容。通常库文件中末尾带e的为Big Endian库,不带e的为Little Endian库,需要根据Complier选项中的选择分别选用


使用特权

评论回复
板凳
wenjun_wang86| | 2013-10-17 09:13 | 只看该作者
专业且有用!感谢版主!

使用特权

评论回复
地板
cuitian| | 2013-10-18 08:09 | 只看该作者
呵呵

使用特权

评论回复
5
tangjian8911| | 2013-10-18 10:49 | 只看该作者
楼主辛苦啦!

使用特权

评论回复
6
zhangmangui|  楼主 | 2013-10-18 12:04 | 只看该作者
tangjian8911 发表于 2013-10-18 10:49
楼主辛苦啦!

不辛苦 应该的

使用特权

评论回复
7
日月盟约| | 2013-11-2 20:19 | 只看该作者
龙哥好强大!特崇拜您!

使用特权

评论回复
8
zhangmangui|  楼主 | 2013-11-2 21:04 | 只看该作者
日月盟约 发表于 2013-11-2 20:19
龙哥好强大!特崇拜您!

相互学习 共同进步
资料大多来自收集  简答的分享而已  谢谢

使用特权

评论回复
9
zhangmangui|  楼主 | 2013-11-2 21:04 | 只看该作者
日月盟约 发表于 2013-11-2 20:19
龙哥好强大!特崇拜您!

相互学习 共同进步
资料大多来自收集  简答的分享而已  谢谢

使用特权

评论回复
10
1263641383| | 2016-4-5 09:40 | 只看该作者
多谢楼主,写的非常到位,学习了

使用特权

评论回复
11
zhangmangui|  楼主 | 2016-4-5 22:22 | 只看该作者
1263641383 发表于 2016-4-5 09:40
多谢楼主,写的非常到位,学习了

资料来自收集  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎进入【TI DSP 论坛】 & 【DSP 技术】           TI忠诚粉丝!

934

主题

26373

帖子

585

粉丝