DSP

纯新手DSP编程--5.21--DSP/BIOS使用

2019-07-13 10:04发布

        DSP/BIOS是TI公司特别为其TMS320C6000TM,TMS320C5000TM和TMS320C28xTM系列DSP平台所设计开发的一个尺寸可裁剪的实时多任务操作系统内核,是TI公司的Code Composer StudioTM开发工具的组成部分之一。   DSP/BIOS 实时操作系统介绍   DSP/BIOS是一个用户可剪裁的实时操作系统,主要由三部分组成:多线程实时内核(抢占式多线程);实时分析工具;芯片支持库。利用实时操作系统开发程序,可以方便快速的开发复杂的DSP程序。操作系统维护调度多线程的运行,只需将定制的数字信号算法作为一个线程嵌入系统即可;芯片支持库帮助管理外设资源,复杂的外设寄存器初始化可以利用直接图形工具配置;实时分析工具可以帮助分析算法实时运行情况。   DSP/BIOS以模块化方式提供给用户对线程、中断、定时器、内存资源、所有外设资源的管理能力都可以根据需要剪裁。实际应用中需要的定制算法作为一个线程插入DSP/BIOS的调度队列,由DSP/BIOS进行调度。   使用前需阅读了解DSP/BIOS用户手册和DSP/BIOS设备驱动的开发与使用,具体内容包括DSP/BIOS概述、程序生成、监测、线程调度、存储器和低级函数、I/O概述和管道、流I/O和设备驱动;设备驱动开发工具包(DDK)简介、DSP/BIOS设备驱动的结构和使用、使用DSP/BIOS设备驱动、GIO类驱动、微型驱动的开发步骤、IOM接口、PIO适配器、LIO模型到IOM模型的移植和GIO API的ASYNC扩展。

1.1         DSP/BIOS的组件构成

?         DSP/BIOS API:编写的程序可以调用API接口函数; ?         DSP/BIOS配置:创建的配置文件定义了程序使用的静态BIOS对象; ?         DSP/BIOS分析工具:集成在CCS上的一些BIOS分析工具可以对运行与目标设备上的程序进行监测,包括CPU负载、时间、日志、线程执行状态等。

1.2         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循环中管理和主机的通信,因此主机和目标机之间的数据交互可以进行了。           详细配置网址:         http://www.360doc.com/content/12/0528/17/10074389_214299529.shtml          配置好各个参数后,DSP/BIOS自动生成cmd文件,不要添加C语言的标准库rts.lib。因为在DSP/BIOS环境下不实用该标准库,虽然可以调用C语言的标准库函数,但是应该尽量使用DSP/BIOS内核提供的API函数。也应该尽量使用自动生成的cmd配置文件。       同时,C函数占用空间较大,执行的效率也很低。      由于DSP/BIOS控制应用程序,因此main函数应避免while循环,否则出现死循环的话,这个系统将会瘫痪。      使用DSP/BIOS的LOG模块替代标准输入输出函数,LOG模块是DSP/BIOS提供的专用输入输出信息模块。与C语言相比,使用LOG模块将占用更少的内存和更快的速度。      RTA工具      RTA控制面板包含一系列复选按钮,若没有装入一个带有DSP/BIOS内核的out文件,是无法打开该控制面板的。这些复选框,可以激活或禁止各个类型的实时跟踪。