DSP/BIOS 启动顺序【转】
来源:互联网 发布:voip网络电话源码 编辑:程序博客网 时间:2024/05/16 05:32
基于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。DSP/BIOS程序从入口c_int00开始。复位后,复位中断向量将程序指针自动引导到c_init00。系统堆栈指针SP设置成指向.stack段的结尾,状态寄存器st0和st1也被初始化。
② 从.cinit段的记录来初始化.bss段,堆栈指针建立后,初始化程序使用.cinit段的记录来初始化全局变量。
③ 调用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的负担。
④ 处理.pinit表。.pinit表包含了初始化函数的指针,对于C++程序,全局C++对象的构造函数会在pinit的处理中执行。
⑤ 调用用户主程序。在所有的DSP/BIOS模块初始化后,硬件中断和软件中断均为使能,此时应用程序可以添加代码初始化各种外设。在初始化过程中,必须保持禁止各种中断。
⑥ 调用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不会返回。
⑦ 执行空闲循环。调用IDL_loop引导程序进入DSP/BIOS空闲循环,此时硬件和软件中断可以中止空闲循环的执行。空闲循环控制DSP和主机的通道,空闲循环时主机和DSP系统之间可以进行数据通信。
- DSP/BIOS 启动顺序【转】
- DSP/BIOS的启动顺序
- DSP/BIOS程序启动顺序
- DSP/BIOS的启动序列
- 更改BIOS启动顺序
- 【转】DSP/BIOS中的SEM
- DSP BIOS
- DSP/BIOS
- DSP/BIOS
- DSP BIOS
- DSP/BIOS
- 在BIOS中如何更改启动顺序
- DSP/BIOS学习笔记
- DSP/BIOS应用
- DSP/BIOS 介绍
- 开发DSP/BIOS程序
- DSP/BIOS入门
- DSP/BIOS入门
- 【Rails】Sass::SyntaxError in StaticPages#home错误的解决方案
- 微信/易信公共平台开发(一):开发了一个简单易用的PHP类(提供源码),十几行代码搞定一个公众号
- xcode Undefined symbols for architecture i386:
- COJ 1050动态规划简单题
- static_cast 和 dynamic_cast 的区别
- DSP/BIOS 启动顺序【转】
- 叶正盛:再次写给我们这些浮躁的程序员
- (五)链式堆栈的实现与应用
- 程序员,如何提高核心竞争力
- 工作那些事(六)谈谈好的编程习惯的好处
- 创业公司如何应对大公司抄袭
- 孩子,你永远是自由的
- 如何提高团队协作的效率
- vb中将flexgrid表中数据导出至Execel及其相关知识