您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > dsp-bios-api接口介绍
基础类的DSP/BIOSAPI调用基础类的DSP/BIOSAPI调用一、时钟管理CLK(1)Unsncounts=CLK_countspms(void)返回每毫秒的定时器高分辨率时钟的计数值(2)LgUnscurrtime=CLK_gethtime(void)返回高分辨率时钟的计数值超过32bit归零高分辨率时钟是DSP时钟除以(TDDR+1)(3)LgUnscurrtime=CLK_getltime(void)返回低分辨率时钟的计数值超过32bit归零高分辨率时钟是DSP时钟除以(TDDR+1)再除以(PRD+1)(4)Unsperiod=CLK_getprd(void)返回CLK管理器周期寄存器的值sp;基础类的DSPBIOSAPI调二、周期函数PRD(1)LgUnsnum=PRD_getticks(void)返回32位周期函数管理计数值(2)voidPRD_start(PRD_Obj*period)启动PRD模块计数器,一般地,mode=one-shot(3)voidPRD_stop(PRD_Obj*period)关闭PRD模块计数器(4)voidPRD_tick(void)对周期模块的计数器加1,以便周期模块管理器确定哪个周期性函数得以运行三、软件中断管理SWI(1)voidSWI_andn(SWI_Obj*swi,Unsmask)mask屏蔽字参数将邮箱值与mask做与运算,并用结果代替以前的邮箱值,若为0,启动软件中断,恢复邮箱初始值(2)voidSWI_andn(SWI_Obj*swi)将邮箱值减1,并用结果代替以前的邮箱值,若为0,启动软件中断,恢复邮箱初始值(3)voidSWI_disable(Void)禁止软件中断(4)voidSWI_enable(Void)使能软件中断(5)Unsnum=SWI_getmbox(void)返回当前SWI对象在被执行的邮箱值,若中断已经开始执行,DSP/BIOS会先保存此值(6)Unskey=SWI_getpri(SWI_Obj*swi)返回指定的SWI对象的优先级(7)voidSWI_inc(SWI_Obj*swi)将指定的SWI对象的邮箱值加1,同时启动软件中断,就算用户调用多次,最终执行一次。(8)voidSWI_or(SWI_Obj*swi,Unsmask)mask屏蔽字参数将启动指定的软件中断,并将此软件中断的邮箱值与mask做与运算,并用结果代替以前的邮箱值,等到中断完成之后,邮箱值恢复为初始值,一般地,调用SWI_getmbox获得触发此软件中断的邮箱值(9)voidSWI_post(SWI_Handleswi)启动指定的SWI对象的软件中断,此函数不受邮箱值的影响,也不影响邮箱值。一般地,周期性低启动一个软件中断,将_SWI_post填入PRD对象的函数设置栏,启动软件中断的参数写入arg0(10)Unskey=SWI_raisepri(Unsmask)提高SWI软件中断的优先级,一般地sp;基础类的DSPBIOSAPI调key=SWI_raisepri(SWI_getpri(&swi_1));--accesssharedresouces--SWI_restorepri(key)(11)voidSWI_restorepri(Unskey)恢复原来的优先级(12)SWI_Obj*swi=SWI_self(void)当前执行的SWI对象的软件中断的地址四、信息输出管理LOG(1)voidLOG_disable(LOG_Obj*log)关闭指定对向的日志功能(2)voidLOG_enable(LOG_Obj*log)开启指定对向的日志功能(3)voidLOG_error(Stringformat,Argarg0)voidLOG_message(Stringformat,Argarg0)前一个函数可以将一个事件、数据或出错信息按照指定的格式串写入系统日志,不受TRC跟踪管理模块的影响后一个函数类似于前一个函数,但是受到TRC跟踪管理模块的影响(4)voidLOG_event(LOG_Obj*log,Argarg0,Argarg1,Argarg2)将未格式化的事件消息写入日志中(5)voidLOG_printf(LOG_Obj*log,Stringformat,intarg0,intarg1)指定的LOG窗口显示消息%d%x%o%s(6)voidLOG_reset(LOG_Obj*log)复位日志缓冲区五、存储器管理MEM(1)void*addr=MEM_alloc(intsegid,Unssize,Unsalign)指定存储段分配连续块,返回起始地址segid=存储段的标识符或者ID号size块大小等于多少个字align边界条件只为0或2的幂若align为0、1则无约束(2)void*addr=MEM_calloc(segid,size,align)分配内存并初始化为0(3)intsegid=MEM_define(Ptrbase,Unslength,MEM_Attrs*attrs)sp;基础类的DSPBIOSAPI调定义一个新的存储段。返回值为存储段的ID标号attr参数为NULL,会按照默认参数进行配置,段的参数由结构体typeMEM_Attrs规定此函数仅在main函数中使用base:新段的基地址length:段长度attrs:段属性(4)boolstatus=MEM_free(segid,addr,size)释放申请的动态内存不能在SWI和HWI中调用调用之前,用LCK中API查看内存块的锁定情况sp;基础类的DSPBIOSAPI调(5)voidMEM_redefine(segid,base,length)重新定义一个存储段,只能在main中调用(6)boolstatus=MEM_stat(intsegid,MEM_Stat*statbuf)segid存储段标识符statbuf状态缓存区指针structmem_stat{sp;基础类的DSPBIOSAPI调Unssize;//存储段大小Unsused;//已经使用的数量Unslength;//最大连续存储块长度}同理:若segid有效,则MEM_stat返回TRUE不能在SWI和HWI中使用,应判断锁定情况(7)void*addr=MEM_valloc(intsegid,Unssize,Unsalign,charvalue)先申请内存,初始化为指定的值value六、C6000专用模块C64xsp;基础类的DSPBIOSAPI调(1)Unsoldmask=C64_diableIER(Unsmask)关闭相应的中断返回值实际屏蔽的中断(2)voidC64_enableIER(Unsoldmask)开放相应的中断Unsoldmask;oldmask=C64_disableIER(0x1);//disableINT0C64_enableIER(oldmask);//enableINT0(3)voidC64_plug(intvecid,Fxnfxn,intdmachan)插入一个中断向量intvecid:中断序号Fxnfxn:中断服务程序的函数指针intdmachan:插入操作使用的DMA通道将ISFP写到中断服务表IST中。若IST在外部RAM,则CPU复制代替DMA,此时DMA为-1IST在片内RAM时,使用DMA方式,是0,1,2,3用户保证在函数调用时该DMA通道有效七、统计模块STS(1)voidSTS_add(STS_Obj*sts,LgIntvalue)使用我们提供的数据更新STS统计对象的Total,Count,Max等参数传入一个32位参数,Count加1,Total累加传递的32位参数,MAX记录传递参数的最大值(2)voidSTS_delta(STA_Obj*sts,LgIntvalue)每个对象都包含有初始值,该初始值由配置文件指定或者由STS_set函数设置STS_delta先计算当前传递参数与先前初始值只差,然后调用STS_add更新统计累加值一般和STS_set一起用eg:STS_set(&sts,CLK_gethtime());STS_delta(&sts,CLK_gethtime());(3)voidSTS_reset(STS_Obj*sts)复位统计对象中的累加值。Count和Total设置为0.MAX成为最大的负值。(4)voidSTS_set(STS_Obj*sts,LgIntvalue)监视或统计程序的执行时间八、统计类模块TRC(1)TRC_LOGCLK日志记录定时器中断(2)TRC_LOGPRD日志记录周期时隙和周期函数的开始(3)TRC_LOGSWI日志记录软件中断的启动和完成(4)TRC_LOGTSK日志记录任务处于准备好、开始、停止、继续执行、终止等事件(5)TRC_STSHWI收集关于HWI统计数据(6)TRC_STSPIP写管道和读管道帧进行计数(7)TRC_STSPRD执行期间CLK时隙个数的统计数据(8)TRC_STSSWISWI执行时间的统计数据(9)TRC_STSTSKTSK执行时间的统计数据从TSK准备好到调用TSKdeltatime都要收集(10)TRC_USER0ANDTRC_USER1和TRC_query一起用执行和忽略结果的设备调用(11)TRC_GBLHOST执行所有的隐藏仪器功能,此比特位能够开始或停止收集所有开启的跟踪类型(12)TRC_GBLTARG执行所有的隐藏仪器功能,此比特位只能被目标程序设置九、任务管理TSK任务管理模块(1)voidTSK_checkstacks(TSK_Handleoldtask,TSK_Handlenewtask)无论是新任务还是老任务,如果堆栈的最后位置上都没有RG_STACKSTAMP标识,那么TSK_checkstacks就会报错SYS_abort,出现这种情况可能是由于上一个任务堆栈溢出或无效的存储占用了新任务的堆栈sp;基础类的DSPBIOSAPI调一般地,用TSK_checkstacks(TSK_self(),TSK_self())来检查堆栈定义Switch函数,这样在任务切换时自动调用堆栈检查函数:voidmyswitchfxn(TSK_Handleoldtask,TSK_Handlenewtask){...TSK_checkstacks(oldtask,newtask);...}(2)TSK_Handletask=TSK_create(Fxnfxn,TSK_Attrs*attr,Arg[arg,]...)创建一个调用函数fxn的任务对象,返回新对象的句柄,失败返回NULL。调用此函数是动态创建,而在配置工具中创建是静态创建,二者效果一样。sp;基础类的DSPBIOSAPI调静态创建的任务对象,创建函数将在BIOS_start函数中自动调用。BIOS_start函数在main函数之后,在后台IDL循环之前运行。而动态创建的任务处于Ready状态。函数参数最多不超过8个。任务对象函数fxn返回时,自动调用TSK_exit函数。解析:TSK_Attrs*attrs任务参数指针structTSK_Attrs{intpriority;Ptrstack;Unsstacksize;#ifdef_64_//imitateC55series.tocheckUnssysstacksize;#endifUnsstackseg;Ptrenviron;Stringname;boolexitflag;}(3)voidTSK_delete(TSK_Handletask)从所有内部队列里面删除这个任务,并且调用MEM_free释放任务对象和堆栈。只能删除处于结束状态的任务,也可调用删除的钩子函数。voidmyDeleteFxn(TSK_Handletask);(4)voidTSK_deltatime(TSK_Handletask)累计从任务准备好到执行此函数时候的时间差如果未调用此函数,那么就算打开任务统计累
本文标题:dsp-bios-api接口介绍
链接地址:https://www.777doc.com/doc-5610314 .html