📄 dec5416-mem.c
字号:
X[1846]=-4596;
X[1847]=2926;
X[1848]=3402;
X[1849]=-1937;
X[1850]=-1527;
X[1851]=-1454;
X[1852]=9049;
X[1853]=-1242;
X[1854]=2421;
X[1855]=2062;
X[1856]=-13905;
X[1857]=9349;
X[1858]=-824;
X[1859]=-4406;
X[1860]=3724;
X[1861]=1710;
X[1862]=-4105;
X[1863]=-18388;
X[1864]=14132;
X[1865]=6339;
X[1866]=-12733;
X[1867]=14498;
X[1868]=3380;
X[1869]=-8690;
X[1870]=1073;
X[1871]=11012;
X[1872]=-1893;
X[1873]=-7189;
X[1874]=4537;
X[1875]=-3175;
X[1876]=-6808;
X[1877]=1197;
X[1878]=4523;
X[1879]=-10814;
X[1880]=890;
X[1881]=-7343;
X[1882]=-8873;
X[1883]=9935;
X[1884]=-6229;
X[1885]=1549;
X[1886]=-1923;
X[1887]=4069;
X[1888]=-7130;
X[1889]=-4486;
X[1890]=20270;
X[1891]=-9533;
X[1892]=-3073;
X[1893]=3204;
X[1894]=-4244;
X[1895]=355;
X[1896]=-245;
X[1897]=10367;
X[1898]=-7804;
X[1899]=2860;
X[1900]=1117;
X[1901]=-8807;
X[1902]=9650;
X[1903]=-1776;
X[1904]=-1425;
X[1905]=-2384;
X[1906]=-5241;
X[1907]=2091;
X[1908]=-275;
X[1909]=150;
X[1910]=465;
X[1911]=-1622;
X[1912]=-4611;
X[1913]=2216;
X[1914]=897;
X[1915]=765;
X[1916]=787;
X[1917]=1717;
X[1918]=531;
X[1919]=-1505;
X[1920]=8060;
X[1921]=-3512;
X[1922]=450;
X[1923]=4091;
X[1924]=-7474;
X[1925]=-187;
X[1926]=3080;
X[1927]=2596;
X[1928]=-5709;
X[1929]=1388;
X[1930]=-1600;
X[1931]=-6603;
X[1932]=6112;
X[1933]=-4252;
X[1934]=-853;
X[1935]=1739;
X[1936]=-2120;
X[1937]=-714;
X[1938]=824;
X[1939]=33;
X[1940]=-2296;
X[1941]=5709;
X[1942]=2714;
X[1943]=-1820;
X[1944]=5643;
X[1945]=5775;
X[1946]=-209;
X[1947]=1190;
X[1948]=4340;
X[1949]=2128;
X[1950]=223;
X[1951]=216;
X[1952]=4120;
X[1953]=-1498;
X[1954]=-7921;
X[1955]=2223;
X[1956]=-2106;
X[1957]=-6486;
X[1958]=450;
X[1959]=-48;
X[1960]=-5438;
X[1961]=-3739;
X[1962]=1124;
X[1963]=-5629;
X[1964]=-3461;
X[1965]=773;
X[1966]=-3358;
X[1967]=3820;
X[1968]=2523;
X[1969]=-1864;
X[1970]=4318;
X[1971]=5094;
X[1972]=-2311;
X[1973]=-3182;
X[1974]=4896;
X[1975]=1381;
X[1976]=-3102;
X[1977]=2655;
X[1978]=1798;
X[1979]=-2391;
X[1980]=-758;
X[1981]=612;
X[1982]=-714;
X[1983]=-2567;
X[1984]=348;
X[1985]=-1703;
X[1986]=-2304;
X[1987]=2421;
X[1988]=-670;
X[1989]=-1176;
X[1990]=883;
X[1991]=-1249;
X[1992]=-2157;
X[1993]=4471;
X[1994]=4611;
X[1995]=-2230;
X[1996]=5138;
X[1997]=7225;
X[1998]=853;
X[1999]=1908;
X[2000]=4735;
X[2001]=6918;
X[2002]=326;
X[2003]=428;
X[2004]=3431;
X[2005]=-2033;
X[2006]=-875;
X[2007]=-1791;
X[2008]=55;
X[2009]=-985;
X[2010]=-1989;
X[2011]=2025;
X[2012]=-1242;
X[2013]=619;
X[2014]=201;
X[2015]=-187;
X[2016]=1468;
X[2017]=-516;
X[2018]=143;
X[2019]=11;
X[2020]=2552;
X[2021]=-3373;
X[2022]=-1095;
X[2023]=3563;
X[2024]=-2428;
X[2025]=50;
X[2026]=1175;
X[2027]=77;
X[2028]=-172;
X[2029]=1234;
X[2030]=1417;
X[2031]=-1725;
X[2032]=157;
X[2033]=-2633;
X[2034]=-3058;
X[2035]=-809;
X[2036]=-2377;
X[2037]=289;
X[2038]=392;
X[2039]=4;
X[2040]=311;
X[2041]=-1534;
X[2042]=-692;
X[2043]=1190;
X[2044]=926;
X[2045]=-1102;
X[2046]=-575;
X[2047]=1278;
for(i = 0 ; i<0x104;i++)
{
uart[i] = 0;
uarts[i] = 0;
}
for(i=0;i<0x100;i++)
{
calresult[i]=0;
}
for(i=0;i<0x400;i++)
{
sramread[i]=0;
}
/*获取有效的串口句柄*/
uart_b = uart_open(UART_B);
/*初始化串口*/
uart_setup(uart_b, /*串口A*/
buad_19k2, /*串口的波特率设置*/
data_w8, /*数据长度为8*/
data_s1, /*数据停止位为1*/
//uart_parity, /*设置奇较验位*/
0,
(fifo_enable+fifo_txdip16+fifo_rxdip16),/*FIFO设置*/
0); /*设置自闭环方式*/
/*关闭系统的串口中断*/
sysint_enable(0x0);
/*清空fifo*/
while(uartnull ==0)
{
if((uart_read_reg(uart_b,lsr) & 0x1) == 1)
{
uart_read_reg(uart_b,rhr);
}
else
{
uartnull = 1;
}
}
/*打开codec数据接口*/
codec_data = codec_open(CODEC_DATA);
/*打开codec命令接口*/
codec_command = codec_open(CODEC_COMMAND);
/*选择麦克风,或是LINE作为输入,这里选择LINE*/
codec_analog_mode(codec_command,0x12);
/*设置波特率,输入与输出均为8K*/
codec_sample_rate(codec_command,0xd);
/*修改其它参数请参看dec5416.c关于CODE的初始化的部分*/
/*配置系统存储器*/
loop:
memory_set(0x80);
sramaddr = 0x8000;
for(i =0; i<0x800;i++)
{
/* Wait for sample from handset */
while (!MCBSP_RRDY(CODEC_DATA)) {};
/* Read sample from and write back to handset codec */
audiodata = *(volatile u16*)DRR1_ADDR(CODEC_DATA);
*(volatile u16*)DXR1_ADDR(CODEC_DATA) = audiodata;
*(unsigned int *)sramaddr++ = audiodata;
//X[i]=audiodata;
}
/*填写第二页*/
memory_set(0x81);
sramaddr = 0x8000;
for(i =0; i<0x8000;i++)
{
*(unsigned int *)sramaddr++ = i+1;
}
/*修改页控制器,查看每页填的数据是否正确*/
//memory_set(0x80);
//memory_set(0x81);
/*将Sram映射到程序空间的0x100000处*/
memory_set(0xa0);
/*读回头0x100个数据,观察是否正确*/
progm_readm(srampaddr,&sramread[0],0x400);
// progm_readm( (srampaddr+0x8000),&sramread[0],0x400);
/*将读取的数进行计算*/
memory_set(0x81);
sramaddr = 0x8000;
calresult[0]=2*sramread[0]+4*sramread[1];
*(unsigned int *)sramaddr++ = calresult[0];
asm(" nop ");
/*通过串口B发送计算结果*/
uart_send_sigle(uart_b ,calresult[0]);
asm(" nop ");
for (i=0;i<1024;i++)
{
X11[i]=X[2*i+1];
X21[i]=X[2*i];
}
for (j=0;j<1023;j++)
{
d1[j]=X11[j]-(X21[j]+X21[j+1])/2; //一次分解细节信号
}
d1[1023]=X11[1023]-(X21[1023]+X21[0])/2;
//for(i=0;i<5555;i++)
for (i=1;i<1024;i++)
{
c1[i]=X21[i]+(d1[i]+d1[i-1])/4; //一次分解逼近信号
}
c1[0]=X21[0]+(d1[0]+d1[1023])/4;
a=d1[1]+d1[0];
//二次剖分
for (i=0;i<512;i++)
{
X12[i]=c1[2*i+1];
X22[i]=c1[2*i];
}
for (j=0;j<511;j++)
{
d2[j]=X12[j]-(X22[j]+X22[j+1])/2; //二次分解细节信号
}
d2[511]=X12[511]-(X22[511]+X22[0])/2;
for (i=1;i<512;i++)
{
c2[i]=X22[i]+(d2[i]+d2[i-1])/4; //二次分解逼近信号
}
c2[0]=X22[1]+(d2[0]+d2[511])/4;
//三次剖分
for (i=0;i<256;i++)
{
X13[i]=c2[2*i+1];
X23[i]=c2[2*i];
}
for (j=0;j<255;j++)
{
d3[j]=X13[j]-(X23[j]+X23[j+1])/2; //三次分解细节信号
}
d3[255]=X13[255]-(X23[255]+X23[0])/2;
for (i=1; i<256; i++)
{
c3[i]=X23[i]+(d3[i]+d3[i-1])/4; //三次分解逼近信号
}
c3[0]=X23[0]+(d3[0]+d3[255])/4;
//四次剖分
for (i=0;i<128;i++)
{
X14[i]=c3[2*i+1];
X24[i]=c3[2*i];
}
for (j=0;j<127;j++)
{
d4[j]=X14[j]-(X24[j]+X24[j+1])/2; //四次分解细节信号
}
d4[127]=X14[127]-(X24[127]+X24[0])/2;
for (i=1;i<=127;i++)
{
c4[i]=X24[i]+(d4[i]+d4[i-1])/4; //四次分解逼近信号
}
c4[0]=X24[0]+(d4[0]+d4[127])/4;
//五次剖分
for (i=0;i<64;i++)
{
X15[i]=c4[2*i+1];
X25[i]=c4[2*i];
}
for (j=0;j<63;j++)
{
d5[j]=X15[j]-(X25[j]+X25[j+1])/2; //四次分解细节信号
}
d5[63]=X15[63]-(X25[63]+X25[0])/2;
for (i=1;i<=63;i++)
{
c5[i]=X25[i]+(d5[i]+d5[i-1])/4; //四次分解逼近信号
}
c5[0]=X25[0]+(d5[0]+d5[63])/4;
//计算中值
for (i=0;i<1024;i++)
{
d11[i]=abs(d1[i]);
}
for (i=0;i<1024;i++)
{
for (j=i+1;j<1024;j++)
{
if (d11[i]>d11[j])
{
a=d11[j];
d11[j]=d11[i];
d11[i]=a;
}
else
d11[i]=d11[i];
}
}
M1=(d11[511]+d11[512])/2;
for (i=0;i<512;i++)
{
d21[i]=abs(d2[i]);
}
for (i=0;i<512; i++)
{
for (j=i+1;j<512;j++)
{
if (d21[i]>d21[j])
{
a=d21[j];
d21[j]=d21[i];
d21[i]=a;
}
else
d21[i]=d21[i];
}
}
M2=(d21[255]+d21[256])/2;
for (i=1;i<256;i++)
{
d31[i]=abs(d3[i]);
}
for (i=0;i<256;i++)
{
for (j=i+1;j<256;j++)
{
if (d31[i]>d31[j])
{
a=d31[j];
d31[j]=d31[i];
d31[i]=a;
}
else
d31[i]=d31[i];
}
}
M3=(d31[127]+d31[128])/2;
for (i=0;i<128;i++)
{
d41[i]=abs(d4[i]);
}
for (i=0;i<128;i++)
{
for (j=i+1;j<128;j++)
{
if (d41[i]>d41[j])
{
a=d41[j];
d41[j]=d41[i];
d41[i]=a;
}
else
d41[i]=d41[i];
}
}
M4=(d41[64]+d41[65])/2;
for (i=0;i<64;i++)
{
d51[i]=abs(d5[i]);
}
for (i=0;i<64;i++)
{
for (j=i+1;j<=64;j++)
{
if (d51[i]>d51[j])
{
a=d51[j];
d51[j]=d51[i];
d51[i]=a;
}
else
d51[i]=d51[i];
}
}
M5=(d51[32]+d51[33])/2;
asm(" nop ");
asm(" nop ");
asm(" nop ");
//阈值处理
M1=M1/10*55;
M2=M2/10*52;
M3=M3/10*49;
M4=M4/10*46;
M5=M5/10*43;
for (i=0;i<1024;i++) //第一层分解的细节信号
{
if (d1[i]>M1)
d1[i]=d1[i]-M1;
if (d1[i]<-M1)
d1[i]=d1[i]+M1;
else
d1[i]=0;
}
for (i=0;i<512;i++) //第二层分解的细节信号
{
if (d2[i]>M2)
d2[i]=d2[i]-M2;
if (d2[i]<-M2)
d2[i]=d2[i]+M2;
else
d2[i]=0;
}
for (i=0;i<256;i++) //第三层分解的细节信号
{
if (d3[i]>M3)
d3[i]=d3[i]-M3;
if (d3[i]<-M3)
d3[i]=d3[i]+M3;
else
d3[i]=0;
}
for (i=0;i<128;i++) //第四层分解的细节信号
{
if (d4[i]>M4)
d4[i]=d4[i]-M4;
if (d4[i]<-M4)
d4[i]=d4[i]+M4;
else
d4[i]=0;
}
for (i=0;i<64;i++) //第五层分解的细节信号
{
if (d5[i]>M5)
d5[i]=d5[i]-M5;
if (d5[i]<-M5)
d5[i]=d5[i]+M5;
else
d5[i]=0;
}
//重构
//五次剖分
for (i=1;i<64;i++)
{
Xe5[i]=c5[i]-(d5[i]+d5[i-1])/4;
}
Xe5[0]=c5[0]-(d5[0]+d5[63])/4;
for (j=0;j<63;j++)
{
Xo5[j]=d5[j]+(Xe5[j]+Xe5[j+1])/2;
}
Xo5[63]=d5[63]+(Xe5[63]+Xe5[0])/2;
for (i=0;i<64;i++)
{
X5[2*i]=Xe5[i];
X5[2*i+1]=Xo5[i];
}
//四次剖分
for (i=1;i<128;i++)
{
Xe4[i]=X5[i]-(d4[i]+d4[i-1])/4;
}
Xe4[0]=X5[0]-(d4[0]+d4[127])/4;
for (j=0;j<127;j++)
{
Xo4[j]=d4[j]+(Xe4[j]+Xe4[j+1])/2;
}
Xo4[127]=d4[127]+(Xe4[127]+Xe4[0])/2;
for (i=0;i<128;i++)
{
X4[2*i]=Xe4[i];
X4[2*i+1]=Xo4[i];
}
//三次剖分
for (i=1;i<256;i++)
{
Xe3[i]=X4[i]-(d3[i]+d3[i-1])/4;
}
Xe3[0]=X4[0]-(d3[0]+d3[255])/4;
for (j=0;j<255;j++)
{
Xo3[j]=d3[j]+(Xe3[j]+Xe3[j+1])/2;
}
Xo3[255]=d3[255]+(Xe3[255]+Xe3[0])/2;
for (i=0;i<256;i++)
{
X3[2*i]=Xe3[i];
X3[2*i+1]=Xo3[i];
}
//二次剖分
for (i=1;i<512;i++)
{
Xe2[i]=X3[i]-(d2[i]+d2[i-1])/4;
}
Xe2[0]=X3[0]-(d2[0]+d2[511])/4;
for (j=0;j<511;j++)
{
Xo2[j]=d2[j]+(Xe2[j]+Xe2[j+1])/2;
}
Xo2[511]=d2[511]+(Xe2[511]+Xe2[0])/2;
for (i=0;i<512;i++)
{
X2[2*i]=Xe2[i];
X2[2*i+1]=Xo2[i];
}
//第一次剖分
for (i=1;i<1024;i++)
{
Xe1[i]=X2[i]-(d1[i]+d1[i-1])/4;
}
Xe1[0]=X2[0]-(d1[0]+d1[1023])/4;
for (j=0;j<1023;j++)
{
Xo1[j]=d1[j]+(Xe1[j]+Xe1[j+1])/2;
}
Xo1[1023]=d1[1023]+(Xe1[1023]+Xe1[0])/2;
for (i=0;i<1024;i++)
{
X1[2*i]=Xe1[i];
X1[2*i+1]=Xo1[i];
}
//asm(" nop ");
for (i=0;i<4444;i++)
goto loop;
// memory_set(0xa0);
// progm_readm( (srampaddr+0x8000),&sramread[0],0x400);
// memory_set(0x81);
// *(unsigned int *)sramaddr++ = 11;
// memory_set(0xa0);
// progm_readm( (srampaddr+0x8000),&sramread[0],0x400);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -