打印

使用EZ-Kit板上的两块DSP

[复制链接]
488|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Violin11|  楼主 | 2017-11-13 10:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用EZ-Kit板上的两块DSP


在Visual DSP++中建立了一个C语言工程,并选择主菜单的Tools->Expert Linker->Create LDF...建立了一个ldf文件,在建立ldf文件向导中,设置processor个数为2,并进行了一些相应的配置。我以为这样就OK了,新建两个C文件,分别写入main函数,编译,结果报错,说main重定义。看来通过向导建立的ldf文件还不能直接使用,需要修改。我在Visual DSP++的安装文件夹中找到了for TS201 EZ-Kit的例子,参考一个名为Spectrum Analyse例子的ldf文件,我对自己工程的ldf进行了一些修改,主要是定义了$OBJECTS_DSPA和$OBJECTS_DSPB,然后将它们加入到一些INPUT_SECTION什么的里面。感觉修改得基本一致了,可是编译仍然不能通过,说main重定义。
        一点办法也没有,我把Spectrum Analyse的ldf文件直接拷贝到自己的工程中,才通过编译。先想使用Simulator试试,但是发现Simulator好像不支持双processor模式。那就连接上EZ-Kit,启动,发现很好使。
        下图:工程的相关文件。MainA.c里放着写给DSPA的main函数,MainB.c里放着写给DSPB的main函数,test2.ldf是从Spectrum Analyse里复制过来的:

      MainA.c和MainB.c里的main函数一模一样,是我于这个月2号写的一个C程序(参见《ADSP-TS201的计时器》),通过EZ-Kit上的按钮改变一个LED的亮度,使用IRQ0处理按钮动作,使用定时器来输出一定占空比的波形以控制LED亮度。

  • <span style="line-height: 1.5;">#include <builtins.h></span>
  • #include <sysreg.h>
  • #include <defts201.h>
  • <span style="line-height: 1.5;">#define RWRITE(reg,value) __builtin_sysreg_write(reg,value)</span>
  • #define RREAD(reg) __builtin_sysreg_read(reg)
  • <span style="line-height: 1.5;">typedef unsigned int uint;</span>
  • <span style="line-height: 1.5;">void timer0h_isr(void); //计时器中断</span>
  • void irq0_isr(void); //IRQ0
  • <span style="line-height: 1.5;">uint g_bright=0; //亮度控制</span>
  • int main( void )
  • {
  •        int v;
  •     //将FLAG2设为输出模式
  •     RWRITE(__FLAGREGST,FLAGREG_FLAG2_EN);
  •     //设置IRQ0服务程序和计时器中断服务程序
  •     RWRITE(__IVIRQ0,(int)irq0_isr);
  •     RWRITE(__IVTIMER0HP,(int)timer0h_isr);
  •     //设置跳沿触发
  •     //RWRITE(__INTCTL,0);
  •     //允许外部IRQ0和计时器
  •     v=RREAD(__IMASKH);
  •     v|=((1<<INT_IRQ0_P)|(1<<INT_TIMER0H_P));
  •     RWRITE(__IMASKH,v);
  •     //设置计数
  •     RWRITE(__TMRIN0H,0);
  •     RWRITE(__TMRIN0L,50000);
  •     //开全局中断使能
  •     RWRITE(__SQCTLST,SQCTL_GIE);
  •     //启动计时器
  •     RWRITE(__INTCTL,INTCTL_TMR0RN);
  •     while(1);
  •     return 0;
  • }

  • #pragma interrupt
  • void timer0h_isr(void)
  • {
  •     static uint counter=0;
  •     counter++;
  •     counter&=0x0f;
  •     if(counter>g_bright)
  •         RWRITE(__FLAGREGCL,~FLAGREG_FLAG2_OUT);
  •     else
  •         RWRITE(__FLAGREGST,FLAGREG_FLAG2_OUT);
  • }

  • #pragma interrupt
  • void irq0_isr(void)
  • {
  •     g_bright++;
  •     g_bright&=0x0f;
  • }

复制代码

      编译好了以后,会弹出对话框,说明DSPA和DSPB对应的程序文件:



      调试的时候,可以查看各个DSP的状态:




        两个DSP都运行的是通过按钮控制LED亮度的程序,所以运行结果如下:


      左起第一个按钮和左起第一个LED对应一个DSP,左起第四个按钮和左起第三个LED对应另外一个DSP。通过按钮,可以改变LED亮度。
      这样,我们成功地在TS201的EZ-Kit上同时启动了两个DSP。但不能说本次实验是成功的,因为ldf文件的问题并没有解决,总不能每次都从Examle中拷贝ldf文件吧。怎样创建多DSP工程的ldf文件,还需要学习。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

717

主题

1010

帖子

3

粉丝