DSP/BIOS程序启动顺序
基于TI的DSP芯片的应用程序分为两种:一般应用程序;DSP/BIOS应用程序。
为简化编程,TI提供了一套C的编程接口,它以API和宏的形式封装了TI的所有硬件模块,这套接口统称DSP/BIOS。DSP/BIOS包含以下模块:
System(包含MEM,SYS对象)
Instrumentation(包含LOG,STS对象)
Scheduling(包含CLK,PRD,HWI,SWI等等对象)
Synchronization(包含SEM,MBX,QUE等等对象)
Input/Output(包含RTDX,HST等等对象),Chip Support Library(包含DMA,GPIO等等对象)。
DSP/BIOS程序启动顺序 :
1) 初始化DSP。DSP/BIOS程序从入口c_int00开始。复位后,复位中断向量将程序指针自动引导到c_init00。系统堆栈指针SP设置成指向.stack段的结尾,状态寄存器st0和st1也被初始化。
2) 从.cinit段的记录来初始化.bss段,堆栈指针建立后,初始化程序使用.cinit段的记录来初始化全局变量。
3) 调用BIOS_init初始化DSP/BIOS的各个模块。BIOS_init执行基本的模块初始化,然后调用MOD_init宏分别初始化每个使用的模块。例如,HWI_init初始化有关硬件中断的寄存器,建立ISTP和中断选择寄存器,清除IFR中断标志寄存器,设置IER中断使能寄存器;HST_init初始化主机接口I/O通道接口,如果使用了RTDX,则HST_init将IER中对应RTDX硬件中断的相应位置置1;IDL_init初始化空闲循环的指令计数,主要来校正CPU负荷图来显示CPU的负担。
4) 处理.pinit表。.pinit表包含了初始化函数的指针,对于C++程序,全局C++对象的构造函数会在pinit的处理中执行。
5) 调用用户主程序main函数。在所有的DSP/BIOS模块初始化后,硬件中断和软件中断均为使能,此时应用程序可以添加代码初始化各种外设。在初始化过程中,必须保持禁止各种中断。
6) 调用BIOS_start启动DSP/BIOS。和其他函数一样,BIOS_Start函数也是由配置工具产生的,该函数包含在programcfg.snn文件中。BIOS_start负责使能DSP/BIOS模块并为每一个使用的模块调用MOD_startup宏使其开始工作。例如,CLK_startup设置PRD寄存器,使能IR寄存器中对应CLK管理器中所选时钟的位置1,然后启动时钟;SWI_startup设置软件中断,TSK_startup使能所有任务线程。HWI_startup设置CSR寄存器中的GIE位,使能硬件中断;PIP_startup为每个PIP对象调用notifywriter函数。如果配置工具中TSK管理器是使能的,那么BIOS_startup不会返回。
7) 执行空闲循环。调用IDL_loop引导程序进入DSP/BIOS空闲循环,此时硬件和软件中断可以中止空闲循环的执行。空闲循环控制DSP和主机的通道,空闲循环时主机和DSP系统之间可以进行数据通信。
在DSP/BIOS应用程序中,main()函数用于实现用户的初始化操作,片内/片外外设的配置,以及使能单独的硬件中断等,然而,main()函数并不属于DSP/BIOS的任何线程类型,它仅仅是一个匆匆过客,在作完用户期望的初始化之后,也就寿终正寝了。
值得注意的一点是,应用程序在执行main函数时,并不是所有的DSP/BIOS API函数都可以调用,其间有着相应的先后关系,这是因为,main函数启动的时候,DSP/BIOS并没有完成最终的初始化,因此,main函数对于DSP/BIOS 有些API函数的调用是受限的。
从DSP启动的过程来看,DSP/BIOS的初始化是分为两大阶段的,一个是位于main函数前面的BIOS_init中,一个是在main函数后面的BIOS_start中。
BIOS_init所主要完成的是MEM模块的初始化工作,而BIOS_start负责的是使能全局中断、配置和启动定时器、打开线程调度、启动DSP/BIOS线程等。因此,在main函数中,可以调用实现动态存储器分配的函数:MEM_alloc、MEM_free;以及动态创建对象的API 函数:XXX_create、XXX_delete等。对于“假设硬件中断和定时器都已经使能的API”、或者可能引起阻塞的API函数都不可以在main函数中调用,例如CLK_gethtim、CLK_getltime、HWI_enable、HWI_disable、SWI_enable、SWI_diaable、TSK_disable、TSK_enable、SEM_pend、MBX_pend等。特别需注意的是,main函数中一定不能存在无限循环,否则整个DSP/BIOS程序将瘫痪。
但是对于使DSP/BIOS线程就绪的调度函数却允许在main函数中调用,例如SEM_post、SWI_post等,其实质还是在等BIOS_start进行完所有的初始化后再执行如上的调度操作。
因此可以明白一点的是,main函数穿插在BIOS的初始化过程中,为人工干预DSP/BIOS的启动提供了机会,使得BIOS的运作更具“个性化”。其间CPU的控制权从DSP/BIOS提交给用户,然后在返回给DSP/BIOS。
DSP/BIOS程序启动顺序的更多相关文章
- DSP/BIOS使用之初窥门径——滴答时钟及烧写Flash
操作平台和环境 DSP型号:TMS320C6713 仿真器:XDS510PLUS Flash型号:AM29LV800BT或AM29LV800BT都试过(一般接口一样,区别不大) RAM型号:MT48L ...
- iOS程序 # 启动过程
[ App 应用 ] 中文名:缺省 外文名:default 拼音:quē shěng 释义:系统默认状态 全称:缺省状态 -------------- 1.程序启动顺序 1> main.m程序入 ...
- iOS程序执行顺序和UIViewController 的生命周期(整理)
说明:此文是自己的总结笔记,主要参考: iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 UIView的生命周期 言叶之庭.jpeg 一. iOS程序 ...
- load View 流程 程序启动流程
基本流程: loadView / nib文件 来加载view到内存 -> viewDidLoad 函数进一步初始化这些view -> 内存不足时, 调用viewDidUnload 函数释 ...
- 4.计算机启动过程的简单介绍 计算机启动流程 计算机BIOS作用 POST 开机自检 计算机启动顺序 分区表 操作系统启动
计算机的启动
- 计算机启动过程的简单介绍 计算机启动流程 计算机BIOS作用 POST 开机自检 计算机启动顺序 分区表 操作系统启动
原文地址:4.计算机启动过程的简单介绍 计算机启动流程 计算机BIOS作用 POST 开机自检 计算机启动顺序 分区表 操作系统启动 计算机的启动
- LINUX启动顺序
Linux 启动顺序: 1. BIOS自检 (服务器硬件启动的第一步,坑定的啦) 2. 运行系统内核并检测硬件(这个是看系统了,redhat等相关版本是通过/boot/vm进行启动 vmlinuz) ...
- Linux启动顺序、运行级别及开机启动
一.启动顺序 当我们经过BIOS引导,并选择了Linux作为准备引导的操作系统后,接下来的执行顺序如下:1.加载并执行内核 第一个被加载的东西就是内核.然后把内核在内存中解压缩,就可以开始运行了.2. ...
- Linux 开机启动顺序_005
***了解Linux开机启动顺序之前先了解一下Linux运行级别,通过inittab配置文件查看运行级别的定义: [root@oldboy ~]# cat /etc/inittab # Default ...
随机推荐
- Ubuntu 下安装JDK1.8
好困,不行了,我要睡觉了,先上图吧!
- spring mvc注解和spring boot注解
1 spring mvc和spring boot之间的关系 spring boot包含spring mvc.所以,spring mvc的注解在spring boot总都是可以用的吗? spring b ...
- 【python】-- web开发之jQuery
jQuery jQuery 是一个 JavaScript 函数库,jQuery库包含以下特性(HTML 元素选取.HTML 元素操作.CSS 操作.HTML 事件函数.JavaScript 特效和动画 ...
- Django 之Form组件
Django之From组件 扩展:Django 之 ModelForm组件 Form组件功能 Django的Form主要具有一下几大功能 生成HTML标签 验证用户数据(显示错误信息) HTML Fo ...
- 【Android】开发优化之——调优工具:dump hprof file 查看内存情况,找到内存泄露
虽说知道一般性的开发android应用须要注意的问题,但是也有水平參差不齐的情况.特别是维护代码,假设内存占用大,内存溢出严重,又怎么解决呢? -- 通过DDMS把heap抓出来分析 1.打开DD ...
- JVM指令重排
指令重排的基本原则: a.程序顺序原则:一个线程内保证语义的串行性 b.volatile规则:volatile变量的写,先发生于读 c.锁规则:解锁(unlock)必然发生在随后的加锁(lock)前 ...
- js与jquey的表达
jquery 1.$("#id").css("display") 2.$(this) 3.attr(a,b) :在a里面追加元素b 4.prop: functi ...
- 一对多 添加表单 cocoon
gem 'cocoon' - javascript "cocoon.js" https://note.youdao.com/web/#/file/XCiivnE/note/WEB4 ...
- ncl 实例参考
NCL中绘制中国任意省份的精确地图 NCL学习笔记(实战篇) 用NCL画垂直风场剖面图实例 NCL学习笔记(天气分析图)
- 在Delphi中使用ShellExecute(handle, 'open', PChar(fname),nil, nil, SW_HIDE)函数应注意的问题
在Delphi中使用ShellExecute(handle, 'open', PChar(fname),nil, nil, SW_HIDE)函数应注意的问题: 一.对一般vcl程序及isapi dll ...