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 ...
随机推荐
- struts2 封装获取表单数据的方式
一.属性封装 1.在action中设置成员变量,变量名与表单中的name属性值相同 2.生成变量的set方法 实例 获取用户输入的用户名和密码 jsp页面 java代码 二.模型驱动(常用) 1.ac ...
- CryptoJS加密
<script type="text/javascript" src="CryptoJS/core.min.js"></script>& ...
- H5 Video 去除 下载按钮 禁用右键
<style type="text/css"> video::-webkit-media-controls-enclosure { overflow:hidden; } ...
- IoC与DI
IoC与DI 首先想说说IoC(Inversion of Control,控制倒转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期 ...
- mssql-在一个特定的会话停止出发器
用SET CONTEXT_INFO来实现 --在某个会话里设置 SET CONTEXT_INFO 0x8888 --在触发器里判断 ) SELECT @Cinfo = Context_Info() 原 ...
- 探测web服务器质量——pycurl
pycurl是一个用C语言写的libcurl Python实现,功能非常强大,支持的操作协议有FTP.HTTP.HTTPS.TELNET等,可以理解为Linux下curl命令功能的Python封装,简 ...
- iOS 图文混排 链接 可点击
对于这个话题 我想到 1 第一个解决方法就是使用 webView 比较经典 把所有复杂工作都交给控件本身去处理了, 但是好像好多需要自定义的地方 没法从 webView获得响应回调 :(估计也可以实 ...
- Python decorator @property
@property广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性 下面的链接很好的阐述了@property的概念和应用 http: ...
- 20145229吴姗珊 《Java程序设计》第4周学习总结
20145229吴姗珊 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 继承与多态 6.1继承共同行为 1.继承基本上就是避免多个类间重复定义共同行为 简单的类的定义 使用s ...
- 使用 Apache poi 导入Excel
本文主要记录Excel导入及模板下载,遇到的问题及注意事项. 第一节:Excel导入 1.如何获取Excel中的最大行,也就是最后一行? 2.如何获取有效行?有效行的定义是每一行记录中每一列中值都 ...