使用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文件,还需要学习。
|