TI中文支持网
TI专业的中文技术问题搜集分享网站

使用ccs6.0读取matlab产生的.dat文件,读取数据出错。

大家好,本人初学DSP,对CCS操作了解的不多,现在遇到一点问题,希望大家帮助。非常感谢。

本人按照网络教程在matlab中生成一个波形,并按DSP可读取的格式存为.dat文件。

(教程网址:)

matlab程序:

clear all; close all clc; Fs = 150e3;%定义采样率 F1 = 10e3;%定义频率 F2 = 8e3; sample_num = 500;%定义数据点个数 m = 1:sample_num; x = sin(2*pi*F1*m/Fs)+sin(2*pi*F2*m/Fs);%生成原始数据 y = typecast(single(x),'uint32');%首先将x强制转换成single型,然后再转换成具有相同二进制形式的uint32型 这样做是为了方便dat文件存储 figure; plot(x); title('Matlab生成的原始数据'); fid=fopen('2.dat','wt');%以写文本的方式打开一个叫input_file的dat文件(如果没有会自行创建一个) fprintf(fid,'1651 1 180000 1 %x\n',length(m));%输出文件头,文件头必须是dsp所能识别的,%属性分别是固定标识、数据类型(十六进制)、基地址(根据你要存储在DSP什么地址处决定)、数据长度 fprintf(fid,'0x%08x\n',y);%输出y数组,并写到与fid标示符相同的文件 fclose(fid);%关闭fid标示符的文件。

得到的.dat文件如下图:

之后打开CCS6.0,load memory,得到如下数据:

在graph中查看如图:

和最开始生成的数据相差甚远。

请问这个问题该如何解决?希望论坛各位朋友给予帮助。

谢谢。

Green Deng:你好,你的教程地址没有给出。另外,你的graph设置正确吗?有尝试过其他波形的显示吗?

大家好,本人初学DSP,对CCS操作了解的不多,现在遇到一点问题,希望大家帮助。非常感谢。

本人按照网络教程在matlab中生成一个波形,并按DSP可读取的格式存为.dat文件。

(教程网址:)

matlab程序:

clear all; close all clc; Fs = 150e3;%定义采样率 F1 = 10e3;%定义频率 F2 = 8e3; sample_num = 500;%定义数据点个数 m = 1:sample_num; x = sin(2*pi*F1*m/Fs)+sin(2*pi*F2*m/Fs);%生成原始数据 y = typecast(single(x),'uint32');%首先将x强制转换成single型,然后再转换成具有相同二进制形式的uint32型 这样做是为了方便dat文件存储 figure; plot(x); title('Matlab生成的原始数据'); fid=fopen('2.dat','wt');%以写文本的方式打开一个叫input_file的dat文件(如果没有会自行创建一个) fprintf(fid,'1651 1 180000 1 %x\n',length(m));%输出文件头,文件头必须是dsp所能识别的,%属性分别是固定标识、数据类型(十六进制)、基地址(根据你要存储在DSP什么地址处决定)、数据长度 fprintf(fid,'0x%08x\n',y);%输出y数组,并写到与fid标示符相同的文件 fclose(fid);%关闭fid标示符的文件。

得到的.dat文件如下图:

之后打开CCS6.0,load memory,得到如下数据:

在graph中查看如图:

和最开始生成的数据相差甚远。

请问这个问题该如何解决?希望论坛各位朋友给予帮助。

谢谢。

user5886390:

回复 Green Deng:

这个是教程网址,我一步一步按照这个来的:

(blog.csdn.net/…/60958304)

其中的正弦波公式我有试过不同的,但是读入时数据都不对。

在读入时我打开了一个扩展外部sram和外部flash的程序,点击debug之后在0x180000(外部sram)地址下读入.dat文件的内容,另外这个地址在cmd文件中也有声明。

