dsp 用什么编程

dsp 用什么编程,第1张

用的都是CCS编程。

CCS有两种工作模式:

1软件模拟器模式:可以从DSP芯片中分离出来,在PC上模拟DSP的指令集和工作机制,主要用于前期算法的实现和调试。

2硬件在线编程模式:在DSP芯片上实时运行,将应用程序的在线编程和调试与硬件开发板集成。

CCS的开发系统主要由以下组件构成:

1TMS320C54x集成代码生成工具;

2CCS综合开发环境;

3DSP/BIOS实时内核插件及其应用程序接口API;

4实时数据交换RTDX插件及相应的编程接口API;

5由第三方TI公司对外提供多种应用模块插件。

扩展资料:

dsp编程中双重循环、多重循环的优化:

(1)多重循环拆成单层循环,减少循环层数;

例如,双重循环内一个百cycle只使用了一个乘法器,拆成单层循环后,一个cycle可使用2个乘法器,充分利用DSP乘法器资源,同时运算速度也会加快;

(2)如果循环次数较少,则将其放入外循环;如果循环次数更多,则将其放入内存循环;

(3)二维数组的双环:二维数组的行循环置于外环,列循环置于内环;

(4)避免循环内的乘除 *** 作:循环内的乘除 *** 作移到循环外,由加法代替。

#include "myapph"

#include "ICETEK-VC5509-EDUh"

#include "scancodeh"

// :-- Define Timer 0 's Registers ---//

ioport unsigned int tim0;

ioport unsigned int prd0;

ioport unsigned int tcr0;

ioport unsigned int prsc0;

// :-- End of Define -----------------//

void InitMcBSP(); //函数声明

unsigned int uN,nCount,nCount1; //定义外部变量

main() //主程序

{

unsigned char dbScanCode,dbOld; //定义内部变量

dbScanCode=dbOld=0;

nCount=nCount1=0;

PLL_Init(20); //初始化PLL

SDRAM_init(); //初始化SDRAM

InitCTR(); //初始化CTR

InitMcBSP(); //初始化McBSP

uN=60;

CTRGR=1;

InitInterrupt(); //初始化中断

TIME_init(); //初始化定时器

while ( 1 )

{

if ( nCount1==0 )

{

dbScanCode=GetKey(); //读取键盘输入的信息

if ( dbScanCode!=dbOld ) //如果键盘输入信息改变,执行

{

dbOld=dbScanCode;

if ( dbScanCode==SCANCODE_9 )

break;

else if ( dbScanCode==SCANCODE_7 )

PCR1|=2;

else if ( dbScanCode==SCANCODE_8)

PCR1&=0x0fffd;

else if ( dbScanCode==SCANCODE_1 )

uN=60;

else if ( dbScanCode==SCANCODE_2 )

uN=40;

else if ( dbScanCode==SCANCODE_3 )

uN=20;

else if ( dbScanCode==SCANCODE_4 )

uN=10;

else if ( dbScanCode==SCANCODE_5 )

uN=0;

}

}

}

CloseCTR(); //关显示器

exit(0);

}

void InitInterrupt(void)

{

// 设置中断控制寄存器

IVPD=0x80;

IVPH=0x80;

IER0=0x10;

DBIER0 =0x10;

IFR0=0xffff;

asm(" BCLR INTM");

}

void interrupt Timer() //中断响应函数

{

nCount++; nCount%=100;

if ( nCount>uN ) PCR2|=4;

else PCR2&=0x0fffb;

nCount1++; nCount1%=5120;

}

void InitMcBSP()

{

// IOPin: McBSP2FSR S22

//SPCR1RRST_=0,PCRRIOEN=1,PCRFSRM=1,PCRFSRP=0/1

SPCR1_2&=0x0fffe;

PCR2|=0x1400;

// IOPin: McBSP1CLKX S14

//SPCR2XRST_=0,PCRXIOEN=1,PCRCLKXM=1,PCRCLKXP=0/1

SPCR2_1&=0x0fffe;

PCR1|=0x2200;

}

void TIME_init(void)

{

tim0 = (unsigned int )0x1000;

prd0 = (unsigned int )0x1001;

tcr0 = (unsigned int )0x1002;

prsc0 = (unsigned int )0x1003;

tcr0 = 0x04f0;

tim0 = 0;

prd0 = 0x0100;

prsc0 = 2;

tcr0 = 0x00e0;

}

涉及到外设部分就得看具体的DSP型号了,查查数据手册吧。

这都是一些宏定义或者说一些类型的定义,方便后期编程书写和代码查看。

如#define UINT16 unsigned int,后期你编程时要定义一个无符号整型,你就可以直接用UINT16去定义,这样一眼就可以看出这个定义是一个无符号16位整型的数,同样,UINT32一眼就知道该变量是无符号长整型的,占32位。

另外还有其它的一些是寄存器及位的定义,如下面一张图的PLLDIV,通常把寄存器定义成一个结构体,然后在结构体里面定义各个位,这些位的名称通常都和芯片的datasheet里寄存器的定义是一一对应的,后期编程时对寄存器 *** 作就只要对这些结构体 *** 作就可以了,而这些结构体很方便地跟datasheet联系起来,方便了编程和后期维护。

global start ; 定义全局标号

mmregs

data

bss x,1 ; 开设全局变量(非初始化段)

bss y,1 ; 三个变量各为一个字(16位)

bss z,1

text

start:

ST #0f000h,(x)

ST #0e000h,(y)

LD #0h,A

ADD (x),A

ADD (y),A

STL A,(z)

xh:

b xh ; 空循环

end

例如Y(K) = X(k) +X(k-1)+X(k-2)

int x0, x1, x2;

int y0;

x2 = x1;

x1 = x0;

x0 = input

y0 = x0 + x1 + x2;

由于正弦波是单一频率信号。可以采取下述措施: 1、可以在AD输入根据信号频率加一个带通滤波器和一个抗混叠的低通滤波器,或者共用一个低通滤波器。 2、如果滤波器对有用信息造成了不可忽视的衰减,可以根据滤波器的幅频响应特性及信号频率在dsp中做补偿。 3、输出加一个低通滤波器或积分器,消除DA量化时造成的“小台阶”,低通滤波器的截止频率应该高于信号频率,远远低于DA的转换频率。

DSP系统的引导程序(BOOT)是系统加电或复位时,DSP将一段存储在外部的非易失性存储器的程序代码通过DMA方式拷贝到内部的高速内存中运行。这样既能扩展DSP有限的存储空间,又能充分发挥DSP内部资源的效能。用户的代码也可以通过掩膜方式写入到DSP内部ROM中,但这样受容量和价格的限制,且不便于扩展和升级。 DSP的引导过程如下: 1) DSP复位后,通过DMA方式将外部CE1空间的数据读入到内部程序空间地址0处,读入数据的多少因芯片而异(TMS320C6712一次只拷贝1KB)。 2) DSP推出复位状态,开始执行内部程序空间地址0处的程序,这段程序先将外部主程序数据读入到DSP内部程序空间相应地址,然后跳转到主程序运行。 第一步是由芯片自动完成,关键是第二步:用户需要编写相应的汇编程序,实现二次引导,即用户主程序的装载

以上就是关于dsp 用什么编程全部的内容,包括:dsp 用什么编程、DSP直流电动机程序注释、求解DSP程序分析等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10074604.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存