DSP/BIOS程序启动顺序

[复制链接]
 楼主| tianli1980 发表于 2013-12-5 17:00 | 显示全部楼层 |阅读模式
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。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系统之间可以进行数据通信

评分

参与人数 1威望 +4 收起 理由
zhangmangui + 4 很给力!

查看全部评分

拿起书本 发表于 2013-12-5 19:59 | 显示全部楼层
这个很重要,一定要好好看看,利用起来,赞楼主。
zhangmangui 发表于 2013-12-5 22:10 | 显示全部楼层
目前还没有理解透彻启动   学习啦
kingzlt 发表于 2014-3-3 11:00 | 显示全部楼层
请教一下楼主,如果在2000系列上使用BIOS,开2个任务外加两个软件中断,内核大约需要多少RAM
chenci2013 发表于 2014-3-4 23:31 | 显示全部楼层
进来学习一下的
chenci2013 发表于 2014-3-4 23:32 | 显示全部楼层
zhangjin_comeon 发表于 2014-3-4 23:36 | 显示全部楼层
谢谢你的分享   不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

482

主题

2214

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部