#include "DSP2833x_Device.h"// DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"// DSP2833x Examples Include Filevoid main(void)
{
// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP2833x_SysCtrl.c file.InitSysCtrl();// Step 2. Initalize GPIO:
// This example function is found in the DSP2833x_Gpio.c file and
// illustrates how to set the GPIO to it's default state.
// InitGpio();// Skipped for this exampleInitXintf16Gpio();	//zq// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interruptsDINT;// Initialize the PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags
// are cleared.
// This function is found in the DSP2833x_PieCtrl.c file.InitPieCtrl();// Disable CPU interrupts and clear all CPU interrupt flags:IER = 0x0000;IFR = 0x0000;ChipErase();InitExRam(0x0);FlashWrite(0,0,0xFFFF);ClearExRam(0);FlashRead(0,0,0xFFFF);for( ; ;);
}
#include	"DSP2833X_Device.h"// Definitions for the SST 39VF400A part
//#defineSST_ID0x00BF/* SST Manufacturer's ID code*/
//#defineSST_39VF800A0x2780/* SST39VF800/SST39VF800A device code */
#defineTimeOutErr1
#defineVerifyErr2
#defineWriteOK0
#defineEraseErr3
#defineEraseOK0#defineSectorSize0x800
#defineBlockSize0x8000
unsignedint*FlashStart = (unsignedint *)0x100000;//flash的首地址
unsignedint*ExRamStart = (unsignedint *)0x180000;//sram的首地址Uint16	ChipErase(void){Uint16	Data;Uint32	TimeOut,i;*(FlashStart + 0x5555) = 0xAAAA;*(FlashStart + 0x2AAA) = 0x5555;*(FlashStart + 0x5555) = 0x8080;*(FlashStart + 0x5555) = 0xAAAA;*(FlashStart + 0x2AAA) = 0x5555;*(FlashStart + 0x5555) = 0x1010;i = 0;TimeOut = 0;while(i<5){Data = *(FlashStart +0x3FFFF);if	(Data == 0xFFFF)	i++;else	i=0;if ( ++TimeOut>0x1000000)	return (TimeOutErr);}for	(i=0;i<0x40000;i++){Data = *(FlashStart + i);if (Data !=0xFFFF)	return (EraseErr);}return(EraseOK);}Uint16	FlashWrite(Uint32	RamStart, Uint32RomStart,Uint16	Length){Uint32	i,TimeOut;Uint16	Data1,Data2,j;for	(i=0;i<Length;i++){*(FlashStart + 0x5555) = 0x00AA;*(FlashStart + 0x2AAA) = 0x0055;*(FlashStart + 0x5555) = 0x00A0;*(FlashStart + RomStart + i) = *(ExRamStart + RamStart + i);TimeOut = 0;j=0;while(j<5){Data1 = *(FlashStart + RomStart + i);Data2 = *(FlashStart + RomStart + i);if	(Data1 == Data2)	j++;else	j=0;if ( ++TimeOut>0x1000000)	return (TimeOutErr);}}for (i=0;i<Length;i++){Data1 = *(FlashStart + RomStart +i);Data2 = *(ExRamStart + RamStart +i);if(Data1 != Data2)	return (VerifyErr);}return(WriteOK);}void	FlashRead(Uint32	RamStart, Uint32RomStart,	Uint16	Length){Uint32	i;Uint16	Temp;for	(i=0;i<Length;i++){Temp =*(FlashStart + RomStart +i);*(ExRamStart + RamStart +i) = Temp;}}void	InitExRam(Uint16	Start){Uint16	i;for	(i=0;i<0xFFFF;i++)*(ExRamStart + Start + i) = 0x1201;}
void	ClearExRam(Uint16	Start){Uint16	i;for	(i=0;i<0xFFFF;i++)*(ExRamStart + Start + i) = 0;}
void	RamRead(Uint16	Start){Uint16	i;for	(i=0;i<0xFFFF;i++)*(ExRamStart + Start + i) = *(ExRamStart +i);}//=========================================NO MORE==============================

不知道和程序有没有关系,但还是先放上来。

麻烦您帮忙看看。谢谢。

大家好,本人初学DSP,对CCS操作了解的不多,现在遇到一点问题,希望大家帮助。非常感谢。

本人按照网络教程在matlab中生成一个波形,并按DSP可读取的格式存为.dat文件。

(教程网址:)

matlab程序:

clear all; close all clc; Fs = 150e3;%定义采样率 F1 = 10e3;%定义频率 F2 = 8e3; sample_num = 500;%定义数据点个数 m = 1:sample_num; x = sin(2*pi*F1*m/Fs)+sin(2*pi*F2*m/Fs);%生成原始数据 y = typecast(single(x),'uint32');%首先将x强制转换成single型,然后再转换成具有相同二进制形式的uint32型 这样做是为了方便dat文件存储 figure; plot(x); title('Matlab生成的原始数据'); fid=fopen('2.dat','wt');%以写文本的方式打开一个叫input_file的dat文件(如果没有会自行创建一个) fprintf(fid,'1651 1 180000 1 %x\n',length(m));%输出文件头,文件头必须是dsp所能识别的,%属性分别是固定标识、数据类型(十六进制)、基地址(根据你要存储在DSP什么地址处决定)、数据长度 fprintf(fid,'0x%08x\n',y);%输出y数组,并写到与fid标示符相同的文件 fclose(fid);%关闭fid标示符的文件。

得到的.dat文件如下图:

之后打开CCS6.0,load memory,得到如下数据:

在graph中查看如图:

和最开始生成的数据相差甚远。

请问这个问题该如何解决?希望论坛各位朋友给予帮助。

谢谢。

user5886390:

回复 Green Deng:

blog.csdn.net/…/60958304
不知道为什么这个网址显示不全。。

大家好,本人初学DSP,对CCS操作了解的不多,现在遇到一点问题,希望大家帮助。非常感谢。

本人按照网络教程在matlab中生成一个波形,并按DSP可读取的格式存为.dat文件。

(教程网址:)

matlab程序:

