㈠ DSP中如何用汇编指令读写一个全局变量
LDW和银肆态STW都是以地址来作为读取和存储的。你需要得到这个变量的地址,雹氏然锋源后才能用ldw和stw来进行读写操作。
㈡ 有谁用DSP做过数字图像处理吗图像咋读取_基于dsp的图像处理
要用CCS看bmp的举搭信息的,什么大小,像历轮素....
这有一个程序,但不知为何无限循环
#include"stdio.h"
#include"stdlib.h"
typedefcharElemType;
structImgInfo
{unsignedshortImgBitType;//图像位数(色深xbit)
unsignedshortBmpHeight;//图像高度
unsignedshortBmpWidth;//图像宽度
unsignedshortBmpDataPos;//图像数据的起始位置
unsignedlongBmpSize;//图像数据大小
unsignedlong;//图像是否压缩
};
voidGetBmpInfo(FILE*fpBmp,structImgInfo*ImgInfo1)//获取bmp信息,返回图像数据所含字节数OK
{
fseek(fpBmp,0,0);//读取图像数据的起始位置
fread(&ImgInfo1->BmpDataPos,2,1,fpBmp);
getchar();
}
voidReadImgData(FILE*fpBmp,structImgInfo*ImgInfo1,char*BmpData)//将bmp图像数据读入BmpData中
{
fseek(fpBmp,ImgInfo1->BmpDataPos,0);//文件指针移动到图像数据起始位置
fread(BmpData,ImgInfo1->BmpSize,1,fpBmp);
}
voidCnvt24bit()
{
FILE*fpBmp;//文件指针
structImgInfoImgInfo1;//储存图正烂拿像信息
char*BmpData;//储存图像数据
fpBmp=fopen("C:/ti/examples/sim62xx/xdais/firtest/xiaotu.bmp","rb");if(fpBmp==NULL){printf("Erropenfile");getchar();}//打开bmp文件
GetBmpInfo(fpBmp,&ImgInfo1);//获bmp信息
BmpData=(char*)malloc(ImgInfo1.BmpSize);if(BmpData==NULL){printf("ErrMalloc");getchar();}//注意要强制转换类型
ReadImgData(fpBmp,&ImgInfo1,BmpData);//读取BMP图像数据
fclose(fpBmp);
getchar();
}
voidmain()
{
Cnvt24bit();
}
㈢ DSP中对ST0(状态寄存器)的读写操作的具体指令是什么
对于5系列,亏搭状态寄存器里面不是所有位裂迹都可以写,STO中OVA,OVB可以用置位指令SSBX和复位指令RSBX设置,例如
SSBX SXM; 符号扩展SXM=1
RSBX SXM; 禁止符号扩展SXM=0
读可以通过CCS->view->registers->cpu registers 看到CPU的主要寄存器的值。或者查看寄存器所对应肆空并的地址的值。
㈣ 能否从dsp中读取out文件,如何读取
不能读取,.out文件时执行文件,是CCS软件编辑后生成的文件,只能在dsp的开发板或者CCS仿真界面才能运行。希望对你有帮助。
㈤ DSP 如何存储运行过程中的数据啊
方法有很多, 我最常用的方法是加一正仔仔个EEPROM, 将数据存放到EEPROM里, 即使断电,数据也不会丢失.
如果数据修改非常的频繁, EEPROM也有可能故障, 因为一般的EEPROM的写入次数可能就举汪有100万次. 这种情况下我一般会用戚物一个铁电存储器, 比如FM25L16等等, 没有写入次数的限制, 基本上可以无限次数的读写.
㈥ 如何在dsp运行时改写里面的数据,并且生效时使用
dsp运行时不能对其进行程序数据改动,一般是在程序里面添历厅加闭环算法,程序自动读数据然后控制电机,整个过程由dsp自动完成,达到电机自动控制的目的。即使在线仿真也是要停止运行mpu,下程序,然后才能再伏罩次运行新程序。肢厅隐
㈦ DSP28335控制12864液晶,读取LCD数据,lcd_read_data程序应该怎么编写
您好,1. 首先是接口的预定义
----------------------------------------------
#define LCD_DATA (*((volatile Uint16 *)0x0070E0)) // GPIOA7-A0对应DB7-DB0
#define RS GpioDataRegs.GPBDAT.bit.GPIOB0
#define RW GpioDataRegs.GPBDAT.bit.GPIOB1 //别弄错0 1 2
#define EN GpioDataRegs.GPBDAT.bit.GPIOB2 // 实际接线要对应
void InitGpio(void)
{
EALLOW;
GpioMuxRegs.GPAMUX.bit.PWM1_GPIOA0 = 0; // 设置为普通GPIO使用
GpioMuxRegs.GPADIR.bit.GPIOA0 = 1; // 设置为输出
GpioMuxRegs.GPAMUX.bit.PWM2_GPIOA1 = 0;
GpioMuxRegs.GPADIR.bit.GPIOA1 = 1;
GpioMuxRegs.GPAMUX.bit.PWM3_GPIOA2 = 0;
GpioMuxRegs.GPADIR.bit.GPIOA2 = 1;
GpioMuxRegs.GPAMUX.bit.PWM4_GPIOA3 = 0;
GpioMuxRegs.GPADIR.bit.GPIOA3 = 1;
GpioMuxRegs.GPAMUX.bit.PWM5_GPIOA4 = 0;
GpioMuxRegs.GPADIR.bit.GPIOA4 = 1;
GpioMuxRegs.GPAMUX.bit.PWM6_GPIOA5 = 0;
GpioMuxRegs.GPADIR.bit.GPIOA5 = 1;
GpioMuxRegs.GPAMUX.bit.T1PWM_GPIOA6 = 0;
GpioMuxRegs.GPADIR.bit.GPIOA6 = 1;
GpioMuxRegs.GPAMUX.bit.T2PWM_GPIOA7 = 0;
GpioMuxRegs.GPADIR.bit.GPIOA7 = 1;
GpioMuxRegs.GPBMUX.bit.PWM7_GPIOB0 = 0;
GpioMuxRegs.GPBDIR.bit.GPIOB0 = 1;
GpioMuxRegs.GPBMUX.bit.PWM8_GPIOB1 = 0;
GpioMuxRegs.GPBDIR.bit.GPIOB1 = 1;
GpioMuxRegs.GPBMUX.bit.PWM9_GPIOB2 = 0;
GpioMuxRegs.GPBDIR.bit.GPIOB2 = 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单片机的晶振一般为11.0592MHz,而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;
}
}