您好,欢迎来到61ic! | [登录] [注册] 忘记密码 | 设为首页 帮助
 . 网站首页 . 业界新闻 . 设计中心 . 移动技术 . TI专栏 . ADI专栏 . FPGA专栏 . 代码工厂 . 官方商城 . 
 . 活动专区 . 新品快递 . 解决方案 . 前沿科技 . TI资源 . ADI资源 . FPGA资源 . 下载中心 . 产品展示 . 
加入收藏
付款方式
联系我们
您现在的位置: 61IC电子在线 >> TI专栏 >> TI C6000 DSP和ARM >> OMAP-L1x处理器 >> 正文
  [组图]DSP/BIOS的HWI线程应用           ★★★ 【字体:
DSP/BIOS的HWI线程应用
作者:xjf616    文章来源:xjf616    点击数:    更新时间:2013-10-24    

前言:  因为omapl138linux时采用的是使用dsplink控制dsp核,dsplink是基于dspbios的,所以要想使用dsplink控制dsp核产生中断就必须先了解dspbios的原理和机制。

使用dspbiosdsp裸跑有何不同之处,在配置和写代码方面有何不同。如果是裸跑dsp需要写好main.ccmd文件和intvecs.asm即可。而dspbios则更方便易用。在main.c文件基础上再用CCS创建tcfDSP/BIOS configuration file)即可,而cmd文件和intvecs.asm(中断向量表的声明)在编译的时候有tcf文件自动生成。

话说习惯了在linux下用字符界面封装、配置、编译、链接、调试xdctoolsdspbiosdsplinkcmemCE等工具链。回过头来用ccs来配置这些,突然发现ccs配置感觉很爽,非常友善。也感慨于ccs的强大,是怎么把这些工具链都集成在一起的。。。。

下面以一个具体例子说明下如何从裸跑dsp核触发中断切换到使用dspbios实现这些功能。本例是在omapl138quickStartOMAPL1x_rCSL基础上修改的,原工程是裸跑触发中断的,将改成使用dspbiosHWI线程方式来实现中断。


如上图,此工程最简单的触发中断的例程,一个main.c文件,OMAPL1x_common.c文件是各寄存器声明文件,invecs.asm文件申明了中断向量表。Inlcude包含了编译器的路径和omapl138CSL库的路径。其cmd文件是在build Properties中手动指定的,因为用不到所以忽略它。

现在新建一个空的dspbios工程test7


再把刚才的main.cinvecs.asmOMAPL1x_common.c文件拷贝到test7目录下,CCS4会自动识别并加载到现在的test7工程下。




可以看出bios工程要比一般工程Include路径多了3个专用的dspbios目录。把CSL目录也include起来。

 

1、  invecs.asm文件从工程remove掉。

2、  新建dspbios configuration file,开始配置tcf文件, Scheduling->HWI-Hardware Interrupt Service Routine Manager->HWI_INT4右键单击选择Propertieinterrupt selection number中选择4,function填上中断相应函数的名称,如果是C语言实现的要在前面加下划线这里是_TIMER0_12_isr,Dipatcher选项卡中选中Use Dispatcher,如图


其中interrupt selection number是指事件号,在TIC6000系列中,有128个事件和15个中断源,需要通过配置把需要用到的事件号和中断源映射起来。而本例程中使用的定时器事件源号为4,和INT4的“4”一致是一种巧合。这样就配置好了HWI

3、  接下来配置SWIScheduling->SWI-Software Interrupt Manager右键单击Insert SWI,名字默认为SWI0,配置SWI0相应函数为_swiFxn0,如图



4、  配置LOGInstrumentation->LOG 右键单击选择Insert LOG,命名为trace


到此tcf配置完毕。

 

 

 

接下来是main.c的修改

 

 

1、  在头文件中添加dspbios声明的头文件,其中test7cfg.h文件是编译tcf文件生成的,test7cfg.h文件声明了各个线程如HWISWILOG等。

 

#include <std.h>

 

#include <log.h>

#include <tsk.h>

#include <swi.h>

#include <sys.h>

#include "test7cfg.h"

#include <c64.h>

2、  修改main函数

原来的main函数内容

    init_OMAPL138();

    setup_Timer0();

    setup_DSP_INTC();

    TIMER_interrupt_DSPexample();

将以上内容转到swiFxn0函数中

Void swiFxn0(Void)

{

    init_OMAPL138();

    setup_Timer0();

    C64_enableIER(C64_EINT4);

    TIMER_interrupt_DSPexample();

    LOG_printf(&trace,"SWI0 done!\n")

}  

Main函数修改为

void main (void)

{

    LOG_printf(&trace,"Main posts SWI0\n");

   SWI_post(&SWI0);

    LOG_printf(&trace,"Main done!\n");

}/* End of main */

 

修改中断响应函数

interrupt void TIMER0_12_isr (void)

void TIMER0_12_isr (void)

这里必须去掉interrupt前缀。因为dspbios不需要关键字interrupt来注明这是中断响应函数,如果加上interrupt关键字有时会造成很大麻烦。

 

整个dspbios工程建立完毕,编译直接把.out下载dsp核中就可触发中断。

整个工程视图:



使用dspbios确实方便很多,裸跑dsp不但要声明中断向量表,写cmd文件分配存储器空间地址,配置全局中断寄存器,使用dspbios只需要在图形界面配置好tcf文件,它自动会生成相应的cmd文件和中断向量表。  裸跑dsp时配置全局中断寄存器需要直接操作寄存器,如下:

 

 

    ISTP = (unsigned int)intcVectorTable;

    ICR = DSPINTC_IST_ALL_MASK_INT;

    IER |= DSPINTC_IST_NMI | DSPINTC_IST_INT4;

 

使用dspbios只需要包含了头文件#include <c64.h>

然后调用中断使能函数:C64_enableIER(C64_EINT4);

 

 参考资料: spru007h.pdf   DSP/BIOS 5.30 Textual Configuration (Tconf) User’s Guide


MS320C6000 DSP/BIOS 5.x Application Programming Interface  (API) Reference Guide

TMS320 DSP/BIOS v5.41 User’s Guide

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    OMAPL138的uPP通信(1)---DSP…
    OMAPL138的uPP通信(2)---F…
    基于OMAPL138的linux内核移植
    OMAPL138 ubifs文件系统移植…
    GDBSERVER 用于OMAPL138调试…
    OMAPL138的DVSDK安装与使用(…
    OMAPL138的DVSDK安装与使用(…
    OMAPL138的DVSDK安装与使用(…
    OMAP片上PRU指令集
    OMAPL138开发笔记
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61 湘ICP备13001086号-2