DSP

DSP/BIOS程序设计

2019-07-13 09:33发布

第四章    DSP/BIOS程序设计   1.        DSP/BIOS支持多线程技术,使得在线调试分析成为可能; 2.        在线调试:在不影响DSP正常运行的情况下,即在不干扰DSP的各个工作和任务的情况下,实时地进行调试; 3.        传统的调试方法必须终止DSP的运行才可以工作; 4.        程序中一旦使用了DSP/BIOS,则DSP/BIOS的组件所有的API库函数就都包括在工程下的include目录里; 5.        在DSP/BIOS程序设计中,不再显式地定义中断向量表文件(vector.asm),中断向量定义在.cmd文件中; 6.        对于片内外设的访问是借助DSP/BIOS中的CSL(片上外设支持库)来完成的; 7.        main函数只是做一些初始化的工作,真正的数字信号处理算法是由中断函数调用的,而且在DSP/BIOS编程中,不能使用关键字interrupt或INTERRUPT,因为DSP/BIOS有专用的访问中断(进入和退出中断)API函数; 8.        DSP/BIOS程序工作过程 l  第一步:硬件上电复位DSP; l  第二步:调用BIOS_init()函数初始化DSP/BIOS的各个模块; l  第三步:调用主函数; l  第四步:调用BIOS_start()进入DSP/BIOS工作状态; l  第五步:调用IDL_loop()使DSP进入空闲状态,等待中断信号的到来。 9.        IDL状态可实现主机对目标板上DSP的访问,如果遇到中断,将首先执行中断任务。进入IDL状态是真正的信号处理工作的开始,同时各种DSP的示波器也可以访问这个状态; 10.    从上面五步可以看出,DSP/BIOS程序设计中不再有死循环。更重要的是,主程序的功能被消弱,功能的实现是通过一些中断函数来完成的; 11.    程序强大的功能是由那些中断函数完成的,这些函数在DSP处于IDL状态时被中断触发执行; 12.    DSP/BIOS是模块化的程序设计方法,有些程序的引用是没有显式定义的,必须到DSP/BIOS配置文件中去找它们的入口点; 13.    硬中断的优先级总是高于软中断; 14.    DSP/BIOS提供了一个称为PIP的组件,这个组件类似一条流过两个水库的管道一样,这两个水库可以被明确地指定容量,所以把PIP组件称为数据缓冲通道组件。PIP通道具有一个写入数据端和读出数据端,而且只有当数据完全为空时才能写入,当数据充满时才能读出。通过调用PIP的API函数PIP_get检测PIP管道中是否数据已满,如果已满,则自动调用notifyReader指向的软中断函数;通过调用API函数PIP_alloc判断PIP管道是否已空,如果已空,则自动调用notifyWrite指向的软中断函数。可见,PIP可以节约CPU的工作时间; 15.    这个PIP对象在本程序中是受到两个中断线程控制的,一个是来自McBSP串行口的硬中断HWI,另一个是DSP/BIOS定义的软中断SWI,它们分别控制了PIP管道的读与写,而且只能控制一端。因为程序最终完成的任务是:从McBSP1数据输入端接收来数据,又将数据回送至McBSP1数据发送端,所以至少需要建立两个PIP管道; 16.    中断发生后,程序指针被强制转移到终端地址入口点,并且中断前的环境常常被保存在堆栈中; 17.    所有的DSP/BIOS程序都应将std.h作为第一个包括文件,它包含了DSP/BIOS里的一些专用声明; 18.    ATM程序包包括了一些用汇编语言写成的原子功能(或称微功能)API函数,直接面向硬件,供其他API函数调用; 19.    DEV程序包负责DSP各种片上资源的驱动; 20.    TRC程序包包括一些实时信息采集和跟踪函数; 21.    CSL组件是DSP/BIOS中的一员,它的主要作用在于为用户提供DSP片上外设的抽象调用方法,CSL通过片上外设的硬件抽象,使用户不用去管理具体硬件的细节(包括时序)而接引用即可; 22.    几乎任何一个程序都离不开CSL的支持,因为任何一个程序的完成必然是对数据的处理,这些数据源必须是来自片上外设的,除了访问片上外设之外,没有其他的途径; 23.    空闲状态并不是什么都不做,而是一个空闲的进程不断重复,用户可以设计自己的main函数,其他的程序均由DSP/BIOS自动生成和管理(自动调用),不需要用户显式声明调用,用户需要完成的数据处理任务都集中在中断程序中完成; 24.    DSP/BIOS帮助完成了各个进程间的管理,主函数main的作用被减弱了,甚至可以为空函数(注意:不能不要);