bin文件:8位二进制,转换成rom 的coe文件
%%生成4096字节的coe文件,并掉转原始文件中的位顺序。
%% 读取bin文件
fileID = fopen('F:\SRC\02-MATLAB\test.bin','r');
data = fread(fileID,'ubit8'); % 以8位为单位读取
fclose(fileID);
%获取原始文件长度
data_length=length(data);
% 生成coe文件
fid = fopen('test.coe','w');
%-ROM coe标准格式,以16进制写入
fprintf( fid, 'MEMORY_INITIALIZATION_RADIX = 16;\n');
fprintf( fid, 'MEMORY_INITIALIZATION_VECTOR =\n');
fprintf(fid,'%x,\n',00);
fprintf(fid,'%x,\n',00);
fprintf(fid,'%x,\n',00);
fprintf(fid,'%x,\n',00);
%- 写数据
for i = 1:1:data_length
if(i<data_length)
m=data(i);
m_b_l0=bitget(m,1);
m_b_l1=bitget(m,2);
m_b_l2=bitget(m,3);
m_b_l3=bitget(m,4);
m_b_l4=bitget(m,5);
m_b_l5=bitget(m,6);
m_b_l6=bitget(m,7);
m_b_l7=bitget(m,8);
m_c=(m_b_l0*2^7+ ...
m_b_l1*2^6+ ...
m_b_l2*2^5+ ...
m_b_l3*2^4+ ...
m_b_l4*2^3+ ...
m_b_l5*2^2+ ...
m_b_l6*2^1+ ...
m_b_l7*2^0);
fprintf(fid,'%x,\n',m_c);
else
if(data_length==4096)
m=data(i);
m_b_l0=bitget(m,1);
m_b_l1=bitget(m,2);
m_b_l2=bitget(m,3);
m_b_l3=bitget(m,4);
m_b_l4=bitget(m,5);
m_b_l5=bitget(m,6);
m_b_l6=bitget(m,7);
m_b_l7=bitget(m,8);
m_c=(m_b_l0*2^7+ ...
m_b_l1*2^6+ ...
m_b_l2*2^5+ ...
m_b_l3*2^4+ ...
m_b_l4*2^3+ ...
m_b_l5*2^2+ ...
m_b_l6*2^1+ ...
m_b_l7*2^0);
fprintf(fid,'%x;\n',m_c); %如果原始数据的长度等于4096,写入最后一个数据,并以分号结尾;
else
m=data(i);
m_b_l0=bitget(m,1);
m_b_l1=bitget(m,2);
m_b_l2=bitget(m,3);
m_b_l3=bitget(m,4);
m_b_l4=bitget(m,5);
m_b_l5=bitget(m,6);
m_b_l6=bitget(m,7);
m_b_l7=bitget(m,8);
m_c=(m_b_l0*2^7+ ...
m_b_l1*2^6+ ...
m_b_l2*2^5+ ...
m_b_l3*2^4+ ...
m_b_l4*2^3+ ...
m_b_l5*2^2+ ...
m_b_l6*2^1+ ...
m_b_l7*2^0);
fprintf(fid,'%x,\n',m_c); %如果原始数据的长度不等于4096,写入原始文件中的最后一个数据。
for j = 1:1:4096-4-data_length %填充0xFF
if(j<4096-4-data_length)
fprintf(fid,'%x,\n',255);
else
fprintf(fid,'%x;\n',255);
end
end
end
end
end
fclose(fid);
txt文件:16位16进制,转换成Double数组。
clear;
%%
%读取txt文件中的数据
fileID = fopen('F:\SRC\03-simulink\test\adc_20MHz_32768.txt','r');
data_hex = textscan(fileID,'%s');
fclose(fileID);
%%
%长度与时间信息
data_length=length(data_hex{1,1});
n=(1:data_length)';
%%
%格式转换
data_r=zeros(data_length,1);
for i=1:data_length
data_r(i,1)=hex2dec(convertCharsToStrings(data_hex{1,1}(i,1)));
end
data_dec=zeros(data_length,1);
for i = 1:1:data_length
msb_sign=bitget(data_r(i),16);
if(msb_sign==1)
data_dec(i,1)=data_r(i)-65536;
else
data_dec(i,1)=data_r(i);
end
end
%%
%数据源 to simulink
data_src=[n,data_dec];
导入数据后,显示不完全设置,修改默认设置,修改后如下图
txt文件:10进制,转换成Double数组。
data_dec = load('F:\SRC\03-simulink\test\13_90_1M_1Vemf.txt');