clear all; close all clc; Fs = 150e3;%定义采样率 F1 = 10e3;%定义频率 F2 = 8e3; sample_num = 500;%定义数据点个数 m = 1:sample_num; x = sin(2*pi*F1*m/Fs)+sin(2*pi*F2*m/Fs);%生成原始数据 y = typecast(single(x),'uint32');%首先将x强制转换成single型,然后再转换成具有相同二进制形式的uint32型 这样做是为了方便dat文件存储 figure; plot(x); title('Matlab生成的原始数据'); fid=fopen('2.dat','wt');%以写文本的方式打开一个叫input_file的dat文件(如果没有会自行创建一个) fprintf(fid,'1651 1 180000 1 %x\n',length(m));%输出文件头,文件头必须是dsp所能识别的,%属性分别是固定标识、数据类型(十六进制)、基地址(根据你要存储在DSP什么地址处决定)、数据长度 fprintf(fid,'0x%08x\n',y);%输出y数组,并写到与fid标示符相同的文件 fclose(fid);%关闭fid标示符的文件。

得到的.dat文件如下图:

之后打开CCS6.0,load memory,得到如下数据:

在graph中查看如图:

和最开始生成的数据相差甚远。

请问这个问题该如何解决?希望论坛各位朋友给予帮助。

谢谢。

Green Deng:

回复 user5886390:

不好意思,问一下,你这边使用的是哪款芯片做这个实验的?

大家好,本人初学DSP,对CCS操作了解的不多,现在遇到一点问题,希望大家帮助。非常感谢。

本人按照网络教程在matlab中生成一个波形,并按DSP可读取的格式存为.dat文件。

(教程网址:)

matlab程序:

clear all; close all clc; Fs = 150e3;%定义采样率 F1 = 10e3;%定义频率 F2 = 8e3; sample_num = 500;%定义数据点个数 m = 1:sample_num; x = sin(2*pi*F1*m/Fs)+sin(2*pi*F2*m/Fs);%生成原始数据 y = typecast(single(x),'uint32');%首先将x强制转换成single型,然后再转换成具有相同二进制形式的uint32型 这样做是为了方便dat文件存储 figure; plot(x); title('Matlab生成的原始数据'); fid=fopen('2.dat','wt');%以写文本的方式打开一个叫input_file的dat文件(如果没有会自行创建一个) fprintf(fid,'1651 1 180000 1 %x\n',length(m));%输出文件头,文件头必须是dsp所能识别的,%属性分别是固定标识、数据类型(十六进制)、基地址(根据你要存储在DSP什么地址处决定)、数据长度 fprintf(fid,'0x%08x\n',y);%输出y数组,并写到与fid标示符相同的文件 fclose(fid);%关闭fid标示符的文件。

得到的.dat文件如下图:

之后打开CCS6.0,load memory,得到如下数据:

在graph中查看如图:

和最开始生成的数据相差甚远。

请问这个问题该如何解决?希望论坛各位朋友给予帮助。

谢谢。

user5886390:

回复 Green Deng:

DSP28335

大家好,本人初学DSP,对CCS操作了解的不多,现在遇到一点问题,希望大家帮助。非常感谢。

本人按照网络教程在matlab中生成一个波形,并按DSP可读取的格式存为.dat文件。

(教程网址:)

matlab程序:

clear all; close all clc; Fs = 150e3;%定义采样率 F1 = 10e3;%定义频率 F2 = 8e3; sample_num = 500;%定义数据点个数 m = 1:sample_num; x = sin(2*pi*F1*m/Fs)+sin(2*pi*F2*m/Fs);%生成原始数据 y = typecast(single(x),'uint32');%首先将x强制转换成single型,然后再转换成具有相同二进制形式的uint32型 这样做是为了方便dat文件存储 figure; plot(x); title('Matlab生成的原始数据'); fid=fopen('2.dat','wt');%以写文本的方式打开一个叫input_file的dat文件(如果没有会自行创建一个) fprintf(fid,'1651 1 180000 1 %x\n',length(m));%输出文件头,文件头必须是dsp所能识别的,%属性分别是固定标识、数据类型(十六进制)、基地址(根据你要存储在DSP什么地址处决定)、数据长度 fprintf(fid,'0x%08x\n',y);%输出y数组,并写到与fid标示符相同的文件 fclose(fid);%关闭fid标示符的文件。

得到的.dat文件如下图:

之后打开CCS6.0,load memory,得到如下数据:

在graph中查看如图:

和最开始生成的数据相差甚远。

请问这个问题该如何解决?希望论坛各位朋友给予帮助。

谢谢。

小清新941006:

回复 user5886390:

请问你到最后解决了吗?我是从ccs中导出数据,想在matlab里面分析。具体的步骤也不太清楚

赞(0)
未经允许不得转载:TI中文支持网 » 使用ccs6.0读取matlab产生的.dat文件,读取数据出错。
分享到: 更多 (0)